Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / da / da_setup_structures / da_setup_background_errors.inc
blob1913483890a98e13f1dbc7ac0845f9c78df4767b
1 subroutine da_setup_background_errors(grid, be)
3    !---------------------------------------------------------------------------
4    ! Purpose: Define and allocate components of background errors.
5    !          Wrapper subroutine.
6    !---------------------------------------------------------------------------
8    implicit none
10    type (domain), intent(in)   :: grid
11 !  type (xb_type), intent(in)  :: xb       ! First guess structure.
12    type (be_type), intent(out) :: be       ! Back. errors structure.
14    integer :: num_cv_3d_basic, num_cv_3d_extra, num_cv_2d
16    if (trace_use) call da_trace_entry("da_setup_background_errors")
18 !  Hybrid parameters:
19    be % ne = ensdim_alpha                          ! Size of ensemble.
21    if (be % ne > 0) then     ! Calculation to preserve total variance.
22       if ( je_factor > 1.0 ) then
23          jb_factor   = je_factor / ( je_factor - 1.0 )
24       else
25          jb_factor   = -999.
26          write(6,*) 'Full ensemble mode: deactivating Jb control variable'
27             max_vert_var1 = 0
28             max_vert_var2 = 0
29             max_vert_var3 = 0
30             max_vert_var4 = 0
31             max_vert_var5 = 0
32             max_vert_var6 = 0
33             max_vert_var7 = 0
34             max_vert_var8 = 0
35             max_vert_var9 = 0
36             max_vert_var10 = 0
37             max_vert_var11 = 0
38 #if (WRF_CHEM == 1)
39             max_vert_var12 = 0
40 #endif
41       end if
42       sigma_alpha = alpha_std_dev
43       write(6,'(a,4f15.5)')' jb_factor, je_factor, alpha_std_dev, sigma_alpha = ', &
44                     jb_factor, je_factor, alpha_std_dev, sigma_alpha
45    else
46       jb_factor = 1.0
47    end if
49    num_cv_3d_basic = 4
50    num_cv_3d_extra = 0
51    num_cv_2d       = 1
52    if ( cv_options /= 3 ) then
53       if ( cloud_cv_options >= 2 ) then
54          num_cv_3d_extra = 5
55       end if
56       if ( use_cv_w ) then
57          num_cv_3d_extra = num_cv_3d_extra + 1
58       end if
59    end if
61    ! + 2 is for alpha_cv and num_ens
62    be % ncv_mz  = num_cv_3d_basic + num_cv_3d_extra + num_cv_2d + 2
63    allocate ( be%cv_mz(1:be%ncv_mz) )
64    be%cv_mz(:) = 0 ! initialize
66    ! initialize
67    be % v1 % mz = 0
68    be % v2 % mz = 0
69    be % v3 % mz = 0
70    be % v4 % mz = 0
71    be % v5 % mz = 0
72    be % v6 % mz = 0
73    be % v7 % mz = 0
74    be % v8 % mz = 0
75    be % v9 % mz = 0
76    be % v10% mz = 0
77    be % v11% mz = 0
79 #if (WRF_CHEM == 1)
81    if (num_chem >= PARAM_FIRST_SCALAR) then
82       allocate (be%cv%sizechemic (num_chem) )
83    end if
85 #endif
87    if (global) then
88       call da_setup_be_global(be)
89    else if(fg_format == fg_format_wrf_arw_regional) then    
90       if ( (cv_options == 5) .or. (cv_options == 6) .or. (cv_options == 7) ) then
91          call da_setup_be_regional (grid%xb, be, grid)
92       else if(cv_options == 3 ) then
93          call da_setup_be_ncep_gfs (grid, be)
94       else 
95          write(unit=message(1),fmt='(A,I4)') &
96              'Invalid CV option chosen:  cv_options = ', cv_options
97          call da_error(__FILE__,__LINE__,message(1:1))
98       endif
99    else if(fg_format == fg_format_wrf_nmm_regional ) then
100 !rizvi TBD            call da_setup_be_regional (grid%xb, be)
101             call da_setup_be_nmm_regional (grid%xb, be)
102    end if
104    ! initialize
105    be % cv % size1   = 0
106    be % cv % size2   = 0
107    be % cv % size3   = 0
108    be % cv % size4   = 0
109    be % cv % size5   = 0
110    be % cv % size6   = 0
111    be % cv % size7   = 0
112    be % cv % size8   = 0
113    be % cv % size9   = 0
114    be % cv % size10  = 0
115    be % cv % size11i = 0
117    call da_setup_cv (be)
119    if (trace_use) call da_trace_exit("da_setup_background_errors")
121 end subroutine da_setup_background_errors