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