wrf svn trunk commit r4103
[wrffire.git] / wrfv2_fire / var / da / da_setup_structures / da_setup_cv.inc
blobd51da4e664e8b55b4326ab5d8e55ae3dbbe8945b
1 subroutine da_setup_cv(be)
3    !---------------------------------------------------------------------------
4    ! Purpose: Calculate the size of the 1-dimensional control variable array.        
5    !---------------------------------------------------------------------------
7    implicit none
9    type (be_type), intent(inout) :: be       ! background error.
11    integer :: iy, jx   ! Local horizontal domain dimensions.
12    integer :: ij       ! Product of horizontal dims.
14    if (trace_use) call da_trace_entry("da_setup_cv")
16    !--------------------------------------------------------------
17    ! 1] Define standard control variable size:
18    !--------------------------------------------------------------
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
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
43    be % cv % size_jb = be % cv % size1 + be % cv % size2 + be % cv % size3 + &
44       be % cv % size4 + be % cv % size5
46    !--------------------------------------------------------------
47    ! [2] Define flow-dependent control variable size:
48    !--------------------------------------------------------------
50    be % cv % size_je = 0
52    if ( be % ne > 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 * be % ne
59          be % cv % size_je = be % cv % size_alphac
60       end if
61    end if
62    
63    be % cv % size_jp = 0.0   ! Set up VarBC later
64    be % cv % size_js = 0.0   ! Set up SatCV later
66    be % cv % size = be % cv % size_jb +  be % cv % size_je
68    !--------------------------------------------------------------
69    ! [3] Define domain-wide cv sizes for bit-repro option:
70    !--------------------------------------------------------------
72    if (.not. global) then
73       iy = ide - ids + 1
74       jx = jde - jds + 1
75       ij = iy * jx
76       cv_size_domain_jb = ij * (be % v1 % mz + be % v2 % mz + be % v3 % mz + &
77                                  be % v4 % mz + be % v5 % mz)
78       cv_size_domain_je = ij * be % alpha % mz * be % ne
79    end if
81    cv_size_domain = cv_size_domain_jb + cv_size_domain_je
83    if (trace_use) call da_trace_exit("da_setup_cv")
85 end subroutine da_setup_cv