1 subroutine da_fm_decoder (fm, platform, synop, ship, metar, pilot, sound, &
2 satem, satob, airep, gpspw, gpsref, gpseph, &
3 ssmi_retrieval, ssmi_tb, ssmt1, ssmt2, &
4 qscat,profiler, buoy, other)
6 !---------------------------------------------------------------------------
7 ! Purpose: Given the WMO code fm, return the observation platform type and
8 ! increment the corresponding counter if present.
10 ! Returned platforms are reduced to 10 output classes:
12 ! Name WMO Codes WMO Code names
13 ! synop 12,14 'SYNOP','SYNOP MOBIL'
15 ! metar 15,16 'METAR','SPECI'
16 ! pilot 32,33,34 'PILOT','PILOT SHIP','PILOT MOBIL'
17 ! sound 35,36,37,38 'TEMP','TEMP SHIP, 'TEMP DROP','TEMP MOBIL'
20 ! airep 42, 96,97 'AIREP', 'AMDAR'
25 ! ssmi_retrieval 125 'SSMI_RETRIEVAL'
26 ! ssmi_tb 126 'SSMI_TB'
30 ! Profiler 132 'PROFI'
32 ! other Any other code
36 !----------------------------------------------------------------------------
40 integer, intent (in) :: fm
41 character (LEN = 40), intent (out) :: platform
42 integer, optional, intent (inout) :: synop, ship, metar, &
43 pilot, sound, satem, &
44 satob, airep, gpspw, &
45 ssmi_retrieval, ssmi_tb,&
46 ssmt1, ssmt2, qscat, &
47 profiler, buoy, gpsref, gpseph, mtgirs,&
50 if (trace_use_frequent) call da_trace_entry("da_fm_decoder")
54 ! Report of surface observations from a fixed land station
56 case (12) ; platform = 'SYNOP'
57 if (present (synop)) synop = synop + 1
59 ! Report of surface observations from a sea station
61 case (13) ; platform = 'SHIP'
62 if (present (ship)) ship = ship + 1
64 ! Report of surface observations from a mobile land station
66 case (14) ; platform = 'SYNOP MOBIL'
67 if (present (synop)) synop = synop + 1
69 ! Aviation routine weather report (with/without trend forecast)
71 case (15) ; platform = 'METAR'
72 if (present (metar)) metar = metar + 1
74 ! Aviation selected special weather report
75 ! (with/without trend forecast)
77 case (16) ; platform = 'SPECI'
78 if (present (metar)) metar = metar + 1
80 ! Report of buoy observation
82 case (18,19) ; platform = 'BUOY'
83 if (present (buoy)) buoy = buoy + 1
85 ! Report of ground radar weather observation
87 case (20) ; platform = 'RAdoB'
88 if (present (other)) other = other + 1
90 ! Radiological data report (monitored on a routine basis and/or
93 case (22) ; platform = 'RADREP'
94 if (present (other)) other = other + 1
96 ! Upper-wind report from a fixed land station
98 case (32) ; platform = 'PILOT'
99 if (present (pilot)) pilot = pilot + 1
101 ! Upper-wind report from a sea station
103 case (33) ; platform = 'PILOT SHIP'
104 if (present (pilot)) pilot = pilot + 1
106 ! Upper-wind report from a mobile land station
108 case (34) ; platform = 'PILOT MOBIL'
109 if (present (pilot)) pilot = pilot + 1
111 ! Upper-level pressure, temperature, humidity and wind report
112 ! from a fixed land station
114 case (35) ; platform = 'TEMP'
115 if (present (sound)) sound = sound + 1
117 ! Upper-level pressure, temperature, humidity and wind report
120 case (36) ; platform = 'TEMP SHIP'
121 if (present (sound)) sound = sound + 1
123 ! Upper-level pressure, temperature, humidity and wind report
124 ! from a sonde released by carrier balloons and aircraft
126 case (37) ; platform = 'TEMP DROP'
127 if (present (sound)) sound = sound + 1
129 ! Upper-level pressure, temperature, humidity and wind report
130 ! from a mobile land station
132 case (38) ; platform = 'TEMP MOBIL'
133 if (present (sound)) sound = sound + 1
135 ! Upper-level temperature, wind and air density from a land
136 ! rocketsonde station
138 case (39) ; platform = 'ROCOB'
139 if (present (other)) other = other + 1
141 ! Upper-level temperature, wind and air density from a
142 ! rocketsonde station on a ship
144 case (40) ; platform = 'ROCOB SHIP'
145 if (present (other)) other = other + 1
147 ! Upper-air report from an aircraft
148 ! (other than weather reconnaissance aircraft)
150 case (41) ; platform = 'CODAR'
151 if (present (other)) other = other + 1
153 ! Aircraft report (aircraft meteorological data relay)
155 case (42) ; platform = 'AMDAR'
156 if (present (airep)) airep = airep + 1
160 case (43) ; platform = 'ICEAN'
161 if (present (other)) other = other + 1
163 ! Analysis in full form
165 case (45) ; platform = 'IAC'
166 if (present (other)) other = other + 1
168 ! Analysis in abbreviated form
170 case (46) ; platform = 'IAC FLEET'
171 if (present (other)) other = other + 1
173 ! Processed data in form of grid-point values
175 case (47) ; platform = 'GRID'
176 if (present (other)) other = other + 1
178 ! Processed data in form of grid-point values (abbreviated code form)
180 case (49) ; platform = 'GRAF'
181 if (present (other)) other = other + 1
183 ! Forecast upper wind and temperature for aviation
185 case (50) ; platform = 'WinTEM'
186 if (present (other)) other = other + 1
190 case (51) ; platform = 'TAF'
191 if (present (other)) other = other + 1
193 ! Area forecast for aviation
195 case (53) ; platform = 'ARFOR'
196 if (present (other)) other = other + 1
198 ! Route forecast for aviation
200 case (54) ; platform = 'ROFOR'
201 if (present (other)) other = other + 1
203 ! Radiological trajectory dose forecast
204 ! (defined time of arrival and location)
206 case (57) ; platform = 'RAdoF'
207 if (present (other)) other = other + 1
209 ! Forecast for shipping
211 case (61) ; platform = 'MAFOR'
212 if (present (other)) other = other + 1
214 ! Report of marine surface observations along a ship's track
216 case (62) ; platform = 'TRACKOB'
217 if (present (other)) other = other + 1
219 ! Report of bathymetrical observation
221 case (63) ; platform = 'BATHY'
222 if (present (other)) other = other + 1
224 ! Temperature salinity and current report from a sea station
226 case (64) ; platform = 'TRESAC'
227 if (present (other)) other = other + 1
229 ! Report of spectral wave information from sea station or from
230 ! a remote platform (airecraft or satellite)
232 case (65) ; platform = 'WAVEOB'
233 if (present (other)) other = other + 1
235 ! Report of hydrological observations from a hydrological station
237 case (66) ; platform = 'HYDRA'
238 if (present (other)) other = other + 1
240 ! Hydrological forecast
242 case (67) ; platform = 'HYFOR'
243 if (present (other)) other = other + 1
245 ! Report of monthly values from a land station
247 case (71) ; platform = 'CLIMAT'
248 if (present (other)) other = other + 1
250 ! Report of monthly means and total from an ocean weather station
252 case (72) ; platform = 'CLIMAT SHIP'
253 if (present (other)) other = other + 1
255 ! Report of monthly means for an oceanic area
257 case (73) ; platform = 'NACLI CLinP SPLCI CLISA inCLI'
258 if (present (other)) other = other + 1
260 ! Report of monthly aerological means from a land station
262 case (75) ; platform = 'CLIMAT TEMP'
263 if (present (other)) other = other + 1
265 ! Report of monthly aerological means from an ocean weather station
267 case (76) ; platform = 'CLIMAT TEMP SHIP'
268 if (present (other)) other = other + 1
270 ! Synoptic report of bearings of sources of atmospherics
272 case (81) ; platform = 'SFAZI'
273 if (present (other)) other = other + 1
275 ! Synoptic report of the geographical location of sources of
278 case (82) ; platform = 'SFLOC'
279 if (present (other)) other = other + 1
281 ! Detailed report of the distribution of sources of atmospherics
282 ! by bearings for any period up to including 24 hours
284 case (83) ; platform = 'SFAZU'
285 if (present (other)) other = other + 1
287 ! Report of synoptic interpretation of cloud data obtained by a
288 ! meteorlogical satellite
290 case (85) ; platform = 'SAREP'
291 if (present (other)) other = other + 1
293 ! Report of satellite remote upper-air soundings of
294 ! pressure, temperature and humidity
296 case (86) ; platform = 'SATEM'
297 if (present (satem)) satem = satem + 1
299 ! Report of satellite clear radiance observations
301 case (87) ; platform = 'SARAD'
302 if (present (other)) other = other + 1
304 ! Report of satellite remote upper-air soundings of
305 ! pressure, temperature and humidity
307 case (88) ; platform = 'SATOB'
308 if (present (satob)) satob = satob + 1
310 ! Airep reports (not a WMO report)
312 case (96:97) ; platform = 'AIREP'
313 if (present (airep)) airep = airep + 1
315 ! GPS Precipitable Water Vapor or GPS Zineth Total Delay
318 case (111) ; platform = 'GPSPW'
319 if (present (gpspw)) gpspw = gpspw + 1
320 case (114) ; platform = 'GPSZD'
321 if (present (gpspw)) gpspw = gpspw + 1
323 ! GPS Refractivity (not a WMO report)
325 case (116) ; platform = 'GPSRF'
326 if (present (gpsref)) gpsref = gpsref + 1
328 case (118) ; platform = 'GPSEP'
329 if (present (gpseph)) gpseph = gpseph + 1
331 case (121) ; platform = 'SSMT1'
332 if (present (ssmt1)) ssmt1 = ssmt1 + 1
334 case (122) ; platform = 'SSMT2'
335 if (present (ssmt2)) ssmt2 = ssmt2 + 1
337 case (125) ; platform = 'SSMI_RETRIEVAL'
338 if (present (ssmi_retrieval)) ssmi_retrieval = ssmi_retrieval + 1
340 case (126) ; platform = 'SSMI_TB'
341 if (present (ssmi_tb)) ssmi_tb = ssmi_tb + 1
343 case (281) ; platform = 'QSCAT'
344 if (present (qscat)) qscat = qscat + 1
346 case (132) ; platform = 'PROFI'
347 if (present (profiler)) profiler = profiler + 1
350 case (101) ; platform = 'TAMDAR'
351 if (present (tamdar)) tamdar = tamdar + 1
353 case (161) ; platform = 'MTGIRS'
354 if (present (mtgirs)) mtgirs = mtgirs + 1
358 if (present (other)) other = other + 1
362 ! Reduce the platform name to one of the 10 classes
364 select case (trim (platform))
366 case ('SYNOP','SYNOP MOBIL'); platform = "SYNOP";
367 case ('SHIP'); platform = "SHIP";
368 case ('METAR','SPECI'); platform = "METAR";
369 case ('PILOT','PILOT SHIP','PILOT MOBIL'); platform = "PILOT";
370 case ('TEMP','TEMP SHIP','TEMP DROP','TEMP MOBIL'); platform = "SOUND";
371 case ('SATEM'); platform = "SATEM";
372 case ('SATOB'); platform = "SATOB";
373 case ('AIREP'); platform = "AIREP";
374 case ('OTHER'); platform = "OTHER";
375 case ('BUOY'); platform = "BUOY";
376 case ('PROFI'); platform = "PROFI";
377 case ('MTGIRS'); platform = "MTGIRS";
378 case default; platform = "OTHER";
382 if (trace_use_frequent) call da_trace_exit("da_fm_decoder")
384 end subroutine da_fm_decoder