NCEPLIBS-w3emc  2.11.0
w3ft204.f
Go to the documentation of this file.
1 C> @file
2 C> @brief Convert (361,181) grid to (93,68) mercator grid.
3 C> @author Ralph Jones @date 1994-05-18
4 
5 C> Convert a n. s. hemisphere 1.0 degree lat.,lon. 361 by
6 C> 181 grid to a national - hawaii (mercator) 93*68 awips 204
7 C> grid.
8 C>
9 C> ### Program History Log:
10 C> Date | Programmer | Comment
11 C> -----|------------|--------
12 C> 1994-05-18 | Ralph Jones | Initial.
13 C>
14 C> @param[in] ALOLA 361*181 grid 1.0 deg. lat,lon grid n. hemi.
15 C> 65341 point grid. 360 * 181 one degree grib grid 3 was flipped, greenwish added
16 C> to right side.
17 C> @param[in] INTERP 1 linear interpolation , ne.1 biquadratic
18 C> @param[out] AMERC 93*68 grid national - hawaii (mercator) 6324 point grid
19 C> is awips grid type 204
20 C> @note
21 C> - 1. W1 and w2 are used to store sets of constants which are
22 C> reusable for repeated calls to the subroutine. 20 other array
23 C> are saved and reused on the next call.
24 C>
25 C> @author Ralph Jones @date 1994-05-18
26  SUBROUTINE w3ft204(ALOLA,AMERC,INTERP)
27 C
28  parameter(npts=6324,ii=93,jj=68)
29  parameter(alatin=20.000)
30  parameter(pi=3.1416)
31  parameter(dx=160000.0)
32  parameter(alat1=-25.000)
33  parameter(alon1=110.000)
34 C
35  REAL WLON(NPTS), XLAT(NPTS)
36  REAL XI(II,JJ), XJ(II,JJ)
37  REAL XII(NPTS), XJJ(NPTS)
38  REAL ALOLA(361,181), AMERC(NPTS), ERAS(NPTS,4)
39  REAL W1(NPTS), W2(NPTS)
40  REAL XDELI(NPTS), XDELJ(NPTS)
41  REAL XI2TM(NPTS), XJ2TM(NPTS)
42 C
43  INTEGER IV(NPTS), JV(NPTS), JY(NPTS,4)
44  INTEGER IM1(NPTS), IP1(NPTS), IP2(NPTS)
45 C
46  LOGICAL LIN
47 C
48  SAVE
49 C
50  equivalence(xi(1,1),xii(1)),(xj(1,1),xjj(1))
51 C
52 C DATA DEGPR /57.2957795/
53  DATA rerth /6.3712e+6/
54  DATA intrpo/99/
55  DATA iswt /0/
56 C
57  radpd = pi / 180.0
58  degpr = 180.0 / pi
59  clain = cos(radpd * alatin)
60  dellon = dx / (rerth * clain)
61  djeo = (alog(tan(0.5*((alat1+90.0)*radpd))))/dellon
62 C
63  lin = .false.
64  IF (interp.EQ.1) lin = .true.
65 C
66  IF (iswt.EQ.1) GO TO 900
67 C
68  deg = 1.0
69 C
70 C NEXT 32 LINES OF CODE PUTS SUBROUTINE W3FB09 IN LINE
71 C
72  DO 100 j = 1,jj
73  DO 100 i = 1,ii
74  xi(i,j) = i
75  xj(i,j) = j
76  100 CONTINUE
77 C
78  DO 200 kk = 1,npts
79  xlat(kk) = 2.0*atan(exp(dellon*(djeo + xjj(kk)-1.)))
80  & * degpr - 90.0
81  200 CONTINUE
82 C
83  DO 300 kk = 1,npts
84  wlon(kk) = (xii(kk) -1.0) * dellon * degpr + alon1
85  300 CONTINUE
86 C
87  DO 400 kk = 1,npts
88  w1(kk) = wlon(kk) + 1.0
89  w2(kk) = xlat(kk) + 91.0
90  400 CONTINUE
91 C
92  iswt = 1
93  intrpo = interp
94  GO TO 1000
95 C
96 C AFTER THE 1ST CALL TO W3FT204 TEST INTERP, IF IT HAS
97 C CHANGED RECOMPUTE SOME CONSTANTS
98 C
99  900 CONTINUE
100  IF (interp.EQ.intrpo) GO TO 2100
101  intrpo = interp
102 C
103  1000 CONTINUE
104  DO 1100 k = 1,npts
105  iv(k) = w1(k)
106  jv(k) = w2(k)
107  xdeli(k) = w1(k) - iv(k)
108  xdelj(k) = w2(k) - jv(k)
109  ip1(k) = iv(k) + 1
110  jy(k,3) = jv(k) + 1
111  jy(k,2) = jv(k)
112  1100 CONTINUE
113 C
114  IF (lin) GO TO 2100
115 C
116  DO 1200 k = 1,npts
117  ip2(k) = iv(k) + 2
118  im1(k) = iv(k) - 1
119  jy(k,1) = jv(k) - 1
120  jy(k,4) = jv(k) + 2
121  xi2tm(k) = xdeli(k) * (xdeli(k) - 1.0) * .25
122  xj2tm(k) = xdelj(k) * (xdelj(k) - 1.0) * .25
123  1200 CONTINUE
124 C
125  2100 CONTINUE
126  IF (lin) THEN
127 C
128 C LINEAR INTERPOLATION
129 C
130  DO 2200 kk = 1,npts
131  eras(kk,2) = (alola(ip1(kk),jy(kk,2))-alola(iv(kk),jy(kk,2)))
132  & * xdeli(kk) + alola(iv(kk),jy(kk,2))
133  eras(kk,3) = (alola(ip1(kk),jy(kk,3))-alola(iv(kk),jy(kk,3)))
134  & * xdeli(kk) + alola(iv(kk),jy(kk,3))
135  2200 CONTINUE
136 C
137  DO 2300 kk = 1,npts
138  amerc(kk) = eras(kk,2) + (eras(kk,3) - eras(kk,2))
139  & * xdelj(kk)
140  2300 CONTINUE
141 C
142  ELSE
143 C
144 C QUADRATIC INTERPOLATION
145 C
146  DO 2400 kk = 1,npts
147  eras(kk,1)=(alola(ip1(kk),jy(kk,1))-alola(iv(kk),jy(kk,1)))
148  & * xdeli(kk) + alola(iv(kk),jy(kk,1)) +
149  & ( alola(im1(kk),jy(kk,1)) - alola(iv(kk),jy(kk,1))
150  & - alola(ip1(kk),jy(kk,1))+alola(ip2(kk),jy(kk,1)))
151  & * xi2tm(kk)
152  eras(kk,2)=(alola(ip1(kk),jy(kk,2))-alola(iv(kk),jy(kk,2)))
153  & * xdeli(kk) + alola(iv(kk),jy(kk,2)) +
154  & ( alola(im1(kk),jy(kk,2)) - alola(iv(kk),jy(kk,2))
155  & - alola(ip1(kk),jy(kk,2))+alola(ip2(kk),jy(kk,2)))
156  & * xi2tm(kk)
157  eras(kk,3)=(alola(ip1(kk),jy(kk,3))-alola(iv(kk),jy(kk,3)))
158  & * xdeli(kk) + alola(iv(kk),jy(kk,3)) +
159  & ( alola(im1(kk),jy(kk,3)) - alola(iv(kk),jy(kk,3))
160  & - alola(ip1(kk),jy(kk,3))+alola(ip2(kk),jy(kk,3)))
161  & * xi2tm(kk)
162  eras(kk,4)=(alola(ip1(kk),jy(kk,4))-alola(iv(kk),jy(kk,4)))
163  & * xdeli(kk) + alola(iv(kk),jy(kk,4)) +
164  & ( alola(im1(kk),jy(kk,4)) - alola(iv(kk),jy(kk,4))
165  & - alola(ip1(kk),jy(kk,4))+alola(ip2(kk),jy(kk,4)))
166  & * xi2tm(kk)
167  2400 CONTINUE
168 C
169  DO 2500 kk = 1,npts
170  amerc(kk) = eras(kk,2) + (eras(kk,3) - eras(kk,2))
171  & * xdelj(kk) + (eras(kk,1) - eras(kk,2)
172  & - eras(kk,3) + eras(kk,4)) * xj2tm(kk)
173  2500 CONTINUE
174 C
175  ENDIF
176 C
177  RETURN
178  END
subroutine w3ft204(ALOLA, AMERC, INTERP)
Convert a n.
Definition: w3ft204.f:27