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 (iv_type), intent(out) :: iv ! O-B structure.
12
13 integer :: i,j
14
15 if (trace_use) call da_trace_entry("da_setup_obs_structures")
16
17 call da_message((/'Set up observations (ob)'/))
18
19 ! Adjust obs switches
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 .or. &
37 use_ssmisobs .or. use_hirs4obs .or. use_mhsobs) then
38 use_rad = .true.
39 else
40 use_rad = .false.
41 end if
42
43 ! test_dm_exact can be set to .true. to force DM_PARALLEL runs
44 ! to produce results that are bitwise-identical regardless of the number of
45 ! MPI tasks used. This is useful for validating that multi-processor runs
46 ! are not a source of bugs. Runtime will be much longer. This option is
47 ! automatically overridden to .false. for serial or 1-MPI-task runs.
48
49 if (test_dm_exact) then
50 if (num_procs == 1) then
51 test_dm_exact = .false.
52 write(unit=stdout,fmt='(A)') &
53 ' test_dm_exact overridden to .false. for serial or 1-MPI-task run'
54 end if
55 ! only implmenented for Sound and Synop, so switch other types off
56 use_shipsobs = .false.
57 use_metarobs = .false.
58 use_bogusobs = .false.
59 use_pilotobs = .false.
60 use_airepobs = .false.
61 use_geoamvobs = .false.
62 use_polaramvobs = .false.
63 use_buoyobs = .false.
64 use_profilerobs = .false.
65 use_satemobs = .false.
66 use_gpspwobs = .false.
67 use_gpsrefobs = .false.
68 use_ssmiretrievalobs = .false.
69 use_ssmitbobs = .false.
70 use_ssmt1obs = .false.
71 use_ssmt2obs = .false.
72 use_qscatobs = .false.
73 use_hirs2obs = .false.
74 use_hirs3obs = .false.
75 use_hirs4obs = .false.
76 use_mhsobs = .false.
77 use_msuobs = .false.
78 use_amsuaobs = .false.
79 use_amsubobs = .false.
80 use_airsobs = .false.
81 use_eos_amsuaobs = .false.
82 use_eos_radobs = .false.
83 use_hsbobs = .false.
84 use_obsgts = .false.
85 use_rad = .false.
86 use_airsretobs = .false.
87 end if
88
89 if (num_pseudo > 0) then
90 call da_message((/"Single OBS Test:: Turn off all the OBS switches ***"/))
91 use_synopobs = .false.
92 use_shipsobs = .false.
93 use_metarobs = .false.
94 use_soundobs = .false.
95 use_bogusobs = .false.
96 use_pilotobs = .false.
97 use_airepobs = .false.
98 use_geoamvobs = .false.
99 use_polaramvobs = .false.
100 use_buoyobs = .false.
101 use_profilerobs = .false.
102 use_satemobs = .false.
103 use_gpspwobs = .false.
104 use_gpsrefobs = .false.
105 use_ssmiretrievalobs = .false.
106 use_ssmitbobs = .false.
107 use_ssmt1obs = .false.
108 use_ssmt2obs = .false.
109 use_qscatobs = .false.
110 use_hirs2obs = .false.
111 use_hirs3obs = .false.
112 use_hirs4obs = .false.
113 use_mhsobs = .false.
114 use_msuobs = .false.
115 use_amsuaobs = .false.
116 use_amsubobs = .false.
117 use_airsobs = .false.
118 use_eos_amsuaobs = .false.
119 use_eos_radobs = .false.
120 use_hsbobs = .false.
121 use_obsgts = .true.
122 use_rad = .false.
123 use_airsretobs = .false.
124 end if
125
126 if (sfc_assi_options < 1 .OR. sfc_assi_options > 2) then
127 write(unit=message(1),fmt='(A,I3)') &
128 'Invalid sfc_assi_option = ', sfc_assi_options
129 call da_error(__FILE__,__LINE__,message(1:1))
130 end if
131
132 !---------------------------------------------------------------------------
133 ! [1.0] Setup and read in fields from first guess:
134 !----------------------------------------------------------------------------
135
136 iv%missing = missing
137 ! iv%ptop = grid%xb%ptop
138
139 iv%total_rad_pixel = 0
140 iv%total_rad_channel = 0
141
142 iv%info(:)%nlocal = 0
143 iv%info(:)%ntotal = 0
144 do i=1,num_ob_indexes
145 iv%info(i)%plocal(:) = 0
146 iv%info(i)%ptotal(:) = 0
147 end do
148 iv%num_inst = 0
149
150 ob%nlocal(:) = 0
151 ob%ntotal(:) = 0
152 ob%num_inst = 0
153
154 iv%info(:)%max_lev = 0
155
156 if (use_obsgts) then
157 ! Conventional obs can be in BUFR or ascii format
158 if (ob_format == ob_format_bufr) then
159 call da_message((/'Using BUFR format observation input'/))
160 call da_setup_obs_structures_bufr (ob, iv)
161 else if (ob_format == ob_format_ascii) then
162 call da_message((/'Using ASCII format observation input'/))
163 call da_setup_obs_structures_ascii (ob, iv, grid)
164 end if
165 end if
166
167 ! Radiance files can only be in BUFR
168
169 if (use_rad) then
170 call da_message((/'Using NCEP BUFR radiance 1b input'/))
171 call da_setup_bufrtovs_structures(grid, ob, iv)
172 end if
173
174 ! Summarize observations
175
176 write(unit=stdout, fmt='(a)') 'Observation summary'
177 do i=1,num_fgat_time
178 write(unit=stdout, fmt='(3x,a,i2)') 'ob time ', i
179 do j=1,num_ob_indexes
180 write(unit=stdout, fmt='(6x,a,i6,a,i6,a)') &
181 obs_names(j), iv%info(j)%ptotal(i) - iv%info(j)%ptotal(i-1), ' global,', &
182 iv%info(j)%plocal(i) - iv%info(j)%plocal(i-1), ' local'
183 end do
184 end do
185 write(unit=stdout, fmt='(a)') ' '
186
187 ! Get horizontal interpolation weights.
188
189 call da_setup_obs_interp_wts (iv)
190
191 if (trace_use) call da_trace_exit("da_setup_obs_structures")
192
193 end subroutine da_setup_obs_structures
194
195