Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / var / da / da_obs / da_fm_decoder.inc
blob72ae7e91bb0be2c80b2b25e15468c07bafc21ea8
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.
9    !
10    ! Returned platforms are reduced to 10 output classes:
11    !
12    !   Name    WMO Codes     WMO Code names
13    !   synop    12,14       'SYNOP','SYNOP MOBIL'
14    !   ship     13, 17      'SHIP'
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'
18    !   satem    86          'SATEM'
19    !   satob    88          'SATOB'
20    !   airep    42, 96,97   'AIREP', 'AMDAR'
21    !   gpspw    111         'GPSPW'
22    !   gpsztd   114         'GPSZD'
23    !   gpsref   116         'GPSRF'
24    !   gpseph   118         'GPSEP'
25    !   ssmi_retrieval 125         'SSMI_RETRIEVAL'
26    !   ssmi_tb  126         'SSMI_TB'
27    !   SSM/T1   121         'SSMT1'
28    !   SSM/T2   122         'SSMT2'
29    !   QSCAT    281         'QSCAT'
30    !   Profiler 132         'PROFI'
31    !   Buoy     18,19       'BUOY '
32    !   other      Any other code
33 ! not WMO
34    !   MTGIRS  161          'MTGIRS'
35    !   TAMDAR   91          'TAMDAR'
36    !----------------------------------------------------------------------------
38     implicit none
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,&
48                                             tamdar, other
50    if (trace_use_frequent) call da_trace_entry("da_fm_decoder")
52    select case(fm)
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 
91       !  in case of accident
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 
118       !  from a sea station
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
158       !  Ice analysis
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
188       !  Aerodrome forecast
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 
276       !  atmopsherics
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
316       !  (not a WMO report)
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
348       !  Others
350       case (101) ; platform = 'TAMDAR'
351          if (present (tamdar)) tamdar = tamdar + 1
353       case (161) ; platform = 'MTGIRS'
354          if (present (mtgirs)) mtgirs = mtgirs + 1
356       case default;
357                    platform = 'UNKNOWN'
358           if (present (other)) other = other + 1
360    end select
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";
380    end select
382    if (trace_use_frequent) call da_trace_exit("da_fm_decoder")
383      
384 end subroutine da_fm_decoder