updated top-level README and version_decl for V4.5 (#1847)
[WRF.git] / var / obsproc / src / fm_decoder.F90
blob9926ed7fde9606db08bb5aed17800817cc516472
1  SUBROUTINE  FM_DECODER (fm, platform, synop, ship , metar, &
2                                        pilot, sound, satem, & 
3                                        satob, airep, gpspw, gpszd, &
4                                        gpsrf, gpsep, &
5                                        ssmt1, ssmt2, ssmi , &
6                                        tovs , other, amdar, &
7                                        qscat, profl, buoy , bogus, airs, tamdar)
8 !------------------------------------------------------------------------------!
9 ! Given the WMO code fm, return the observation platform type and increment
10 ! the corresponding counter if present.
12 ! Returned platforms are reduced to 13 output classes:
14 !   Name    WMO Codes     WMO Code names
15 !   synop    12,14       'SYNOP','SYNOP MOBIL'
16 !   ship     13          'SHIP'
17 !   metar    15,16       'METAR','SPECI'
18 !   buoy     18,19       'BUOY'
19 !   pilot    32,33,34    'PILOT','PILOT SHIP','PILOT MOBIL'
20 !   sound    35,36,37,38 'TEMP','TEMP SHIP, 'TEMP DROP','TEMP MOBIL'
21 !   amdar    42          'AMDAR'
22 !   satem    86          'SATEM'
23 !   satob    88          'SATOB'
24 !   airep    96,97       'AIREP'
25 !   tamdar   101         'TAMDAR'
26 !   gpspw    111         'GPSPW'
27 !   gpsztd   114         'GPSZD'
28 !   gpsref   116         'GPSRF'
29 !   gpseph   118         'GPSEP'
30 !   ssmt1    121         'SSMT1'
31 !   ssmt2    122         'SSMT2'
32 !   ssmi     125,126     'SSMI'
33 !   tovs     131         'TOVS' 
34 !   qscat    281         'Quikscat'
35 !   profl    132         'Profilers'
36 !   bogus    135         'BOGUS'
37 !   airs     133         'AIRSRET'
38 !   other Any other code 'UNKNOWN'
39 !------------------------------------------------------------------------------!
41 !  HISTORY: 
43 !         F. VANDENBERGHE, March 2001
45 !         01/13/2003 - Updated for Profiler obs.           S. R. H. Rizvi
47 !         02/04/2003 - Updated for Buoy     obs.           S. R. H. Rizvi
49 !         02/11/2003 - Reviewed and modified for Profiler
50 !                      and Buoy obs.                       Y.-R. Guo
52 !         05/23/2003 - GPS ZTD code added              L. Cucurull
53 !         06/30/2006 - Updated for AIRS retrievals     Syed  RH  Rizvi
54 !         11/09/2006 - Added for GPS Excess Phase      Y.-R. Guo
55 !-----------------------------------------------------------------------------
57     IMPLICIT NONE
58     INTEGER,              INTENT (in)    :: fm
59     CHARACTER (LEN = 40), INTENT (out)   :: platform
60     INTEGER,              INTENT (inout), OPTIONAL :: synop, ship,  metar, &
61                                                       pilot, sound, satem, &
62                                                       satob, airep, gpspw, &
63                                                       gpszd, gpsrf, gpsep, &
64                                                       bogus, &
65                                                       ssmi,  ssmt1, ssmt2, &
66                                                       tovs,  amdar, qscat, &
67                                                       profl, buoy, airs, tamdar, other
68 !------------------------------------------------------------------------------!
69        SELECT CASE ( fm )
71           !  Report of surface observations from a fixed land station
73           CASE (12) ; platform = 'SYNOP'
74                       IF (PRESENT (synop)) synop = synop + 1
76           !  Report of surface observations from a sea station
78           CASE (13) ; platform = 'SHIP'
79                       IF (PRESENT (ship)) ship  = ship + 1
81           !  Report of surface observations from a mobile land station
83           CASE (14) ; platform = 'SYNOP MOBIL'
84                       IF (PRESENT (synop)) synop  = synop + 1
86           !  Aviation routine weather report (with/without trend forecast)
88           CASE (15) ; platform = 'METAR'
89                       IF (PRESENT (metar)) metar  = metar + 1
91           !  Aviation selected special weather report 
92           !  (with/without trend forecast)
94           CASE (16) ; platform = 'SPECI'
95                       IF (PRESENT (metar)) metar  = metar + 1
97           !  Report of buoy observation
99           CASE (18,19) ; platform = 'BUOY'
100                       IF (PRESENT (buoy)) buoy  = buoy + 1
102           !  Report of ground radar weather observation
104           CASE (20) ; platform = 'RADOB'
105                       IF (PRESENT (other)) other  = other + 1
107           !  Radiological data report (monitored on a routine basis and/or 
108           !  in case of accident
110           CASE (22) ; platform = 'RADREP'
111                       IF (PRESENT (other)) other  = other + 1
113           !  Upper-wind report from a fixed land station
115           CASE (32) ; platform = 'PILOT'
116                       IF (PRESENT (pilot)) pilot = pilot + 1
118           !  Upper-wind report from a sea station
120           CASE (33) ; platform = 'PILOT SHIP'
121                       IF (PRESENT (pilot)) pilot = pilot + 1
123           !  Upper-wind report from a mobile land station
125           CASE (34) ; platform = 'PILOT MOBIL'
126                       IF (PRESENT (pilot)) pilot = pilot + 1
128           !  Upper-level pressure, temperature, humidity and wind report 
129           !  from a fixed land station
131           CASE (35) ; platform = 'TEMP'
132                       IF (PRESENT (sound)) sound = sound + 1
134           !  Upper-level pressure, temperature, humidity and wind report 
135           !  from a sea station
137           CASE (135) ; platform = 'BOGUS'
138                       IF (PRESENT (bogus)) bogus = bogus + 1
140           !  Upper-level pressure, temperature, humidity and wind report 
141           !  from a bogus station
143           CASE (36) ; platform = 'TEMP SHIP'
144                       IF (PRESENT (sound)) sound = sound + 1
146           !  Upper-level pressure, temperature, humidity and wind report 
147           !  from a sonde released by carrier balloons and aircraft
149           CASE (37) ; platform = 'TEMP DROP'
150                       IF (PRESENT (sound)) sound = sound + 1
152           !  Upper-level pressure, temperature, humidity and wind report 
153           !  from a mobile land station
155           CASE (38) ; platform = 'TEMP MOBIL'
156                       IF (PRESENT (sound)) sound = sound + 1
158           !  Upper-level temperature, wind and air density from a land 
159           !  rocketsonde station
161           CASE (39) ; platform = 'ROCOB'
162                       IF (PRESENT (other)) other = other + 1
164           !  Upper-level temperature, wind and air density from a 
165           !  rocketsonde station on a ship
167           CASE (40) ; platform = 'ROCOB SHIP'
168                       IF (PRESENT (other)) other = other + 1
170           !  Upper-air report from an aircraft 
171           !  (other than weather reconnaissance aircraft)
173           CASE (41) ; platform = 'CODAR'
174                       IF (PRESENT (other)) other = other + 1
176           !  Aircraft report (aircraft meteorological data relay)
178           CASE (42) ; platform = 'AMDAR'
179                       IF (PRESENT (amdar)) amdar = amdar + 1
181           !  Ice analysis
183           CASE (43) ; platform = 'ICEAN'
184                       IF (PRESENT (other)) other = other + 1
186           !  Analysis in full form
188           CASE (45) ; platform = 'IAC'
189                       IF (PRESENT (other)) other = other + 1
191           !  Analysis in abbreviated form
193           CASE (46) ; platform = 'IAC FLEET'
194                       IF (PRESENT (other)) other = other + 1
196           !  Processed data in form of grid-point values
198           CASE (47) ; platform = 'GRID'
199                       IF (PRESENT (other)) other = other + 1
201           !  Processed data in form of grid-point values (abbreviated code form)
203           CASE (49) ; platform = 'GRAF'
204                       IF (PRESENT (other)) other = other + 1
206           !  Forecast upper wind and temperature for aviation
208           CASE (50) ; platform = 'WINTEM'
209                       IF (PRESENT (other)) other = other + 1
211           !  Aerodrome forecast
213           CASE (51) ; platform = 'TAF'
214                       IF (PRESENT (other)) other = other + 1
216           !  Area forecast for aviation
218           CASE (53) ; platform = 'ARFOR'
219                       IF (PRESENT (other)) other = other + 1
221           !  Route forecast for aviation
223           CASE (54) ; platform = 'ROFOR'
224                       IF (PRESENT (other)) other = other + 1
226           !  Radiological trajectory dose forecast 
227           !  (defined time of arrival and location)
229           CASE (57) ; platform = 'RADOF'
230                       IF (PRESENT (other)) other = other + 1
232           !  Forecast for shipping
234           CASE (61) ; platform = 'MAFOR'
235                       IF (PRESENT (other)) other = other + 1
237           !  Report of marine surface observations along a ship's track
239           CASE (62) ; platform = 'TRACKOB'
240                       IF (PRESENT (other)) other = other + 1
242           !  Report of bathymetrical observation
244           CASE (63) ; platform = 'BATHY'
245                       IF (PRESENT (other)) other = other + 1
247           !  Temperature salinity and current report from a sea station
249           CASE (64) ; platform = 'TRESAC'
250                       IF (PRESENT (other)) other = other + 1
252           !  Report of spectral wave information from sea station or from
253           !  a remote platform (airecraft or satellite)
255           CASE (65) ; platform = 'WAVEOB'
256                       IF (PRESENT (other)) other = other + 1
258           !  Report of hydrological observations from a hydrological station
260           CASE (66) ; platform = 'HYDRA'
261                       IF (PRESENT (other)) other = other + 1
263           !  Hydrological forecast
265           CASE (67) ; platform = 'HYFOR'
266                       IF (PRESENT (other)) other = other + 1
268           !  Report of monthly values from a land station
270           CASE (71) ; platform = 'CLIMAT'
271                       IF (PRESENT (other)) other = other + 1
273           !  Report of monthly means and total from an ocean weather station
275           CASE (72) ; platform = 'CLIMAT SHIP'
276                       IF (PRESENT (other)) other = other + 1
278           !  Report of monthly means for an oceanic area
280           CASE (73) ; platform = 'NACLI CLINP SPLCI CLISA INCLI'
281                       IF (PRESENT (other)) other = other + 1
283           !  Report of monthly aerological means from a land station
285           CASE (75) ; platform = 'CLIMAT TEMP'
286                       IF (PRESENT (other)) other = other + 1
288           !  Report of monthly aerological means from an ocean weather station
290           CASE (76) ; platform = 'CLIMAT TEMP SHIP'
291                       IF (PRESENT (other)) other = other + 1
293           !  Synoptic report of bearings of sources of atmospherics
295           CASE (81) ; platform = 'SFAZI'
296                       IF (PRESENT (other)) other = other + 1
298           !  Synoptic report of the geographical location of sources of 
299           !  atmopsherics
301           CASE (82) ; platform = 'SFLOC'
302                       IF (PRESENT (other)) other = other + 1
304           !  Detailed report of the distribution of sources of atmospherics
305           !  by bearings for any period up to including 24 hours
307           CASE (83) ; platform = 'SFAZU'
308                       IF (PRESENT (other)) other = other + 1
310           !  Report of synoptic interpretation of cloud data obtained by a
311           !  meteorlogical satellite
313           CASE (85) ; platform = 'SAREP'
314                       IF (PRESENT (other)) other = other + 1
316           !  Report of satellite remote upper-air soundings of 
317           !  pressure, temperature and humidity
319           CASE (86) ; platform = 'SATEM'
320                       IF (PRESENT (satem)) satem = satem + 1
322           !  Report of satellite clear radiance observations
324           CASE (87) ; platform = 'SARAD'
325                       IF (PRESENT (other)) other = other + 1
327           !  Report of satellite remote upper-air soundings of 
328           !  pressure, temperature and humidity
330           CASE (88) ; platform = 'SATOB'
331                       IF (PRESENT (satob)) satob = satob + 1
333           !  Airep reports (not a WMO report)
335           CASE (96:97) ; platform = 'AIREP'
336                          IF (PRESENT (airep)) airep = airep + 1
338           ! tamdar reports ( not a WMO report)
340           CASE (101) ; platform = 'TAMDAR'
341                          IF (PRESENT (tamdar)) tamdar = tamdar + 1 
343           !  GPS Precipitable Water Vapor (not a WMO report)
345           CASE (111) ; platform = 'GPSPW'
346                       IF (PRESENT (gpspw)) gpspw = gpspw + 1
348           !  GPS Zenith Total Delay (not a WMO report)
350           CASE (114) ; platform = 'GPSZD'
351                       IF (PRESENT (gpszd)) gpszd = gpszd + 1
353           !  GPS Refractivity (not a WMO report)
355           CASE (116) ; platform = 'GPSRF'
356                       IF (PRESENT (gpsrf)) gpsrf = gpsrf + 1
358           !  GPS Excess Phase (not a WMO report)
360           CASE (118) ; platform = 'GPSEP'
361                       IF (PRESENT (gpsep)) gpsep = gpsep + 1
363           !  DMSP SSM/T-1 (not a WMO report)
365           CASE (121) ; platform = 'SSMT1'
366                       IF (PRESENT (ssmt1)) ssmt1 = ssmt1 + 1
368           !  DMSP SSM/T-2 (not a WMO report)
370           CASE (122) ; platform = 'SSMT2'
371                       IF (PRESENT (ssmt2)) ssmt2 = ssmt2 + 1
373           !  DMSP SSMI (not a WMO report)
375           CASE (125,126) ; platform = 'SSMI'
376                       IF (PRESENT (ssmi)) ssmi = ssmi + 1
378           !  NOAA TOVS (not a WMO report)
380           CASE (131) ; platform = 'TOVS'
381                       IF (PRESENT (tovs)) tovs = tovs + 1
384           CASE (132) ; platform = 'PROFL'
385                       IF (PRESENT (profl)) profl = profl + 1 
387           CASE (133) ; platform = 'AIRSRET'
388                       IF (PRESENT (airs)) airs = airs + 1
390           !  Quikscat (not a WMO report)
392           CASE (281) ; platform = 'QSCAT'
393                       IF (PRESENT (qscat)) qscat = qscat + 1
395           !  Others
397           CASE DEFAULT;
398                        platform = 'UNKNOWN'
399                        IF (PRESENT (other)) other = other + 1
401        END SELECT
404        !  Reduce the platform name to one of the 15 classes
406        SELECT CASE (TRIM (platform))
408        CASE ('SYNOP','SYNOP MOBIL');                       platform = "SYNOP";
409        CASE ('SHIP');                                      platform = "SHIP" ;
410        CASE ('BUOY');                                      platform = "BUOY" ;
411        CASE ('BOGUS');                                     platform = "BOGUS";
412        CASE ('METAR','SPECI');                             platform = "METAR";
413        CASE ('PILOT','PILOT SHIP','PILOT MOBIL');          platform = "PILOT";
414        CASE ('TEMP','TEMP SHIP','TEMP DROP','TEMP MOBIL'); platform = "SOUND";
415        CASE ('SATEM');                                     platform = "SATEM";
416        CASE ('SATOB');                                     platform = "SATOB";
417        CASE ('AIREP');                                     platform = "AIREP";
418        CASE ('TAMDAR');                                    platform = "TAMDAR";
419        CASE ('GPSPW');                                     platform = "GPSPW";
420        CASE ('GPSZD');                                     platform = "GPSZD";
421        CASE ('GPSRF');                                     platform = "GPSRF";
422        CASE ('GPSEP');                                     platform = "GPSEP";
423        CASE ('SSMT1');                                     platform = "SSMT1";
424        CASE ('SSMT2');                                     platform = "SSMT2";
425        CASE ('TOVS');                                      platform = "TOVS" ;
426        CASE ('SSMI');                                      platform = "SSMI" ;
427        CASE ('Qscat');                                     platform = "QSCAT";
428        CASE ('PROFL');                                     platform = "PROFL";
429        CASE ('AIRSRET');                                   platform = "AIRSRET";
430        CASE ('UNKNOWN');                                   platform = "UNKONWN";
432        END SELECT
433      
434 END SUBROUTINE fm_decoder