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