Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / var / da / da_define_structures / da_deallocate_background_errors.inc
blob418b27cd5e6c9f143ab5898f8dbe970e90e2a516
1 subroutine da_deallocate_background_errors (be)
3    !---------------------------------------------------------------------------
4    ! Purpose: Deallocate components of wrfvar background errors.
5    !
6    !  Update: Multivariate BE option (cv_options=6)
7    !          Syed RH Rizvi (MMM/NESL/NCAR)   Date: 02/01/2010
8    !
9    !  Note: Please acknowledge author/institute in work that uses this code.
10    !---------------------------------------------------------------------------
12    implicit none
14    type (be_type), intent(inout)        :: be     ! Background error structure.
15 #if (WRF_CHEM == 1)
16    integer :: ic
17 #endif
18    
19    if (trace_use) call da_trace_entry("da_deallocate_background_errors")
21    if (cv_options /= 3) then
23 #if (WRF_CHEM == 1)
24      if (chem_cv_options >=10 ) then
25        !! Chem SFC
26        do ic = PARAM_FIRST_SCALAR, num_chem
27           if ( be % v12(ic-1) % mz > 0 ) then
28              deallocate( be % v12(ic-1) % val )
29              deallocate( be % v12(ic-1) % evec )
30              deallocate( be % v12(ic-1) % rf_alpha )
31           end if
32       end do                                                                                                                               
33       deallocate ( be % v12 )
34       deallocate ( be % cv_mz_chemic )
35       if ( num_chem >= PARAM_FIRST_SCALAR ) deallocate ( be % cv % sizechemic )
36      end if
37 #endif
38       ! Deallocate gridpoint errors:
40       if (be % v1 % mz > 0) deallocate (be % v1 % val)
41       if (be % v2 % mz > 0) deallocate (be % v2 % val)
42       if (be % v3 % mz > 0) deallocate (be % v3 % val)
43       if (be % v4 % mz > 0) deallocate (be % v4 % val)
44       if (be % v5 % mz > 0 .and. .not. global) deallocate (be % v5 % val) 
46       if ( cloud_cv_options >= 2 ) then
47          if (be % v6 % mz > 0) deallocate (be % v6 % val)
48          if (be % v7 % mz > 0) deallocate (be % v7 % val)
49          if (be % v8 % mz > 0) deallocate (be % v8 % val)
50          if (be % v9 % mz > 0) deallocate (be % v9 % val)
51          if (be % v10% mz > 0) deallocate (be % v10% val)
52       end if
53       if ( use_cv_w ) then
54          if (be % v11% mz > 0) deallocate (be % v11% val)
55       end if
57       if (be % v1 % mz > 0) deallocate (be % v1 % rf_alpha)
58       if (be % v2 % mz > 0) deallocate (be % v2 % rf_alpha)
59       if (be % v3 % mz > 0) deallocate (be % v3 % rf_alpha)
60       if (be % v4 % mz > 0) deallocate (be % v4 % rf_alpha)
61       if (be % v5 % mz > 0 .and. .not. global) deallocate (be % v5 % rf_alpha)
63       if ( cloud_cv_options >= 2 ) then
64          if (be % v6 % mz > 0) deallocate (be % v6 % rf_alpha)
65          if (be % v7 % mz > 0) deallocate (be % v7 % rf_alpha)
66          if (be % v8 % mz > 0) deallocate (be % v8 % rf_alpha)
67          if (be % v9 % mz > 0) deallocate (be % v9 % rf_alpha)
68          if (be % v10% mz > 0) deallocate (be % v10% rf_alpha)
69       end if
70       if ( use_cv_w ) then
71          if (be % v11% mz > 0) deallocate (be % v11% rf_alpha)
72       end if
74       if (global) then
75          if (be % v1 % mz > 0) deallocate (be % v1 % power)
76          if (be % v2 % mz > 0) deallocate (be % v2 % power)
77          if (be % v3 % mz > 0) deallocate (be % v3 % power)
78          if (be % v4 % mz > 0) deallocate (be % v4 % power)
79          if (be % v5 % mz > 0) deallocate (be % v5 % power) 
80       end if
82       ! Deallocate eigenvectors of vertical error covariance:
84       if (vert_corr == vert_corr_2) then
85          if (be % v1 % mz > 0) deallocate (be % v1 % evec)
86          if (be % v2 % mz > 0) deallocate (be % v2 % evec)
87          if (be % v3 % mz > 0) deallocate (be % v3 % evec)
88          if (be % v4 % mz > 0) deallocate (be % v4 % evec)
89          if (be % v5 % mz > 0 .and. .not. global) deallocate (be % v5 % evec)
91          if ( cloud_cv_options >= 2 ) then
92             if (be % v6 % mz > 0) deallocate (be % v6 % evec)
93             if (be % v7 % mz > 0) deallocate (be % v7 % evec)
94             if (be % v8 % mz > 0) deallocate (be % v8 % evec)
95             if (be % v9 % mz > 0) deallocate (be % v9 % evec)
96             if (be % v10% mz > 0) deallocate (be % v10% evec)
97          end if
98          if ( use_cv_w ) then
99             if (be % v11% mz > 0) deallocate (be % v11% evec)
100          end if
102          if (be % v1 % mz > 0) deallocate (be % v1 % evec_g)
103          if (be % v2 % mz > 0) deallocate (be % v2 % evec_g)
104          if (be % v3 % mz > 0) deallocate (be % v3 % evec_g)
105          if (be % v4 % mz > 0) deallocate (be % v4 % evec_g)
106          if (be % v5 % mz > 0 .and. .not. global) deallocate (be % v5 % evec_g)
108          if ( cloud_cv_options >= 2 ) then
109             if (be % v6 % mz > 0) deallocate (be % v6 % evec_g)
110             if (be % v7 % mz > 0) deallocate (be % v7 % evec_g)
111             if (be % v8 % mz > 0) deallocate (be % v8 % evec_g)
112             if (be % v9 % mz > 0) deallocate (be % v9 % evec_g)
113             if (be % v10% mz > 0) deallocate (be % v10% evec_g)
114          end if
115          if ( use_cv_w ) then
116             if (be % v11% mz > 0) deallocate (be % v11% evec_g)
117          end if
119          if (be % v1 % mz > 0) deallocate (be % v1 % val_g)
120          if (be % v2 % mz > 0) deallocate (be % v2 % val_g)
121          if (be % v3 % mz > 0) deallocate (be % v3 % val_g)
122          if (be % v4 % mz > 0) deallocate (be % v4 % val_g)
123          if (be % v5 % mz > 0 .and. .not. global) deallocate (be % v5 % val_g)
125          if ( cloud_cv_options >= 2 ) then
126             if (be % v6 % mz > 0) deallocate (be % v6 % val_g)
127             if (be % v7 % mz > 0) deallocate (be % v7 % val_g)
128             if (be % v8 % mz > 0) deallocate (be % v8 % val_g)
129             if (be % v9 % mz > 0) deallocate (be % v9 % val_g)
130             if (be % v10% mz > 0) deallocate (be % v10% val_g)
131          end if
132          if ( use_cv_w ) then
133             if (be % v11% mz > 0) deallocate (be % v11% val_g)
134          end if
136          deallocate (be % cv_mz)
138       end if
140       if ( cv_options /= 7 ) then
141          deallocate (be % reg_psi_chi)
142          deallocate (be % reg_psi_t)
143          deallocate (be % reg_psi_ps)
144          if ( cv_options == 6 ) then
145             deallocate (be % reg_psi_rh)
146             deallocate (be % reg_chi_u_t)
147             deallocate (be % reg_chi_u_ps)
148             deallocate (be % reg_chi_u_rh)
149             deallocate (be % reg_t_u_rh)
150             deallocate (be % reg_ps_u_rh)
151          end if
152       end if
154       ! Deallocate control variable errors (in future uncomment use these to allow 
155       ! eg NMC error correlations).
157       ! deallocate (be % cv % val)
159    else ! for cv_options = 3
160     
161       deallocate (be % corz)
162       deallocate (be % corp)
163       deallocate (be % vz)
164       deallocate (be % agvz)
165       deallocate (be % bvz)
166       deallocate (be % wgvz)
167       deallocate (be % be)
168       deallocate (be % rate)
169       deallocate (be % table)
170       deallocate (be % slix)
171       deallocate (be % slipx)
172       deallocate (be % sljy)
173       deallocate (be % sljpy)
174    
175    end if
177    ! Deallocate wavelet parameters:
178    if( .not. use_rf )deallocate(be%wsd,ws)
179    if( do_normalize )deallocate(be%sd)
180    if( do_normalize .or. .not. use_rf )deallocate(nij)
182    if (trace_use) call da_trace_exit("da_deallocate_background_errors")
184 end subroutine da_deallocate_background_errors