da_setup_obs_structures.inc

References to this file elsewhere.
1 subroutine da_setup_obs_structures( xp, ob, iv ,xb)
2 
3    !---------------------------------------------------------------------------
4    ! Purpose: Allocate and read in components of observation structure.
5    !---------------------------------------------------------------------------
6 
7    implicit none
8    
9    type (xpose_type), intent(in)    :: xp  ! Domain decomposition vars. 
10    type (y_type),     intent(out)   :: ob  ! Observation structure.
11    type (ob_type),    intent(out)   :: iv  ! O-B structure.
12    type (xb_type),    intent(inout) :: xb  ! First guess structure.
13 
14    if (trace_use) call da_trace_entry("da_setup_obs_structures")
15 
16    call da_message((/'Set up observations (ob)'/))
17 
18    ! Adjust obs switches
19 
20 
21    if (Use_SynopObs .OR. Use_ShipsObs .OR. Use_MetarObs .OR. Use_PilotObs .OR. &
22       Use_ProfilerObs .OR. Use_BuoyObs .OR. Use_SoundObs .OR. Use_BogusObs .OR. &
23       Use_RadarObs .OR. Use_Radar_rv .OR. Use_Radar_rf .OR. Use_SatemObs .OR. &
24       Use_GeoAMVObs .OR. Use_PolarAMVObs .OR. Use_AirepObs .OR. &
25       Use_GpspwObs .OR. Use_GpsrefObs .OR. Use_SsmiRetrievalObs .OR. &
26       Use_SsmiTbObs .OR. Use_SSMT1Obs .OR. Use_SSMT2Obs .OR. use_qscatobs .or. &
27       Use_AIRSRETObs ) then
28  
29       use_obsgts = .true.
30    else
31       use_obsgts = .false.
32    end if
33 
34    if (use_Hirs2Obs .OR. use_Hirs3Obs .OR. use_MsuObs .OR. use_AmsuaObs .OR. &
35       use_AmsubObs .OR. use_AirsObs .OR. use_Eos_AmsuaObs .OR. &
36       use_Eos_RadObs .OR. use_HsbObs .OR. use_kma1dvar .OR. use_filtered_rad) then
37       use_radiance = .true.
38    else
39       use_radiance = .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_Radiance         = .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_Radiance         = .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    = 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(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( xp, ob, iv, xb )
219       end if
220    end if
221 
222    ! Radiance files can only be in BUFR
223 
224    if (use_radiance) then
225 #ifndef RTTOV
226       ! Stop any radiance work if RTTOV not defined, as there are
227       ! huge preprocessor defined holes in the subsequent code, made so people
228       ! can compile without the RTTOV library
229       call da_error(__FILE__,__LINE__, &
230          (/"Cannot run radiance code if compile directive RTTOV false"/))
231 #endif
232       call da_message((/'Using NCEP BUFR radiance 1b input'/))
233       call da_setup_bufrtovs_structures(xp, ob, iv)
234    end if
235 
236    ! Get horizontal interpolation weights.
237 
238    call da_setup_obs_interp_wts(xp, iv) 
239 
240    if (trace_use) call da_trace_exit("da_setup_obs_structures")    
241 
242 end subroutine da_setup_obs_structures
243 
244