<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_RANDOM_OMB_ALL'><A href='../../html_code/obs/da_random_omb_all.inc.html#DA_RANDOM_OMB_ALL' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>

subroutine da_random_omb_all(iv, ob) 1,79

   !-------------------------------------------------------------------------
   ! Purpose: Allocates observation structure and fills it fro iv.
   !-------------------------------------------------------------------------

   implicit none

   type (iv_type), intent(inout) :: iv   ! Obs and header structure.
   type (y_type), intent(inout)  :: ob   ! (Smaller) observation structure.

   integer                       :: n, k ! Loop counters.

   if (trace_use) call da_trace_entry("da_random_omb_all")

   !----------------------------------------------------------------------
   ! [1.0] Initialise random number sequence:
   !----------------------------------------------------------------------

   call da_random_seed
   
   !----------------------------------------------------------------------
   !  [2.0] Randomize each ob in turn:
   !----------------------------------------------------------------------

   ! [2.1] Transfer surface obs:

   if (iv%info(synop)%nlocal &gt; 0) then
      do n = 1, iv%info(synop)%nlocal
         call da_random_omb(iv % synop(n) % u % error, ob % synop(n) % u, &amp;
                           iv % synop(n) % u % qc, iv % synop(n) % u % inv)
         call da_random_omb(iv % synop(n) % v % error, ob % synop(n) % v, &amp;
                           iv % synop(n) % v % qc, iv % synop(n) % v % inv)
         call da_random_omb(iv % synop(n) % t % error, ob % synop(n) % t, &amp;
                           iv % synop(n) % t % qc, iv % synop(n) % t % inv )
         call da_random_omb(iv % synop(n) % p % error, ob % synop(n) % p, &amp;
                           iv % synop(n) % p % qc, iv % synop(n) % p % inv)
         call da_random_omb(iv % synop(n) % q % error, ob % synop(n) % q, &amp;
                           iv % synop(n) % q % qc, iv % synop(n) % q % inv)
      end do
   end if

   ! [2.2] Transfer metar obs:

   if (iv%info(metar)%nlocal &gt; 0) then
      do n = 1, iv%info(metar)%nlocal
         call da_random_omb(iv % metar(n) % u % error, ob % metar(n) % u, &amp;
                           iv % metar(n) % u % qc, iv % metar(n) % u % inv)
         call da_random_omb(iv % metar(n) % v % error, ob % metar(n) % v, &amp;
                           iv % metar(n) % v % qc, iv % metar(n) % v % inv)
         call da_random_omb(iv % metar(n) % t % error, ob % metar(n) % t, &amp;
                           iv % metar(n) % t % qc, iv % metar(n) % t % inv)
         call da_random_omb(iv % metar(n) % p % error, ob % metar(n) % p, &amp;
                           iv % metar(n) % p % qc, iv % metar(n) % p % inv)
         call da_random_omb(iv % metar(n) % q % error, ob % metar(n) % q, &amp;
                           iv % metar(n) % q % qc, iv % metar(n) % q % inv)
      end do
   end if

   ! [2.3] Transfer ships obs:

   if (iv%info(ships)%nlocal &gt; 0) then
      do n = 1, iv%info(ships)%nlocal
         call da_random_omb(iv % ships(n) % u % error, ob % ships(n) % u, &amp;
                           iv % ships(n) % u % qc, iv % ships(n) % u % inv)
         call da_random_omb(iv % ships(n) % v % error, ob % ships(n) % v, &amp;
                           iv % ships(n) % v % qc, iv % ships(n) % v % inv)
         call da_random_omb(iv % ships(n) % t % error, ob % ships(n) % t, &amp;
                           iv % ships(n) % t % qc, iv % ships(n) % t % inv)
         call da_random_omb(iv % ships(n) % p % error, ob % ships(n) % p, &amp;
                           iv % ships(n) % p % qc, iv % ships(n) % p % inv)
         call da_random_omb(iv % ships(n) % q % error, ob % ships(n) % q, &amp;
                           iv % ships(n) % q % qc, iv % ships(n) % q % inv)
      end do
   end if

   ! [2.4.1] Transfer Geo. AMVs Obs:

   if (iv%info(geoamv)%nlocal &gt; 0) then
      do n = 1, iv%info(geoamv)%nlocal 
        do k = 1, iv%info(geoamv)%levels(n)
         call da_random_omb(iv % geoamv(n) % u(k) % error, ob % geoamv(n) % u(k), &amp;
                           iv % geoamv(n) % u(k) % qc, iv % geoamv(n) % u(k) % inv)
         call da_random_omb(iv % geoamv(n) % v(k) % error, ob % geoamv(n) % v(k), &amp;
                           iv % geoamv(n) % v(k) % qc, iv % geoamv(n) % v(k) % inv)
        end do
      end do 
   end if 

   ! [2.4.2] Transfer Polar  AMVs Obs:

   if (iv%info(polaramv)%nlocal &gt; 0) then
      do n = 1, iv%info(polaramv)%nlocal
        do k = 1, iv%info(polaramv)%levels(n)
         call da_random_omb(iv % polaramv(n) % u(k) % error, ob % polaramv(n) % u(k), &amp;
                           iv % polaramv(n) % u(k) % qc, iv % polaramv(n) % u(k) % inv)
         call da_random_omb(iv % polaramv(n) % v(k) % error, ob % polaramv(n) % v(k), &amp;
                           iv % polaramv(n) % v(k) % qc, iv % polaramv(n) % v(k) % inv)
        end do
      end do
   end if

   ! [2.5] Transfer gpspw obs:

   if (iv%info(gpspw)%nlocal &gt; 0) then
      do n = 1, iv%info(gpspw)%nlocal
         call da_random_omb(iv % gpspw(n) % tpw % error, ob % gpspw(n) % tpw, &amp;
                           iv % gpspw(n) % tpw % qc, iv % gpspw(n) % tpw % inv)
      end do
   end if

   ! [2.6] Transfer sonde obs:

   if (iv%info(sound)%nlocal &gt; 0) then
      do n = 1, iv%info(sound)%nlocal
         do k = 1, iv%info(sound)%levels(n)
            call da_random_omb(iv % sound(n) % u(k) % error, ob % sound(n) % u(k), &amp;
                              iv % sound(n) % u(k) % qc, iv % sound(n) % u(k) % inv)
            call da_random_omb(iv % sound(n) % v(k) % error, ob % sound(n) % v(k), &amp;
                              iv % sound(n) % v(k) % qc, iv % sound(n) % v(k) % inv)
            call da_random_omb(iv % sound(n) % t(k) % error, ob % sound(n) % t(k), &amp;
                              iv % sound(n) % t(k) % qc, iv % sound(n) % t(k) % inv)
            call da_random_omb(iv % sound(n) % q(k) % error, ob % sound(n) % q(k), &amp;
                              iv % sound(n) % q(k) % qc, iv % sound(n) % q(k) % inv)
         end do
      end do
   end if

   if (iv%info(sonde_sfc)%nlocal &gt; 0) then
      do n = 1, iv%info(sonde_sfc)%nlocal
         call da_random_omb(iv % sonde_sfc(n) % u % error, ob % sonde_sfc(n) % u, &amp;
                             iv % sonde_sfc(n) % u % qc, iv % sonde_sfc(n) % u % inv)
         call da_random_omb(iv % sonde_sfc(n) % v % error, ob % sonde_sfc(n) % v, &amp;
                             iv % sonde_sfc(n) % v % qc, iv % sonde_sfc(n) % v % inv)
         call da_random_omb(iv % sonde_sfc(n) % t % error, ob % sonde_sfc(n) % t, &amp;
                             iv % sonde_sfc(n) % t % qc, iv % sonde_sfc(n) % t % inv )
         call da_random_omb(iv % sonde_sfc(n) % p % error, ob % sonde_sfc(n) % p, &amp;
                             iv % sonde_sfc(n) % p % qc, iv % sonde_sfc(n) % p % inv)
         call da_random_omb(iv % sonde_sfc(n) % q % error, ob % sonde_sfc(n) % q, &amp;
                             iv % sonde_sfc(n) % q % qc, iv % sonde_sfc(n) % q % inv)
      end do
   end if

   ! [2.7] Transfer airep obs:

   if (iv%info(airep)%nlocal &gt; 0) then
      do n = 1, iv%info(airep)%nlocal
         do k = 1, iv%info(airep)%levels(n)
            call da_random_omb(iv % airep(n) % u(k) % error, ob % airep(n) % u(k), &amp;
                              iv % airep(n) % u(k) % qc, iv % airep(n) % u(k) % inv)
            call da_random_omb(iv % airep(n) % v(k) % error, ob % airep(n) % v(k), &amp;
                              iv % airep(n) % v(k) % qc, iv % airep(n) % v(k) % inv)
            call da_random_omb(iv % airep(n) % t(k) % error, ob % airep(n) % t(k), &amp;
                              iv % airep(n) % t(k) % qc, iv % airep(n) % t(k) % inv)
            call da_random_omb(iv % airep(n) % q(k) % error, ob % airep(n) % q(k), &amp;
                              iv % airep(n) % q(k) % qc, iv % airep(n) % q(k) % inv)
         end do
      end do
   end if

   ! [2.8] Transfer pilot obs:

   if (iv%info(pilot)%nlocal &gt; 0) then
      do n = 1, iv%info(pilot)%nlocal
         do k = 1, iv%info(pilot)%levels(n)
            call da_random_omb(iv % pilot(n) % u(k) % error, ob % pilot(n) % u(k), &amp;
                              iv % pilot(n) % u(k) % qc, iv % pilot(n) % u(k) % inv)
            call da_random_omb(iv % pilot(n) % v(k) % error, ob % pilot(n) % v(k), &amp;
                              iv % pilot(n) % v(k) % qc, iv % pilot(n) % v(k) % inv)
         end do
      end do
   end if

   ! [2.9] Transfer SSM/I obs:SSMI:

   if (iv%info(ssmi_rv)%nlocal &gt; 0) then
      do n = 1, iv%info(ssmi_rv)%nlocal
         call da_random_omb(iv % ssmi_rv(n) % speed % error, &amp;
                           ob % ssmi_rv(n) % speed, &amp;
                           iv % ssmi_rv(n) % speed % qc, &amp;
                           iv % ssmi_rv(n) % speed % inv)
         call da_random_omb(iv % ssmi_rv(n) % tpw % error, &amp;
                           ob % ssmi_rv(n) % tpw, &amp;
                           iv % ssmi_rv(n) % tpw % qc, &amp;
                           iv % ssmi_rv(n) % tpw % inv)
      end do
   end if

   if (iv%info(ssmi_tb)%nlocal &gt; 0) then
      do n = 1, iv%info(ssmi_tb)%nlocal
         call da_random_omb(iv % ssmi_tb(n) % tb19h % error, &amp;
                           ob % ssmi_tb(n) % tb19h, &amp;
                           iv % ssmi_tb(n) % tb19h % qc, &amp;
                           iv % ssmi_tb(n) % tb19h % inv)
         call da_random_omb(iv % ssmi_tb(n) % tb19v % error, &amp;
                           ob % ssmi_tb(n) % tb19v, &amp;
                           iv % ssmi_tb(n) % tb19v % qc, &amp;
                           iv % ssmi_tb(n) % tb19v % inv)
         call da_random_omb(iv % ssmi_tb(n) % tb22v % error, &amp;
                           ob % ssmi_tb(n) % tb22v, &amp;
                           iv % ssmi_tb(n) % tb22v % qc, &amp;
                           iv % ssmi_tb(n) % tb22v % inv)
         call da_random_omb(iv % ssmi_tb(n) % tb37h % error, &amp;
                           ob % ssmi_tb(n) % tb37h, &amp;
                           iv % ssmi_tb(n) % tb37h % qc, &amp;
                           iv % ssmi_tb(n) % tb37h % inv)
         call da_random_omb(iv % ssmi_tb(n) % tb37v % error, &amp;
                           ob % ssmi_tb(n) % tb37v, &amp;
                           iv % ssmi_tb(n) % tb37v % qc, &amp;
                           iv % ssmi_tb(n) % tb37v % inv)
         call da_random_omb(iv % ssmi_tb(n) % tb85h % error, &amp;
                           ob % ssmi_tb(n) % tb85h, &amp;
                           iv % ssmi_tb(n) % tb85h % qc, &amp;
                           iv % ssmi_tb(n) % tb85h % inv)
         call da_random_omb(iv % ssmi_tb(n) % tb85v % error, &amp;
                           ob % ssmi_tb(n) % tb85v, &amp;
                           iv % ssmi_tb(n) % tb85v % qc, &amp;
                           iv % ssmi_tb(n) % tb85v % inv)
      end do
   end if

   ! [2.10] Transfer satem obs:

   if (iv%info(satem)%nlocal &gt; 0) then
      do n = 1, iv%info(satem)%nlocal
         do k = 1, iv%info(satem)%levels(n)
            call da_random_omb(iv % satem(n) % thickness(k) % error, &amp;
                              ob % satem(n) % thickness(k), &amp;
                              iv % satem(n) % thickness(k) % qc, &amp;
                              iv % satem(n) % thickness(k) % inv)
         end do
      end do
   end if
   
   ! [2.11] Transfer ssmt1 obs:

   if (iv%info(ssmt1)%nlocal &gt; 0) then
      do n = 1, iv%info(ssmt1)%nlocal
         do k = 1, iv%info(ssmt1)%levels(n)
            call da_random_omb(iv % ssmt1(n) % t(k) % error, &amp;
                              ob % ssmt1(n) % t(k), &amp;
                              iv % ssmt1(n) % t(k) % qc, &amp;
                              iv % ssmt1(n) % t(k) % inv)
         end do
      end do
   end if

   ! [2.12] Transfer ssmt2 obs:

   if (iv%info(ssmt2)%nlocal &gt; 0) then
      do n = 1, iv%info(ssmt2)%nlocal
         do k = 1, iv%info(ssmt2)%levels(n)
            call da_random_omb(iv % ssmt2(n) % rh(k) % error, &amp;
                              ob % ssmt2(n) % rh(k), &amp;
                              iv % ssmt2(n) % rh(k) % qc, &amp;
                              iv % ssmt2(n) % rh(k) % inv)
         end do
      end do
   end if
   
   ! [2.13] Transfer scatterometer obs:

   if (iv%info(qscat)%nlocal &gt; 0) then
      do n = 1, iv%info(qscat)%nlocal
         call da_random_omb(iv % qscat(n) % u % error, ob % qscat(n) % u, &amp;
                           iv % qscat(n) % u % qc, iv % qscat(n) % u % inv)
         call da_random_omb(iv % qscat(n) % v % error, ob % qscat(n) % v, &amp;
                           iv % qscat(n) % v % qc, iv % qscat(n) % v % inv)
      end do
   end if

   ! [2.14] Transfer buoy obs:

   if (iv%info(buoy)%nlocal &gt; 0) then
      do n = 1, iv%info(buoy)%nlocal
         call da_random_omb(iv % buoy(n) % u % error, ob % buoy(n) % u, &amp;
                           iv % buoy(n) % u % qc, iv % buoy(n) % u % inv)
         call da_random_omb(iv % buoy(n) % v % error, ob % buoy(n) % v, &amp;
                           iv % buoy(n) % v % qc, iv % buoy(n) % v % inv)
         call da_random_omb(iv % buoy(n) % t % error, ob % buoy(n) % t, &amp;
                           iv % buoy(n) % t % qc, iv % buoy(n) % t % inv)
         call da_random_omb(iv % buoy(n) % p % error, ob % buoy(n) % p, &amp;
                           iv % buoy(n) % p % qc, iv % buoy(n) % p % inv)
         call da_random_omb(iv % buoy(n) % q % error, ob % buoy(n) % q, &amp;
                           iv % buoy(n) % q % qc, iv % buoy(n) % q % inv)
      end do
   end if

   ! [2.15] Transfer profiler obs:

   if (iv%info(profiler)%nlocal &gt; 0) then
      do n = 1, iv%info(profiler)%nlocal
         do k = 1, iv%info(profiler)%levels(n)
            call da_random_omb(iv % profiler(n) % u(k) % error, &amp;
               ob % profiler(n) % u(k), &amp;
               iv % profiler(n) % u(k) % qc, iv % profiler(n) % u(k) % inv)
            call da_random_omb(iv % profiler(n) % v(k) % error, &amp;
               ob % profiler(n) % v(k), &amp;
               iv % profiler(n) % v(k) % qc, iv % profiler(n) % v(k) % inv)
         end do
      end do
   end if

   ! [2.16] Transfer TC bogus obs:

   if (iv%info(bogus)%nlocal &gt; 0) then
      do n = 1, iv%info(bogus)%nlocal
         do k = 1, iv%info(bogus)%levels(n)
            call da_random_omb(iv % bogus(n) % u(k) % error, &amp;
               ob % bogus(n) % u(k), &amp;
               iv % bogus(n) % u(k) % qc, iv % bogus(n) % u(k) % inv)
            call da_random_omb(iv % bogus(n) % v(k) % error, &amp;
               ob % bogus(n) % v(k), &amp;
               iv % bogus(n) % v(k) % qc, iv % bogus(n) % v(k) % inv)
            call da_random_omb(iv % bogus(n) % t(k) % error, &amp;
               ob % bogus(n) % t(k), &amp;
               iv % bogus(n) % t(k) % qc, iv % bogus(n) % t(k) % inv)
            call da_random_omb(iv % bogus(n) % q(k) % error, &amp;
              ob % bogus(n) % q(k), &amp;
              iv % bogus(n) % q(k) % qc, iv % bogus(n) % q(k) % inv)
         end do

         call da_random_omb(iv % bogus(n) % slp % error, ob % bogus(n) % slp, &amp;
                            iv % bogus(n) % slp % qc, iv % bogus(n) % slp % inv)
      end do
   end if

   ! Transfer AIRS retrievals:

   if (iv%info(airsr)%nlocal &gt; 0) then
      do n = 1, iv%info(airsr)%nlocal
         do k = 1, iv%info(airsr)%levels(n)
            call da_random_omb(iv % airsr(n) % t(k) % error, &amp;
               ob % airsr(n) % t(k), &amp;
               iv % airsr(n) % t(k) % qc, iv % airsr(n) % t(k) % inv)
            call da_random_omb(iv % airsr(n) % q(k) % error, &amp;
               ob % airsr(n) % q(k), &amp;
               iv % airsr(n) % q(k) % qc, iv % airsr(n) % q(k) % inv)
         end do
      end do
   end if

   if (iv%info(mtgirs)%nlocal &gt; 0) then
      do n = 1, iv%info(mtgirs)%nlocal
         do k = 1, iv%info(mtgirs)%levels(n)
            call da_random_omb(iv % mtgirs(n) % u(k) % error, ob %  mtgirs(n) % u(k), &amp;
                              iv %  mtgirs(n) % u(k) % qc, iv %  mtgirs(n) % u(k) % inv)
            call da_random_omb(iv %  mtgirs(n) % v(k) % error, ob %  mtgirs(n) % v(k), &amp;
                              iv %  mtgirs(n) % v(k) % qc, iv %  mtgirs(n) % v(k) % inv)
            call da_random_omb(iv %  mtgirs(n) % t(k) % error, ob %  mtgirs(n) % t(k), &amp;
                              iv %  mtgirs(n) % t(k) % qc, iv %  mtgirs(n) % t(k) % inv)
            call da_random_omb(iv %  mtgirs(n) % q(k) % error, ob %  mtgirs(n) % q(k), &amp;
                              iv %  mtgirs(n) % q(k) % qc, iv %  mtgirs(n) % q(k) % inv)
         end do
      end do
    end if

   if (iv%info(tamdar)%nlocal &gt; 0) then
      do n = 1, iv%info(tamdar)%nlocal
         do k = 1, iv%info(tamdar)%levels(n)
            call da_random_omb(iv % tamdar(n) % u(k) % error, ob %  tamdar(n) % u(k), &amp;
                              iv %  tamdar(n) % u(k) % qc, iv %  tamdar(n) % u(k) % inv)
            call da_random_omb(iv %  tamdar(n) % v(k) % error, ob %  tamdar(n) % v(k), &amp;
                              iv %  tamdar(n) % v(k) % qc, iv %  tamdar(n) % v(k) % inv)
            call da_random_omb(iv %  tamdar(n) % t(k) % error, ob %  tamdar(n) % t(k), &amp;
                              iv %  tamdar(n) % t(k) % qc, iv %  tamdar(n) % t(k) % inv)
            call da_random_omb(iv %  tamdar(n) % q(k) % error, ob %  tamdar(n) % q(k), &amp;
                              iv %  tamdar(n) % q(k) % qc, iv %  tamdar(n) % q(k) % inv)
         end do
      end do
   end if

   if (iv%info(tamdar_sfc)%nlocal &gt; 0) then
      do n = 1, iv%info(tamdar_sfc)%nlocal
         call da_random_omb(iv % tamdar_sfc(n) % u % error, ob % tamdar_sfc(n) % u, &amp;
                             iv % tamdar_sfc(n) % u % qc, iv % tamdar_sfc(n) % u % inv)
         call da_random_omb(iv % tamdar_sfc(n) % v % error, ob % tamdar_sfc(n) % v, &amp;
                             iv % tamdar_sfc(n) % v % qc, iv % tamdar_sfc(n) % v % inv)
         call da_random_omb(iv % tamdar_sfc(n) % t % error, ob % tamdar_sfc(n) % t, &amp;
                             iv % tamdar_sfc(n) % t % qc, iv % tamdar_sfc(n) % t % inv )
         call da_random_omb(iv % tamdar_sfc(n) % p % error, ob % tamdar_sfc(n) % p, &amp;
                             iv % tamdar_sfc(n) % p % qc, iv % tamdar_sfc(n) % p % inv)
         call da_random_omb(iv % tamdar_sfc(n) % q % error, ob % tamdar_sfc(n) % q, &amp;
                             iv % tamdar_sfc(n) % q % qc, iv % tamdar_sfc(n) % q % inv)

      end do
    end if

   if (trace_use) call da_trace_exit("da_random_omb_all")

end subroutine da_random_omb_all