1 subroutine da_random_omb_all(iv, ob)
3 !-------------------------------------------------------------------------
4 ! Purpose: Allocates observation structure and fills it fro iv.
5 !-------------------------------------------------------------------------
9 type (iv_type), intent(inout) :: iv ! Obs and header structure.
10 type (y_type), intent(inout) :: ob ! (Smaller) observation structure.
12 integer :: n, k ! Loop counters.
14 if (trace_use) call da_trace_entry("da_random_omb_all")
16 !----------------------------------------------------------------------
17 ! [1.0] Initialise random number sequence:
18 !----------------------------------------------------------------------
22 !----------------------------------------------------------------------
23 ! [2.0] Randomize each ob in turn:
24 !----------------------------------------------------------------------
26 ! [2.1] Transfer surface obs:
28 if (iv%info(synop)%nlocal > 0) then
29 do n = 1, iv%info(synop)%nlocal
30 call da_random_omb(iv % synop(n) % u % error, ob % synop(n) % u, &
31 iv % synop(n) % u % qc, iv % synop(n) % u % inv)
32 call da_random_omb(iv % synop(n) % v % error, ob % synop(n) % v, &
33 iv % synop(n) % v % qc, iv % synop(n) % v % inv)
34 call da_random_omb(iv % synop(n) % t % error, ob % synop(n) % t, &
35 iv % synop(n) % t % qc, iv % synop(n) % t % inv )
36 call da_random_omb(iv % synop(n) % p % error, ob % synop(n) % p, &
37 iv % synop(n) % p % qc, iv % synop(n) % p % inv)
38 call da_random_omb(iv % synop(n) % q % error, ob % synop(n) % q, &
39 iv % synop(n) % q % qc, iv % synop(n) % q % inv)
43 ! [2.2] Transfer metar obs:
45 if (iv%info(metar)%nlocal > 0) then
46 do n = 1, iv%info(metar)%nlocal
47 call da_random_omb(iv % metar(n) % u % error, ob % metar(n) % u, &
48 iv % metar(n) % u % qc, iv % metar(n) % u % inv)
49 call da_random_omb(iv % metar(n) % v % error, ob % metar(n) % v, &
50 iv % metar(n) % v % qc, iv % metar(n) % v % inv)
51 call da_random_omb(iv % metar(n) % t % error, ob % metar(n) % t, &
52 iv % metar(n) % t % qc, iv % metar(n) % t % inv)
53 call da_random_omb(iv % metar(n) % p % error, ob % metar(n) % p, &
54 iv % metar(n) % p % qc, iv % metar(n) % p % inv)
55 call da_random_omb(iv % metar(n) % q % error, ob % metar(n) % q, &
56 iv % metar(n) % q % qc, iv % metar(n) % q % inv)
60 ! [2.3] Transfer ships obs:
62 if (iv%info(ships)%nlocal > 0) then
63 do n = 1, iv%info(ships)%nlocal
64 call da_random_omb(iv % ships(n) % u % error, ob % ships(n) % u, &
65 iv % ships(n) % u % qc, iv % ships(n) % u % inv)
66 call da_random_omb(iv % ships(n) % v % error, ob % ships(n) % v, &
67 iv % ships(n) % v % qc, iv % ships(n) % v % inv)
68 call da_random_omb(iv % ships(n) % t % error, ob % ships(n) % t, &
69 iv % ships(n) % t % qc, iv % ships(n) % t % inv)
70 call da_random_omb(iv % ships(n) % p % error, ob % ships(n) % p, &
71 iv % ships(n) % p % qc, iv % ships(n) % p % inv)
72 call da_random_omb(iv % ships(n) % q % error, ob % ships(n) % q, &
73 iv % ships(n) % q % qc, iv % ships(n) % q % inv)
77 ! [2.4.1] Transfer Geo. AMVs Obs:
79 if (iv%info(geoamv)%nlocal > 0) then
80 do n = 1, iv%info(geoamv)%nlocal
81 do k = 1, iv%info(geoamv)%levels(n)
82 call da_random_omb(iv % geoamv(n) % u(k) % error, ob % geoamv(n) % u(k), &
83 iv % geoamv(n) % u(k) % qc, iv % geoamv(n) % u(k) % inv)
84 call da_random_omb(iv % geoamv(n) % v(k) % error, ob % geoamv(n) % v(k), &
85 iv % geoamv(n) % v(k) % qc, iv % geoamv(n) % v(k) % inv)
90 ! [2.4.2] Transfer Polar AMVs Obs:
92 if (iv%info(polaramv)%nlocal > 0) then
93 do n = 1, iv%info(polaramv)%nlocal
94 do k = 1, iv%info(polaramv)%levels(n)
95 call da_random_omb(iv % polaramv(n) % u(k) % error, ob % polaramv(n) % u(k), &
96 iv % polaramv(n) % u(k) % qc, iv % polaramv(n) % u(k) % inv)
97 call da_random_omb(iv % polaramv(n) % v(k) % error, ob % polaramv(n) % v(k), &
98 iv % polaramv(n) % v(k) % qc, iv % polaramv(n) % v(k) % inv)
103 ! [2.5] Transfer gpspw obs:
105 if (iv%info(gpspw)%nlocal > 0) then
106 do n = 1, iv%info(gpspw)%nlocal
107 call da_random_omb(iv % gpspw(n) % tpw % error, ob % gpspw(n) % tpw, &
108 iv % gpspw(n) % tpw % qc, iv % gpspw(n) % tpw % inv)
112 ! [2.6] Transfer sonde obs:
114 if (iv%info(sound)%nlocal > 0) then
115 do n = 1, iv%info(sound)%nlocal
116 do k = 1, iv%info(sound)%levels(n)
117 call da_random_omb(iv % sound(n) % u(k) % error, ob % sound(n) % u(k), &
118 iv % sound(n) % u(k) % qc, iv % sound(n) % u(k) % inv)
119 call da_random_omb(iv % sound(n) % v(k) % error, ob % sound(n) % v(k), &
120 iv % sound(n) % v(k) % qc, iv % sound(n) % v(k) % inv)
121 call da_random_omb(iv % sound(n) % t(k) % error, ob % sound(n) % t(k), &
122 iv % sound(n) % t(k) % qc, iv % sound(n) % t(k) % inv)
123 call da_random_omb(iv % sound(n) % q(k) % error, ob % sound(n) % q(k), &
124 iv % sound(n) % q(k) % qc, iv % sound(n) % q(k) % inv)
129 if (iv%info(sonde_sfc)%nlocal > 0) then
130 do n = 1, iv%info(sonde_sfc)%nlocal
131 call da_random_omb(iv % sonde_sfc(n) % u % error, ob % sonde_sfc(n) % u, &
132 iv % sonde_sfc(n) % u % qc, iv % sonde_sfc(n) % u % inv)
133 call da_random_omb(iv % sonde_sfc(n) % v % error, ob % sonde_sfc(n) % v, &
134 iv % sonde_sfc(n) % v % qc, iv % sonde_sfc(n) % v % inv)
135 call da_random_omb(iv % sonde_sfc(n) % t % error, ob % sonde_sfc(n) % t, &
136 iv % sonde_sfc(n) % t % qc, iv % sonde_sfc(n) % t % inv )
137 call da_random_omb(iv % sonde_sfc(n) % p % error, ob % sonde_sfc(n) % p, &
138 iv % sonde_sfc(n) % p % qc, iv % sonde_sfc(n) % p % inv)
139 call da_random_omb(iv % sonde_sfc(n) % q % error, ob % sonde_sfc(n) % q, &
140 iv % sonde_sfc(n) % q % qc, iv % sonde_sfc(n) % q % inv)
144 ! [2.7] Transfer airep obs:
146 if (iv%info(airep)%nlocal > 0) then
147 do n = 1, iv%info(airep)%nlocal
148 do k = 1, iv%info(airep)%levels(n)
149 call da_random_omb(iv % airep(n) % u(k) % error, ob % airep(n) % u(k), &
150 iv % airep(n) % u(k) % qc, iv % airep(n) % u(k) % inv)
151 call da_random_omb(iv % airep(n) % v(k) % error, ob % airep(n) % v(k), &
152 iv % airep(n) % v(k) % qc, iv % airep(n) % v(k) % inv)
153 call da_random_omb(iv % airep(n) % t(k) % error, ob % airep(n) % t(k), &
154 iv % airep(n) % t(k) % qc, iv % airep(n) % t(k) % inv)
155 call da_random_omb(iv % airep(n) % q(k) % error, ob % airep(n) % q(k), &
156 iv % airep(n) % q(k) % qc, iv % airep(n) % q(k) % inv)
161 ! [2.8] Transfer pilot obs:
163 if (iv%info(pilot)%nlocal > 0) then
164 do n = 1, iv%info(pilot)%nlocal
165 do k = 1, iv%info(pilot)%levels(n)
166 call da_random_omb(iv % pilot(n) % u(k) % error, ob % pilot(n) % u(k), &
167 iv % pilot(n) % u(k) % qc, iv % pilot(n) % u(k) % inv)
168 call da_random_omb(iv % pilot(n) % v(k) % error, ob % pilot(n) % v(k), &
169 iv % pilot(n) % v(k) % qc, iv % pilot(n) % v(k) % inv)
174 ! [2.9] Transfer SSM/I obs:SSMI:
176 if (iv%info(ssmi_rv)%nlocal > 0) then
177 do n = 1, iv%info(ssmi_rv)%nlocal
178 call da_random_omb(iv % ssmi_rv(n) % speed % error, &
179 ob % ssmi_rv(n) % speed, &
180 iv % ssmi_rv(n) % speed % qc, &
181 iv % ssmi_rv(n) % speed % inv)
182 call da_random_omb(iv % ssmi_rv(n) % tpw % error, &
183 ob % ssmi_rv(n) % tpw, &
184 iv % ssmi_rv(n) % tpw % qc, &
185 iv % ssmi_rv(n) % tpw % inv)
189 if (iv%info(ssmi_tb)%nlocal > 0) then
190 do n = 1, iv%info(ssmi_tb)%nlocal
191 call da_random_omb(iv % ssmi_tb(n) % tb19h % error, &
192 ob % ssmi_tb(n) % tb19h, &
193 iv % ssmi_tb(n) % tb19h % qc, &
194 iv % ssmi_tb(n) % tb19h % inv)
195 call da_random_omb(iv % ssmi_tb(n) % tb19v % error, &
196 ob % ssmi_tb(n) % tb19v, &
197 iv % ssmi_tb(n) % tb19v % qc, &
198 iv % ssmi_tb(n) % tb19v % inv)
199 call da_random_omb(iv % ssmi_tb(n) % tb22v % error, &
200 ob % ssmi_tb(n) % tb22v, &
201 iv % ssmi_tb(n) % tb22v % qc, &
202 iv % ssmi_tb(n) % tb22v % inv)
203 call da_random_omb(iv % ssmi_tb(n) % tb37h % error, &
204 ob % ssmi_tb(n) % tb37h, &
205 iv % ssmi_tb(n) % tb37h % qc, &
206 iv % ssmi_tb(n) % tb37h % inv)
207 call da_random_omb(iv % ssmi_tb(n) % tb37v % error, &
208 ob % ssmi_tb(n) % tb37v, &
209 iv % ssmi_tb(n) % tb37v % qc, &
210 iv % ssmi_tb(n) % tb37v % inv)
211 call da_random_omb(iv % ssmi_tb(n) % tb85h % error, &
212 ob % ssmi_tb(n) % tb85h, &
213 iv % ssmi_tb(n) % tb85h % qc, &
214 iv % ssmi_tb(n) % tb85h % inv)
215 call da_random_omb(iv % ssmi_tb(n) % tb85v % error, &
216 ob % ssmi_tb(n) % tb85v, &
217 iv % ssmi_tb(n) % tb85v % qc, &
218 iv % ssmi_tb(n) % tb85v % inv)
222 ! [2.10] Transfer satem obs:
224 if (iv%info(satem)%nlocal > 0) then
225 do n = 1, iv%info(satem)%nlocal
226 do k = 1, iv%info(satem)%levels(n)
227 call da_random_omb(iv % satem(n) % thickness(k) % error, &
228 ob % satem(n) % thickness(k), &
229 iv % satem(n) % thickness(k) % qc, &
230 iv % satem(n) % thickness(k) % inv)
235 ! [2.11] Transfer ssmt1 obs:
237 if (iv%info(ssmt1)%nlocal > 0) then
238 do n = 1, iv%info(ssmt1)%nlocal
239 do k = 1, iv%info(ssmt1)%levels(n)
240 call da_random_omb(iv % ssmt1(n) % t(k) % error, &
241 ob % ssmt1(n) % t(k), &
242 iv % ssmt1(n) % t(k) % qc, &
243 iv % ssmt1(n) % t(k) % inv)
248 ! [2.12] Transfer ssmt2 obs:
250 if (iv%info(ssmt2)%nlocal > 0) then
251 do n = 1, iv%info(ssmt2)%nlocal
252 do k = 1, iv%info(ssmt2)%levels(n)
253 call da_random_omb(iv % ssmt2(n) % rh(k) % error, &
254 ob % ssmt2(n) % rh(k), &
255 iv % ssmt2(n) % rh(k) % qc, &
256 iv % ssmt2(n) % rh(k) % inv)
261 ! [2.13] Transfer scatterometer obs:
263 if (iv%info(qscat)%nlocal > 0) then
264 do n = 1, iv%info(qscat)%nlocal
265 call da_random_omb(iv % qscat(n) % u % error, ob % qscat(n) % u, &
266 iv % qscat(n) % u % qc, iv % qscat(n) % u % inv)
267 call da_random_omb(iv % qscat(n) % v % error, ob % qscat(n) % v, &
268 iv % qscat(n) % v % qc, iv % qscat(n) % v % inv)
272 ! [2.14] Transfer buoy obs:
274 if (iv%info(buoy)%nlocal > 0) then
275 do n = 1, iv%info(buoy)%nlocal
276 call da_random_omb(iv % buoy(n) % u % error, ob % buoy(n) % u, &
277 iv % buoy(n) % u % qc, iv % buoy(n) % u % inv)
278 call da_random_omb(iv % buoy(n) % v % error, ob % buoy(n) % v, &
279 iv % buoy(n) % v % qc, iv % buoy(n) % v % inv)
280 call da_random_omb(iv % buoy(n) % t % error, ob % buoy(n) % t, &
281 iv % buoy(n) % t % qc, iv % buoy(n) % t % inv)
282 call da_random_omb(iv % buoy(n) % p % error, ob % buoy(n) % p, &
283 iv % buoy(n) % p % qc, iv % buoy(n) % p % inv)
284 call da_random_omb(iv % buoy(n) % q % error, ob % buoy(n) % q, &
285 iv % buoy(n) % q % qc, iv % buoy(n) % q % inv)
289 ! [2.15] Transfer profiler obs:
291 if (iv%info(profiler)%nlocal > 0) then
292 do n = 1, iv%info(profiler)%nlocal
293 do k = 1, iv%info(profiler)%levels(n)
294 call da_random_omb(iv % profiler(n) % u(k) % error, &
295 ob % profiler(n) % u(k), &
296 iv % profiler(n) % u(k) % qc, iv % profiler(n) % u(k) % inv)
297 call da_random_omb(iv % profiler(n) % v(k) % error, &
298 ob % profiler(n) % v(k), &
299 iv % profiler(n) % v(k) % qc, iv % profiler(n) % v(k) % inv)
304 ! [2.16] Transfer TC bogus obs:
306 if (iv%info(bogus)%nlocal > 0) then
307 do n = 1, iv%info(bogus)%nlocal
308 do k = 1, iv%info(bogus)%levels(n)
309 call da_random_omb(iv % bogus(n) % u(k) % error, &
310 ob % bogus(n) % u(k), &
311 iv % bogus(n) % u(k) % qc, iv % bogus(n) % u(k) % inv)
312 call da_random_omb(iv % bogus(n) % v(k) % error, &
313 ob % bogus(n) % v(k), &
314 iv % bogus(n) % v(k) % qc, iv % bogus(n) % v(k) % inv)
315 call da_random_omb(iv % bogus(n) % t(k) % error, &
316 ob % bogus(n) % t(k), &
317 iv % bogus(n) % t(k) % qc, iv % bogus(n) % t(k) % inv)
318 call da_random_omb(iv % bogus(n) % q(k) % error, &
319 ob % bogus(n) % q(k), &
320 iv % bogus(n) % q(k) % qc, iv % bogus(n) % q(k) % inv)
323 call da_random_omb(iv % bogus(n) % slp % error, ob % bogus(n) % slp, &
324 iv % bogus(n) % slp % qc, iv % bogus(n) % slp % inv)
328 ! Transfer AIRS retrievals:
330 if (iv%info(airsr)%nlocal > 0) then
331 do n = 1, iv%info(airsr)%nlocal
332 do k = 1, iv%info(airsr)%levels(n)
333 call da_random_omb(iv % airsr(n) % t(k) % error, &
334 ob % airsr(n) % t(k), &
335 iv % airsr(n) % t(k) % qc, iv % airsr(n) % t(k) % inv)
336 call da_random_omb(iv % airsr(n) % q(k) % error, &
337 ob % airsr(n) % q(k), &
338 iv % airsr(n) % q(k) % qc, iv % airsr(n) % q(k) % inv)
343 if (iv%info(mtgirs)%nlocal > 0) then
344 do n = 1, iv%info(mtgirs)%nlocal
345 do k = 1, iv%info(mtgirs)%levels(n)
346 call da_random_omb(iv % mtgirs(n) % u(k) % error, ob % mtgirs(n) % u(k), &
347 iv % mtgirs(n) % u(k) % qc, iv % mtgirs(n) % u(k) % inv)
348 call da_random_omb(iv % mtgirs(n) % v(k) % error, ob % mtgirs(n) % v(k), &
349 iv % mtgirs(n) % v(k) % qc, iv % mtgirs(n) % v(k) % inv)
350 call da_random_omb(iv % mtgirs(n) % t(k) % error, ob % mtgirs(n) % t(k), &
351 iv % mtgirs(n) % t(k) % qc, iv % mtgirs(n) % t(k) % inv)
352 call da_random_omb(iv % mtgirs(n) % q(k) % error, ob % mtgirs(n) % q(k), &
353 iv % mtgirs(n) % q(k) % qc, iv % mtgirs(n) % q(k) % inv)
358 if (iv%info(tamdar)%nlocal > 0) then
359 do n = 1, iv%info(tamdar)%nlocal
360 do k = 1, iv%info(tamdar)%levels(n)
361 call da_random_omb(iv % tamdar(n) % u(k) % error, ob % tamdar(n) % u(k), &
362 iv % tamdar(n) % u(k) % qc, iv % tamdar(n) % u(k) % inv)
363 call da_random_omb(iv % tamdar(n) % v(k) % error, ob % tamdar(n) % v(k), &
364 iv % tamdar(n) % v(k) % qc, iv % tamdar(n) % v(k) % inv)
365 call da_random_omb(iv % tamdar(n) % t(k) % error, ob % tamdar(n) % t(k), &
366 iv % tamdar(n) % t(k) % qc, iv % tamdar(n) % t(k) % inv)
367 call da_random_omb(iv % tamdar(n) % q(k) % error, ob % tamdar(n) % q(k), &
368 iv % tamdar(n) % q(k) % qc, iv % tamdar(n) % q(k) % inv)
373 if (iv%info(tamdar_sfc)%nlocal > 0) then
374 do n = 1, iv%info(tamdar_sfc)%nlocal
375 call da_random_omb(iv % tamdar_sfc(n) % u % error, ob % tamdar_sfc(n) % u, &
376 iv % tamdar_sfc(n) % u % qc, iv % tamdar_sfc(n) % u % inv)
377 call da_random_omb(iv % tamdar_sfc(n) % v % error, ob % tamdar_sfc(n) % v, &
378 iv % tamdar_sfc(n) % v % qc, iv % tamdar_sfc(n) % v % inv)
379 call da_random_omb(iv % tamdar_sfc(n) % t % error, ob % tamdar_sfc(n) % t, &
380 iv % tamdar_sfc(n) % t % qc, iv % tamdar_sfc(n) % t % inv )
381 call da_random_omb(iv % tamdar_sfc(n) % p % error, ob % tamdar_sfc(n) % p, &
382 iv % tamdar_sfc(n) % p % qc, iv % tamdar_sfc(n) % p % inv)
383 call da_random_omb(iv % tamdar_sfc(n) % q % error, ob % tamdar_sfc(n) % q, &
384 iv % tamdar_sfc(n) % q % qc, iv % tamdar_sfc(n) % q % inv)
389 if (trace_use) call da_trace_exit("da_random_omb_all")
391 end subroutine da_random_omb_all