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
68 cv_e = cv_s + 2 * be % cv % size5c - 1
69 call da_vtovv_spectral(be % v5 % max_wave, be % cv % size5c, &
70 xbx % lenr, xbx % lenwrk, xbx % lensav, &
71 xbx % inc, xbx % alp_size, xbx % alp, &
72 xbx % wsave, be%v5%power(0:be % v5 % max_wave,k), &
73 cv(cv_s:cv_e), vv%v5(its:ite,jts:jte,kts:kte))
74 cv_s = cv_e + 1
75 end do
76
77 !-------------------------------------------------------------------------
78 ! [2] Spectral to grid transform for flow-dependent control variables:
79 !-------------------------------------------------------------------------
80
81 do m = 1, be % ne
82 cv_e = cv_s + 2 * be % cv % size_alphac - 1
83 call da_vtovv_spectral(be % alpha % max_wave, be % cv % size_alphac, &
84 xbx % lenr, xbx % lenwrk, xbx % lensav, &
85 xbx % inc, xbx % alp_size, xbx % alp, &
86 xbx % wsave, be % alpha % power(0:be%alpha%max_wave,1), &
87 cv(cv_s:cv_e), vv%alpha(its:ite,jts:jte,m))
88 cv_s = cv_e + 1
89 end do
90
91 if (trace_use) call da_trace_exit("da_transform_vtovv_global")
92
93 end subroutine da_transform_vtovv_global
94
95