da_get_innov_vector_pseudo.inc

References to this file elsewhere.
1 subroutine da_get_innov_vector_pseudo(grid, ob, iv)
2 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
6 
7    implicit none
8    
9    type(domain),     intent(in)    :: grid        ! Background structure 
10    type(y_type),     intent(inout) :: ob          ! Observation structure.
11    type(iv_type),    intent(inout) :: iv          ! O-B structure.
12 
13    integer :: n        ! Loop counter.
14 
15    real, allocatable :: model_u(:,:)
16    real, allocatable :: model_v(:,:)
17    real, allocatable :: model_q(:,:)
18    real, allocatable :: model_p(:,:)
19    real, allocatable :: model_t(:,:)
20    
21    if (trace_use_dull) call da_trace_entry("da_get_innov_vector_pseudo")
22 
23    allocate (model_u(1,iv%info(pseudo)%n1:iv%info(pseudo)%n2))
24    allocate (model_v(1,iv%info(pseudo)%n1:iv%info(pseudo)%n2))
25    allocate (model_q(1,iv%info(pseudo)%n1:iv%info(pseudo)%n2))
26    allocate (model_p(1,iv%info(pseudo)%n1:iv%info(pseudo)%n2))
27    allocate (model_t(1,iv%info(pseudo)%n1:iv%info(pseudo)%n2))
28 
29    call da_interp_lin_3d (grid%xb%u, iv%info(pseudo), model_u)
30    call da_interp_lin_3d (grid%xb%v, iv%info(pseudo), model_v)
31    call da_interp_lin_3d (grid%xb%t, iv%info(pseudo), model_t)
32    call da_interp_lin_3d (grid%xb%p, iv%info(pseudo), model_p)
33    call da_interp_lin_3d (grid%xb%q, iv%info(pseudo), model_q)
34 
35    call da_convert_zk (iv%info(pseudo))
36 
37    do n=iv%info(pseudo)%n1,iv%info(pseudo)%n2
38       !---------------------------------------------------------------
39       ! [3.0] Calculate observation O = B +(O-B):
40       !---------------------------------------------------------------
41 
42       if (pseudo_var(1:1) == 'u' .or.  pseudo_var(1:1) == 'U') then
43          ob % pseudo(n) % u = model_u(1,n) + iv % pseudo(n) % u % inv
44       else if (pseudo_var(1:1) == 'v' .or.  pseudo_var(1:1) == 'V') then
45          ob % pseudo(n) % v = model_v(1,n) + iv % pseudo(n) % v % inv
46       else if (pseudo_var(1:1) == 't' .or.  pseudo_var(1:1) == 'T') then
47          ob % pseudo(n) % t = model_t(1,n) + iv % pseudo(n) % t % inv
48       else if (pseudo_var(1:1) == 'p' .or.  pseudo_var(1:1) == 'P') then
49          ob % pseudo(n) % p = model_p(1,n) + iv % pseudo(n) % p % inv
50       else if (pseudo_var(1:1) == 'q' .or.  pseudo_var(1:1) == 'Q') then
51          ob % pseudo(n) % q = model_q(1,n) + iv % pseudo(n) % q % inv
52       end if 
53    end do
54 
55    deallocate (model_u)
56    deallocate (model_v)
57    deallocate (model_q)
58    deallocate (model_p)
59    deallocate (model_t)
60    
61    if (trace_use_dull) call da_trace_exit("da_get_innov_vector_pseudo")
62 
63 end subroutine da_get_innov_vector_pseudo
64 
65