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