File: numptwe.F

package info (click to toggle)
emoslib 000380%2Bdfsg-3
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 47,712 kB
  • ctags: 11,551
  • sloc: fortran: 89,643; ansic: 24,200; makefile: 370; sh: 355
file content (125 lines) | stat: -rwxr-xr-x 2,517 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
C Copyright 1981-2007 ECMWF
C 
C Licensed under the GNU Lesser General Public License which
C incorporates the terms and conditions of version 3 of the GNU
C General Public License.
C See LICENSE and gpl-3.0.txt for details.
C

      INTEGER FUNCTION NUMPTWE(WEST,EAST,GRIDSTEP)
C
C---->
C**** NUMPTWE
C
C     Purpose
C     -------
C
C     Calculate number of grid points in the range from west to east.
C
C
C     Interface
C     ---------
C
C     IRET = NUMPTWE(WEST,EAST,GRIDSTEP)
C
C     Input
C     -----
C
C     WEST     - Western boundary in degrees
C     EAST     - Eastern boundary in degrees
C     GRIDSTEP - Grid interval in degrees
C
C
C     Output
C     ------
C
C     Function returns the number of grid points in the east-west
C     interval.
C
C
C     Method
C     ------
C
C     The grid is assumed to start at Greenwich.
C
C
C     Externals
C     ---------
C
C     None.
C
C     Author
C     ------
C
C     J.D.Chambers     ECMWF     Nov 1997
C
C
C     Modifications
C     -------------
C
C     None.
C
C----<
C
      IMPLICIT NONE
C
C     Function arguments
C
      REAL EAST, WEST, GRIDSTEP
C
C     Local variables
C
      INTEGER NL
      REAL*8 DEAST, DWEST
      REAL*8 LEFT, RIGHT, STEP, EPS
      DATA EPS/1.0E-3/
C
C     Statement function
      LOGICAL EQUAL
      REAL*8 A, B
      EQUAL(A,B) = ( ABS(A-B) .LT.EPS )
C
C ------------------------------------------------------------------
C     Section 1.   Initialise
C ------------------------------------------------------------------
C
  100 CONTINUE
C
C     Make all longitudes positive for calculation of difference
C
      DEAST = EAST
      DWEST = WEST
      RIGHT = DEAST + 360.0
      LEFT  = DWEST + 360.0
      STEP  = GRIDSTEP
      IF( RIGHT.LT.LEFT) RIGHT = RIGHT + 360.0
C
C ------------------------------------------------------------------
C     Section 2.   Calculate the number of points in the interval
C ------------------------------------------------------------------
C
  200 CONTINUE
C
C     Equal boundaries
C
      IF( EQUAL(LEFT,RIGHT) ) THEN
        NUMPTWE = 1
        GOTO 900
      ENDIF
C
C     Calculate offset of westernmost gridpoint
C
      NL = INT((LEFT+EPS)/STEP)
      IF( .NOT. EQUAL(LEFT,(NL*STEP)) ) NL = NL + 1
C
      RIGHT = RIGHT - (NL*STEP)
      NUMPTWE = INT((RIGHT+EPS)/STEP) + 1
C
C ------------------------------------------------------------------
C     Section 9.   Return
C ------------------------------------------------------------------
C
  900 CONTINUE
C
      RETURN
      END