da_setup_cv.inc
References to this file elsewhere.
1 subroutine da_setup_cv(be)
2
3 !---------------------------------------------------------------------------
4 ! Purpose: Calculate the size of the 1-dimensional control variable array.
5 !---------------------------------------------------------------------------
6
7 implicit none
8
9 type (be_type), intent(inout) :: be ! background error.
10
11 integer :: iy, jx ! Local horizontal domain dimensions.
12 integer :: ij ! Product of horizontal dims.
13
14 if (trace_use) call da_trace_entry("da_setup_cv")
15
16 !--------------------------------------------------------------
17 ! 1] Define standard control variable size:
18 !--------------------------------------------------------------
19
20 if (global) then
21 be % cv % size1c = (be % v1 % max_wave+1) * (be % v1 % max_wave+2)/2
22 be % cv % size2c = (be % v2 % max_wave+1) * (be % v2 % max_wave+2)/2
23 be % cv % size3c = (be % v3 % max_wave+1) * (be % v3 % max_wave+2)/2
24 be % cv % size4c = (be % v4 % max_wave+1) * (be % v4 % max_wave+2)/2
25 be % cv % size5c = (be % v5 % max_wave+1) * (be % v5 % max_wave+2)/2
26
27 be % cv % size1 = 2 * be % cv % size1c * be % v1 % mz
28 be % cv % size2 = 2 * be % cv % size2c * be % v2 % mz
29 be % cv % size3 = 2 * be % cv % size3c * be % v3 % mz
30 be % cv % size4 = 2 * be % cv % size4c * be % v4 % mz
31 be % cv % size5 = 2 * be % cv % size5c * be % v5 % mz
32 else
33 iy = ite - its + 1
34 jx = jte - jts + 1
35 ij = iy * jx
36 be % cv % size1 = ij * be % v1 % mz
37 be % cv % size2 = ij * be % v2 % mz
38 be % cv % size3 = ij * be % v3 % mz
39 be % cv % size4 = ij * be % v4 % mz
40 be % cv % size5 = ij * be % v5 % mz
41 end if
42
43 be % cv % size_jb = be % cv % size1 + be % cv % size2 + be % cv % size3 + &
44 be % cv % size4 + be % cv % size5
45
46 !--------------------------------------------------------------
47 ! [2] Define flow-dependent control variable size:
48 !--------------------------------------------------------------
49
50 be % cv % size_je = 0
51
52 if (ensdim_alpha > 0) then
53 if (global) then
54 be % cv % size_alphac = (be % alpha % max_wave + 1) * &
55 (be % alpha % max_wave + 2) / 2
56 be % cv % size_je = 2 * be % cv % size_alphac * be % alpha % mz
57 else
58 be % cv % size_alphac = ij * be % alpha % mz
59 be % cv % size_je = be % cv % size_alphac
60 end if
61 end if
62
63 be % cv % size = be % cv % size_jb + be % cv % size_je
64
65 !--------------------------------------------------------------
66 ! [3] Define domain-wide cv sizes for bit-repro option:
67 !--------------------------------------------------------------
68
69 if (.not. global) then
70 iy = ide - ids + 1
71 jx = jde - jds + 1
72 ij = iy * jx
73 cv_size_domain_jb = ij * (be % v1 % mz + be % v2 % mz + be % v3 % mz + &
74 be % v4 % mz + be % v5 % mz)
75 cv_size_domain_je = ij * be % alpha % mz
76 end if
77
78 cv_size_domain = cv_size_domain_jb + cv_size_domain_je
79
80 if (trace_use) call da_trace_exit("da_setup_cv")
81
82 end subroutine da_setup_cv
83
84