da_transform_vtovv_adj.inc
References to this file elsewhere.
1 subroutine da_transform_vtovv_adj(cv_size, xb, be, cv, vv, xp)
2
3 !-----------------------------------------------------------------------
4 ! Purpose: TBD
5 !-----------------------------------------------------------------------
6
7 implicit none
8
9 integer, intent(in) :: cv_size ! Size of cv array.
10 type (xb_type), intent(in) :: xb ! First guess structure.
11 type (be_type), intent(in) :: be ! Background error structure.
12 real, intent(inout) :: cv(1:cv_size) ! control variables.
13 type (vp_type), intent(inout) :: vv ! Grid point/EOF control var.
14 type (xpose_type), intent(inout) :: xp ! Dimensions and xpose buffers.
15
16 integer :: mz ! Vertical truncation.
17
18 if (trace_use) call da_trace_entry("da_transform_vtovv_adj")
19
20 !-------------------------------------------------------------------------
21 ! [2.0] Perform VToVV Transform:
22 !-------------------------------------------------------------------------
23
24 ! [2.1] Transform 1st control variable:
25
26 mz = be % v1 % mz
27 if (mz > 0) then
28 call da_transform_through_rf_adj(mz, xb % grid_box_area, be % v1 % rf_alpha,&
29 be % v1 % val, xp, vv % v1)
30 end if
31
32 ! [2.2] Transform 2nd control variable:
33
34 mz = be % v2 % mz
35 if (mz > 0) then
36 call da_transform_through_rf_adj(mz, xb % grid_box_area, be % v2 % rf_alpha,&
37 be % v2 % val, xp, vv % v2)
38 end if
39
40 ! [2.3] Transform 3rd control variable
41
42 mz = be % v3 % mz
43 if (mz > 0) then
44 call da_transform_through_rf_adj(mz, xb % grid_box_area, be % v3 % rf_alpha,&
45 be % v3 % val, xp, vv % v3)
46 end if
47
48 ! [2.4] Transform 4th control variable
49
50 mz = be % v4 % mz
51 if (mz > 0) then
52 call da_transform_through_rf_adj(mz, xb % grid_box_area, be % v4 % rf_alpha,&
53 be % v4 % val, xp, vv % v4)
54 end if
55
56 ! [2.5] Transform 5th control variable
57
58 mz = be % v5 % mz
59 if (mz > 0) then
60 call da_transform_through_rf_adj(mz, xb % grid_box_area, be % v5 % rf_alpha,&
61 be % v5 % val, xp, vv % v5)
62 end if
63
64 ! [2.6] Transform alpha control variable
65
66 mz = be % alpha % mz
67 if (mz > 0) then
68 call da_transform_through_rf_adj(mz, xb % grid_box_area, be % alpha % rf_alpha,&
69 be % alpha % val, xp, vv % alpha)
70 end if
71
72 !-------------------------------------------------------------------------
73 ! [1.0] Fill 1D cv array from 3-dimensional vv arrays.
74 !-------------------------------------------------------------------------
75
76 call da_vv_to_cv(vv, xp, &
77 (/ be%v1%mz, be%v2%mz, be%v3%mz, be%v4%mz, be%v5%mz, be%ne /), &
78 cv_size, cv)
79
80 if (trace_use) call da_trace_exit("da_transform_vtovv_adj")
81
82
83 end subroutine da_transform_vtovv_adj
84
85