da_setup_obs_structures.inc

References to this file elsewhere.
1 subroutine da_setup_obs_structures( grid, ob, iv)
2 
3    !---------------------------------------------------------------------------
4    ! Purpose: Allocate and read in components of observation structure.
5    !---------------------------------------------------------------------------
6 
7    implicit none
8    
9    type (domain),     intent(inout) :: grid ! Model data
10    type (y_type),     intent(out)   :: ob  ! Observation structure.
11    type (ob_type),    intent(out)   :: iv  ! O-B structure.
12 
13    if (trace_use) call da_trace_entry("da_setup_obs_structures")
14 
15    call da_message((/'Set up observations (ob)'/))
16 
17    ! Adjust obs switches
18 
19 
20    if (Use_SynopObs .OR. Use_ShipsObs .OR. Use_MetarObs .OR. Use_PilotObs .OR. &
21       Use_ProfilerObs .OR. Use_BuoyObs .OR. Use_SoundObs .OR. Use_BogusObs .OR. &
22       Use_RadarObs .OR. Use_Radar_rv .OR. Use_Radar_rf .OR. Use_SatemObs .OR. &
23       Use_GeoAMVObs .OR. Use_PolarAMVObs .OR. Use_AirepObs .OR. &
24       Use_GpspwObs .OR. Use_GpsrefObs .OR. Use_SsmiRetrievalObs .OR. &
25       Use_SsmiTbObs .OR. Use_SSMT1Obs .OR. Use_SSMT2Obs .OR. use_qscatobs .or. &
26       Use_AIRSRETObs ) then
27  
28       use_obsgts = .true.
29    else
30       use_obsgts = .false.
31    end if
32 
33    if (use_Hirs2Obs .OR. use_Hirs3Obs .OR. use_MsuObs .OR. use_AmsuaObs .OR. &
34       use_AmsubObs .OR. use_AirsObs .OR. use_Eos_AmsuaObs .OR. &
35       use_Eos_RadObs .OR. use_HsbObs .OR. use_kma1dvar .OR. use_filtered_rad .or. &
36       use_ssmisobs ) then
37       use_rad = .true.
38    else
39       use_rad = .false.
40    end if
41 
42    ! testing_dm_exact can be set to .true. to force DM_PARALLEL runs 
43    ! to produce results that are bitwise-identical regardless of the number of 
44    ! MPI tasks used.  This is useful for validating that multi-processor runs 
45    ! are not a source of bugs.  Runtime will be much longer.  This option is 
46    ! automatically overridden to .false. for serial or 1-MPI-task runs.  
47 
48    if (testing_dm_exact) then
49       if (num_procs == 1) then
50          testing_dm_exact = .false.
51          write(unit=stdout,fmt='(A)') &
52             ' testing_dm_exact overridden to .false. for serial or 1-MPI-task run'
53       end if
54       ! only implmenented for Sound and Synop, so switch other types off
55       Use_ShipsObs         = .false.
56       Use_MetarObs         = .false.
57       Use_BogusObs         = .false.
58       Use_PilotObs         = .false.
59       Use_AirepObs         = .false.
60       Use_GeoAMVObs        = .false.
61       Use_PolarAMVObs      = .false.
62       Use_BuoyObs          = .false.
63       Use_ProfilerObs      = .false.
64       Use_SatemObs         = .false.
65       Use_GpspwObs         = .false.
66       Use_GpsrefObs        = .false.
67       Use_SsmiRetrievalObs = .false.
68       Use_SsmiTbObs        = .false.
69       use_ssmt1obs         = .false.
70       use_ssmt2obs         = .false.
71       use_qscatobs         = .false.
72       use_Hirs2Obs         = .false.
73       use_Hirs3Obs         = .false.
74       use_MsuObs           = .false.
75       use_AmsuaObs         = .false.
76       use_AmsubObs         = .false.
77       use_AirsObs          = .false.
78       use_Eos_AmsuaObs     = .false.
79       use_Eos_radObs       = .false.
80       use_HsbObs           = .false.
81       Use_Obsgts           = .false.
82       use_rad         = .false.
83       Use_AIRSRETObs       = .false.
84    end if
85     
86    if (num_pseudo > 0) then
87       call da_message((/"Single OBS Test:: Turn off all the OBS switches ***"/))
88       use_synopobs         = .false.
89       use_shipsobs         = .false.
90       use_metarobs         = .false.
91       use_soundobs         = .false.
92       use_bogusobs         = .false.
93       use_pilotobs         = .false.
94       use_airepobs         = .false.
95       use_geoamvobs        = .false.
96       use_polaramvobs      = .false.
97       use_buoyobs          = .false.
98       use_profilerobs      = .false.
99       use_satemobs         = .false.
100       use_gpspwobs         = .false.
101       use_gpsrefobs        = .false.
102       use_ssmiretrievalobs = .false.
103       use_ssmitbobs        = .false.
104       use_ssmt1obs         = .false.
105       use_ssmt2obs         = .false.
106       use_qscatobs         = .false.
107       use_hirs2obs         = .false.
108       use_hirs3obs         = .false.
109       use_msuobs           = .false.
110       use_amsuaobs         = .false.
111       use_amsubobs         = .false.
112       use_airsobs          = .false.
113       use_eos_amsuaobs     = .false.
114       use_eos_radobs       = .false.
115       use_hsbobs           = .false.
116       use_obsgts           = .true.
117       use_rad              = .false.
118       use_airsretobs       = .false.
119    end if
120 
121    if (sfc_assi_options < 1 .OR. sfc_assi_options > 2) then
122       write(unit=message(1),fmt='(A,I3)') &
123          'Invalid sfc_assi_option = ', sfc_assi_options
124       call da_error(__FILE__,__LINE__,message(1:1))
125    end if
126 
127    !---------------------------------------------------------------------------      
128    ! [1.0] Setup and read in fields from first guess:
129    !----------------------------------------------------------------------------     
130 
131    iv%missing = missing
132    ! iv%ptop    = grid%xb%ptop
133 
134    iv%total_obs         = 0
135    iv%total_rad_pixel   = 0
136    iv%total_rad_channel = 0
137    
138    iv%num_sound=0
139    iv%num_synop=0
140    iv%num_geoamv=0
141    iv%num_polaramv=0
142    iv%num_airep=0
143    iv%num_metar=0
144    iv%num_ships=0
145    iv%num_pilot=0
146    iv%num_satem=0
147    iv%num_gpspw=0
148    iv%num_gpsref=0
149    iv%num_qscat=0
150    iv%num_ssmt1=0
151    iv%num_ssmt2=0
152    iv%num_ssmi_tb=0
153    iv%num_ssmi_retrieval=0
154    iv%num_buoy=0
155    iv%num_profiler=0
156    iv%num_radar=0
157    iv%num_bogus=0
158    iv%num_airsr=0
159    iv%num_inst=0
160    iv%num_pseudo=0          
161 
162    iv%num_sound_glo=0
163    iv%num_synop_glo=0
164    iv%num_geoamv_glo=0
165    iv%num_polaramv_glo=0
166    iv%num_airep_glo=0
167    iv%num_metar_glo=0
168    iv%num_ships_glo=0
169    iv%num_pilot_glo=0
170    iv%num_satem_glo=0
171    iv%num_gpspw_glo=0
172    iv%num_gpsref_glo=0
173    iv%num_qscat_glo=0
174    iv%num_ssmt1_glo=0
175    iv%num_ssmt2_glo=0
176    iv%num_ssmi_tb_glo=0
177    iv%num_ssmi_retrieval_glo=0
178    iv%num_buoy_glo=0
179    iv%num_profiler_glo=0
180    iv%num_Radar_glo=0
181    iv%num_bogus_glo=0
182    iv%num_airsr_glo=0
183    iv%num_pseudo_glo=0             
184 
185 
186    ob%num_sound=0
187    ob%num_synop=0
188    ob%num_geoamv=0
189    ob%num_polaramv=0
190    ob%num_airep=0
191    ob%num_metar=0
192    ob%num_ships=0
193    ob%num_pilot=0
194    ob%num_satem=0
195    ob%num_gpspw=0
196    ob%num_gpsref=0
197    ob%num_qscat=0
198    ob%num_ssmt1=0
199    ob%num_ssmt2=0
200    ob%num_ssmi_tb=0
201    ob%num_ssmi_retrieval=0
202    ob%num_buoy=0
203    ob%num_profiler=0
204    ob%num_radar=0
205    ob%num_bogus=0
206    ob%num_airsr=0
207    ob%num_inst=0
208    ob%num_pseudo=0          
209 
210    if (use_obsgts) then
211       ! Conventional obs can be in BUFR or ascii format
212       if (ob_format == ob_format_bufr) then
213          call da_message((/'Using BUFR format observation input'/))
214          ! [1.1] BUFR observation input file:
215             call da_setup_obs_structures_bufr(grid%xp, ob, iv)
216       else if (ob_format == ob_format_ascii) then
217          ! [1.2] GTS observation input file:
218          call da_setup_obs_structures_ascii( grid%xp, ob, iv, grid%xb )
219       end if
220    end if
221 
222    ! Radiance files can only be in BUFR
223 
224    if (use_rad) then
225       call da_message((/'Using NCEP BUFR radiance 1b input'/))
226       call da_setup_bufrtovs_structures(grid, ob, iv)
227    end if
228 
229    ! Get horizontal interpolation weights.
230 
231    call da_setup_obs_interp_wts( grid%xp, iv) 
232 
233    if (trace_use) call da_trace_exit("da_setup_obs_structures")    
234 
235 end subroutine da_setup_obs_structures
236 
237