42 subroutine gdt2gds(igds,igdstmpl,idefnum,ideflist,kgds,
45 integer,
intent(in) :: idefnum
46 integer,
intent(in) :: igds(*),igdstmpl(*),ideflist(*)
47 integer,
intent(out) :: kgds(*),igrid,iret
49 integer :: kgds72(200),kgds71(200),idum(200),jdum(200)
52 if (igds(5).eq.0)
then
56 kgds(4)=igdstmpl(12)/1000
57 kgds(5)=igdstmpl(13)/1000
59 if (igdstmpl(1)==2 ) kgds(6)=64
60 if ( btest(igdstmpl(14),4).OR.btest(igdstmpl(14),5) )
62 if ( btest(igdstmpl(14),3) ) kgds(6)=kgds(6)+8
63 kgds(7)=igdstmpl(15)/1000
64 kgds(8)=igdstmpl(16)/1000
65 kgds(9)=igdstmpl(17)/1000
66 kgds(10)=igdstmpl(18)/1000
82 if ( idefnum.ne.0 )
then
83 if ( igdstmpl(8).eq.-1 )
then
87 if ( igdstmpl(9).eq.-1 )
then
93 if ( kgds(1).eq.1.OR.kgds(1).eq.3 ) kgds(20)=43
96 kgds(21+j)=ideflist(j)
99 elseif (igds(5).eq.10)
then
103 kgds(4)=igdstmpl(10)/1000
104 kgds(5)=igdstmpl(11)/1000
106 if (igdstmpl(1)==2 ) kgds(6)=64
107 if ( btest(igdstmpl(12),4).OR.btest(igdstmpl(12),5) )
108 & kgds(6)=kgds(6)+128
109 if ( btest(igdstmpl(12),3) ) kgds(6)=kgds(6)+8
110 kgds(7)=igdstmpl(14)/1000
111 kgds(8)=igdstmpl(15)/1000
112 kgds(9)=igdstmpl(13)/1000
114 kgds(11)=igdstmpl(16)
115 kgds(12)=igdstmpl(18)/1000
116 kgds(13)=igdstmpl(19)/1000
126 elseif (igds(5).eq.30)
then
130 kgds(4)=igdstmpl(10)/1000
131 kgds(5)=igdstmpl(11)/1000
133 if (igdstmpl(1)==2 ) kgds(6)=64
134 if ( btest(igdstmpl(12),4).OR.btest(igdstmpl(12),5) )
135 & kgds(6)=kgds(6)+128
136 if ( btest(igdstmpl(12),3) ) kgds(6)=kgds(6)+8
137 kgds(7)=igdstmpl(14)/1000
138 kgds(8)=igdstmpl(15)/1000
139 kgds(9)=igdstmpl(16)/1000
140 kgds(10)=igdstmpl(17)
141 kgds(11)=igdstmpl(18)
142 kgds(12)=igdstmpl(19)/1000
143 kgds(13)=igdstmpl(20)/1000
144 kgds(14)=igdstmpl(21)/1000
145 kgds(15)=igdstmpl(22)/1000
153 elseif (igds(5).eq.40)
then
157 kgds(4)=igdstmpl(12)/1000
158 kgds(5)=igdstmpl(13)/1000
160 if (igdstmpl(1)==2 ) kgds(6)=64
161 if ( btest(igdstmpl(14),4).OR.btest(igdstmpl(14),5) )
162 & kgds(6)=kgds(6)+128
163 if ( btest(igdstmpl(14),3) ) kgds(6)=kgds(6)+8
164 kgds(7)=igdstmpl(15)/1000
165 kgds(8)=igdstmpl(16)/1000
166 kgds(9)=igdstmpl(17)/1000
167 kgds(10)=igdstmpl(18)
168 kgds(11)=igdstmpl(19)
180 elseif (igds(5).eq.20)
then
184 kgds(4)=igdstmpl(10)/1000
185 kgds(5)=igdstmpl(11)/1000
187 if (igdstmpl(1)==2 ) kgds(6)=64
188 if ( btest(igdstmpl(12),4).OR.btest(igdstmpl(12),5) )
189 & kgds(6)=kgds(6)+128
190 if ( btest(igdstmpl(12),3) ) kgds(6)=kgds(6)+8
191 kgds(7)=igdstmpl(14)/1000
192 kgds(8)=igdstmpl(15)/1000
193 kgds(9)=igdstmpl(16)/1000
194 kgds(10)=igdstmpl(17)
195 kgds(11)=igdstmpl(18)
207 elseif (igds(5).eq.204)
then
214 if (igdstmpl(1)==2 ) kgds(6)=64
215 if ( btest(igdstmpl(14),4).OR.btest(igdstmpl(14),5) )
216 & kgds(6)=kgds(6)+128
217 if ( btest(igdstmpl(14),3) ) kgds(6)=kgds(6)+8
222 kgds(11)=igdstmpl(19)
237 if ( idefnum.ne.0 )
then
238 if ( igdstmpl(8).eq.-1 )
then
242 if ( igdstmpl(9).eq.-1 )
then
248 if ( kgds(1).eq.1.OR.kgds(1).eq.3 ) kgds(20)=43
251 kgds(21+j)=ideflist(j)
254 elseif (igds(5).eq.32768)
then
258 kgds(4)=igdstmpl(12)/1000
259 kgds(5)=igdstmpl(13)/1000
261 if (igdstmpl(1)==2 ) kgds(6)=64
262 if ( btest(igdstmpl(14),4).OR.btest(igdstmpl(14),5) )
263 & kgds(6)=kgds(6)+128
264 if ( btest(igdstmpl(14),3) ) kgds(6)=kgds(6)+8
265 kgds(7)=igdstmpl(15)/1000
266 kgds(8)=igdstmpl(16)/1000
267 kgds(9)=igdstmpl(17)/1000
268 kgds(10)=igdstmpl(18)/1000
269 kgds(11)=igdstmpl(19)
284 if ( idefnum.ne.0 )
then
285 if ( igdstmpl(8).eq.-1 )
then
289 if ( igdstmpl(9).eq.-1 )
then
295 if ( kgds(1).eq.1.OR.kgds(1).eq.3 ) kgds(20)=43
298 kgds(21+j)=ideflist(j)
301 elseif (igds(5).eq.32769)
then
305 kgds(4)=igdstmpl(12)/1000
306 kgds(5)=igdstmpl(13)/1000
308 if (igdstmpl(1)==2 ) kgds(6)=64
309 if ( btest(igdstmpl(14),4).OR.btest(igdstmpl(14),5) )
310 & kgds(6)=kgds(6)+128
311 if ( btest(igdstmpl(14),3) ) kgds(6)=kgds(6)+8
312 kgds(7)=igdstmpl(15)/1000
313 kgds(8)=igdstmpl(16)/1000
314 kgds(9)=igdstmpl(17)/1000
315 kgds(10)=igdstmpl(18)/1000
316 kgds(11)=igdstmpl(19)
317 kgds(12)=igdstmpl(20)/1000
318 kgds(13)=igdstmpl(21)/1000
329 print *,
'gdt2gds: Unrecognized GRIB2 GDT = 3.',igds(5)
342 call w3fi71(j,kgds71,ierr)
343 if ( ierr.ne.0 ) cycle
345 if ( kgds71(3).eq.0 )
then
346 if ( kgds71(7).lt.0 ) kgds71(7)=360000+kgds71(7)
347 if ( kgds71(10).lt.0 ) kgds71(10)=360000+kgds71(10)
348 elseif ( kgds71(3).eq.1 )
then
349 if ( kgds71(7).lt.0 ) kgds71(7)=360000+kgds71(7)
350 if ( kgds71(10).lt.0 ) kgds71(10)=360000+kgds71(10)
351 elseif ( kgds71(3).eq.3 )
then
352 if ( kgds71(7).lt.0 ) kgds71(7)=360000+kgds71(7)
353 if ( kgds71(9).lt.0 ) kgds71(9)=360000+kgds71(9)
354 if ( kgds71(18).lt.0 ) kgds71(18)=360000+kgds71(18)
355 elseif ( kgds71(3).eq.4 )
then
356 if ( kgds71(7).lt.0 ) kgds71(7)=360000+kgds71(7)
357 if ( kgds71(10).lt.0 ) kgds71(10)=360000+kgds71(10)
358 elseif ( kgds71(3).eq.5 )
then
359 if ( kgds71(7).lt.0 ) kgds71(7)=360000+kgds71(7)
360 if ( kgds71(9).lt.0 ) kgds71(9)=360000+kgds71(9)
362 call r63w72(idum,kgds,jdum,kgds72)
363 if ( kgds72(3).eq.3 ) kgds72(14)=0
364 if ( kgds72(3).eq.1 ) kgds72(15:18)=0
365 if ( kgds72(3).eq.5 ) kgds72(14:18)=0
368 if ( all(kgds71.eq.kgds72) )
then