Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / da / da_obs / da_random_omb_all.inc
blob138db49a5cae103090021763c2f2e3f17e7650c5
1 subroutine da_random_omb_all(iv, ob)
3    !-------------------------------------------------------------------------
4    ! Purpose: Allocates observation structure and fills it fro iv.
5    !-------------------------------------------------------------------------
7    implicit none
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    !----------------------------------------------------------------------
20    call da_random_seed
21    
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)
40       end do
41    end if
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)
57       end do
58    end if
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)
74       end do
75    end if
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)
86         end do
87       end do 
88    end if 
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)
99         end do
100       end do
101    end if
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)
109       end do
110    end if
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)
125          end do
126       end do
127    end if
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)
141       end do
142    end if
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)
157          end do
158       end do
159    end if
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)
170          end do
171       end do
172    end if
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)
186       end do
187    end if
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)
219       end do
220    end if
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)
231          end do
232       end do
233    end if
234    
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)
244          end do
245       end do
246    end if
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)
257          end do
258       end do
259    end if
260    
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)
269       end do
270    end if
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)
286       end do
287    end if
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)
300          end do
301       end do
302    end if
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)
321          end do
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)
325       end do
326    end if
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)
339          end do
340       end do
341    end if
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)
354          end do
355       end do
356     end if
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)
369          end do
370       end do
371    end if
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)
386       end do
387     end if
389    if (trace_use) call da_trace_exit("da_random_omb_all")
391 end subroutine da_random_omb_all