da_transform_vtovv_global.inc
References to this file elsewhere.
1 subroutine da_transform_vtovv_global (cv_size, xbx, be, cv, vv)
2
3 !--------------------------------------------------------------------------
4 ! Purpose: Control variable transform for global WRF-Var
5 !--------------------------------------------------------------------------
6
7 implicit none
8
9 integer, intent(in) :: cv_size ! Size of cv array.
10 type(xbx_type), intent(in) :: xbx ! For header & non-grid arrays.
11 type(be_type), intent(in) :: be ! background errors.
12 real, intent(in) :: cv(1:cv_size) ! control variables.
13 type(vp_type), intent(inout) :: vv ! grdipt/eof cv (local).
14
15 integer :: k, m ! Loop counters.
16 integer :: cv_s ! Counter.
17 integer :: cv_e ! Counter.
18
19 if (trace_use) call da_trace_entry("da_transform_vtovv_global")
20
21 !-------------------------------------------------------------------------
22 ! [1] Spectral to grid transform for standard control variables:
23 !-------------------------------------------------------------------------
24
25 cv_s = 1
26 do k = 1, be%v1%mz
27 cv_e = cv_s + 2 * be % cv % size1c - 1
28 call da_vtovv_spectral(be % v1 % max_wave, be % cv % size1c, &
29 xbx % lenr, xbx % lenwrk, xbx % lensav, &
30 xbx % inc, xbx % alp_size, xbx % alp, &
31 xbx % wsave, be%v1%power(0:be % v1 % max_wave,k), &
32 cv(cv_s:cv_e), vv%v1(its:ite,jts:jte,k))
33 cv_s = cv_e + 1
34 end do
35
36 do k = 1, be%v2%mz
37 cv_e = cv_s + 2 * be % cv % size2c - 1
38 call da_vtovv_spectral(be % v2 % max_wave, be % cv % size2c, &
39 xbx % lenr, xbx % lenwrk, xbx % lensav, &
40 xbx % inc, xbx % alp_size, xbx % alp, &
41 xbx % wsave, be%v2%power(0:be % v2 % max_wave,k), &
42 cv(cv_s:cv_e), vv%v2(its:ite,jts:jte,k))
43 cv_s = cv_e + 1
44 end do
45
46 do k = 1, be%v3%mz
47 cv_e = cv_s + 2 * be % cv % size3c - 1
48 call da_vtovv_spectral(be % v3 % max_wave, be % cv % size3c, &
49 xbx % lenr, xbx % lenwrk, xbx % lensav, &
50 xbx % inc, xbx % alp_size, xbx % alp, &
51 xbx % wsave, be%v3%power(0:be % v3 % max_wave,k), &
52 cv(cv_s:cv_e), vv%v3(its:ite,jts:jte,k))
53 cv_s = cv_e + 1
54 end do
55
56 do k = 1, be%v4%mz
57 cv_e = cv_s + 2 * be % cv % size4c - 1
58 call da_vtovv_spectral(be % v4 % max_wave, be % cv % size4c, &
59 xbx % lenr, xbx % lenwrk, xbx % lensav, &
60 xbx % inc, xbx % alp_size, xbx % alp, &
61 xbx % wsave, be%v4%power(0:be % v4 % max_wave,k), &
62 cv(cv_s:cv_e), vv%v4(its:ite,jts:jte,k))
63 cv_s = cv_e + 1
64 end do
65
66 do k = 1, be%v5%mz
67 cv_e = cv_s + 2 * be % cv % size5c - 1
68 call da_vtovv_spectral(be % v5 % max_wave, be % cv % size5c, &
69 xbx % lenr, xbx % lenwrk, xbx % lensav, &
70 xbx % inc, xbx % alp_size, xbx % alp, &
71 xbx % wsave, be%v5%power(0:be % v5 % max_wave,k), &
72 cv(cv_s:cv_e), vv%v5(its:ite,jts:jte,kts:kte))
73 cv_s = cv_e + 1
74 end do
75
76 !-------------------------------------------------------------------------
77 ! [2] Spectral to grid transform for flow-dependent control variables:
78 !-------------------------------------------------------------------------
79
80 do m = 1, be % ne
81 cv_e = cv_s + 2 * be % cv % size_alphac - 1
82 call da_vtovv_spectral(be % alpha % max_wave, be % cv % size_alphac, &
83 xbx % lenr, xbx % lenwrk, xbx % lensav, &
84 xbx % inc, xbx % alp_size, xbx % alp, &
85 xbx % wsave, be % alpha % power(0:be%alpha%max_wave,1), &
86 cv(cv_s:cv_e), vv%alpha(its:ite,jts:jte,m))
87 cv_s = cv_e + 1
88 end do
89
90 if (trace_use) call da_trace_exit("da_transform_vtovv_global")
91
92 end subroutine da_transform_vtovv_global
93
94