1 |
|
|
module lscp_ini_mod |
2 |
|
|
|
3 |
|
|
implicit none |
4 |
|
|
|
5 |
|
|
! PARAMETERS for lscp: |
6 |
|
|
!-------------------- |
7 |
|
|
|
8 |
|
|
REAL RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG |
9 |
|
|
!$OMP THREADPRIVATE(RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG) |
10 |
|
|
|
11 |
|
|
REAL, SAVE :: seuil_neb=0.001 ! cloud fraction threshold: a cloud really exists when exceeded |
12 |
|
|
!$OMP THREADPRIVATE(seuil_neb) |
13 |
|
|
|
14 |
|
|
INTEGER, SAVE :: niter_lscp=5 ! number of iterations to calculate autoconversion to precipitation |
15 |
|
|
!$OMP THREADPRIVATE(niter_lscp) |
16 |
|
|
|
17 |
|
|
INTEGER,SAVE :: iflag_evap_prec=1 ! precipitation evaporation flag. 0: nothing, 1: "old way", |
18 |
|
|
! 2: Max cloud fraction above to calculate the max of reevaporation |
19 |
|
|
! >=4: LTP'method i.e. evaporation in the clear-sky fraction of the mesh only |
20 |
|
|
! pay attention that iflag_evap_prec=4 may lead to unrealistic and overestimated |
21 |
|
|
! evaporation. Use 5 instead |
22 |
|
|
!$OMP THREADPRIVATE(iflag_evap_prec) |
23 |
|
|
|
24 |
|
|
REAL t_coup ! temperature threshold which determines the phase |
25 |
|
|
PARAMETER (t_coup=234.0) ! for which the saturation vapor pressure is calculated |
26 |
|
|
|
27 |
|
|
REAL DDT0 ! iteration parameter |
28 |
|
|
PARAMETER (DDT0=.01) |
29 |
|
|
|
30 |
|
|
REAL ztfondue ! parameter to calculate melting fraction of precipitation |
31 |
|
|
PARAMETER (ztfondue=278.15) |
32 |
|
|
|
33 |
|
|
REAL, SAVE :: rain_int_min=0.001 ! Minimum local rain intensity [mm/s] before the decrease in associated precipitation fraction |
34 |
|
|
!$OMP THREADPRIVATE(rain_int_min) |
35 |
|
|
|
36 |
|
|
REAL, SAVE :: a_tr_sca(4) ! Variables for tracers temporary: alpha parameter for scavenging, 4 possible scavenging processes |
37 |
|
|
!$OMP THREADPRIVATE(a_tr_sca) |
38 |
|
|
|
39 |
|
|
INTEGER, SAVE :: iflag_mpc_bl=0 ! flag to activate boundary layer mixed phase cloud param |
40 |
|
|
!$OMP THREADPRIVATE(iflag_mpc_bl) |
41 |
|
|
|
42 |
|
|
LOGICAL, SAVE :: ok_radocond_snow=.false. ! take into account the mass of ice precip in the cloud ice content seen by radiation |
43 |
|
|
!$OMP THREADPRIVATE(ok_radocond_snow) |
44 |
|
|
|
45 |
|
|
REAL, SAVE :: t_glace_min=258.0 ! lower-bound temperature parameter for cloud phase determination |
46 |
|
|
!$OMP THREADPRIVATE(t_glace_min) |
47 |
|
|
|
48 |
|
|
REAL, SAVE :: t_glace_max=273.15 ! upper-bound temperature parameter for cloud phase determination |
49 |
|
|
!$OMP THREADPRIVATE(t_glace_max) |
50 |
|
|
|
51 |
|
|
REAL, SAVE :: exposant_glace=1.0 ! parameter for cloud phase determination |
52 |
|
|
!$OMP THREADPRIVATE(exposant_glace) |
53 |
|
|
|
54 |
|
|
INTEGER, SAVE :: iflag_vice=0 ! which expression for ice crystall fall velocity |
55 |
|
|
!$OMP THREADPRIVATE(iflag_vice) |
56 |
|
|
|
57 |
|
|
INTEGER, SAVE :: iflag_t_glace=0 ! which expression for cloud phase partitioning |
58 |
|
|
!$OMP THREADPRIVATE(iflag_t_glace) |
59 |
|
|
|
60 |
|
|
INTEGER, SAVE :: iflag_cloudth_vert=0 ! option for determining cloud fraction and content in convective boundary layers |
61 |
|
|
!$OMP THREADPRIVATE(iflag_cloudth_vert) |
62 |
|
|
|
63 |
|
|
INTEGER, SAVE :: iflag_gammasat=0 ! which threshold for homogeneous nucleation below -40oC |
64 |
|
|
!$OMP THREADPRIVATE(iflag_gammasat) |
65 |
|
|
|
66 |
|
|
INTEGER, SAVE :: iflag_rain_incloud_vol=0 ! use of volume cloud fraction for rain autoconversion |
67 |
|
|
!$OMP THREADPRIVATE(iflag_rain_incloud_vol) |
68 |
|
|
|
69 |
|
|
INTEGER, SAVE :: iflag_bergeron=0 ! bergeron effect for liquid precipitation treatment |
70 |
|
|
!$OMP THREADPRIVATE(iflag_bergeron) |
71 |
|
|
|
72 |
|
|
INTEGER, SAVE :: iflag_fisrtilp_qsat=0 ! qsat adjustment (iterative) during autoconversion |
73 |
|
|
!$OMP THREADPRIVATE(iflag_fisrtilp_qsat) |
74 |
|
|
|
75 |
|
|
INTEGER, SAVE :: iflag_pdf=0 ! type of subgrid scale qtot pdf |
76 |
|
|
!$OMP THREADPRIVATE(iflag_pdf) |
77 |
|
|
|
78 |
|
|
INTEGER, SAVE :: iflag_autoconversion=0 ! autoconversion option |
79 |
|
|
!$OMP THREADPRIVATE(iflag_autoconversion) |
80 |
|
|
|
81 |
|
|
LOGICAL, SAVE :: reevap_ice=.false. ! no liquid precip for T< threshold |
82 |
|
|
!$OMP THREADPRIVATE(reevap_ice) |
83 |
|
|
|
84 |
|
|
REAL, SAVE :: cld_lc_lsc=2.6e-4 ! liquid autoconversion coefficient, stratiform rain |
85 |
|
|
!$OMP THREADPRIVATE(cld_lc_lsc) |
86 |
|
|
|
87 |
|
|
REAL, SAVE :: cld_lc_con=2.6e-4 ! liquid autoconversion coefficient, convective rain |
88 |
|
|
!$OMP THREADPRIVATE(cld_lc_con) |
89 |
|
|
|
90 |
|
|
REAL, SAVE :: cld_tau_lsc=3600. ! liquid autoconversion timescale, stratiform rain |
91 |
|
|
!$OMP THREADPRIVATE(cld_tau_lsc) |
92 |
|
|
|
93 |
|
|
REAL, SAVE :: cld_tau_con=3600. ! liquid autoconversion timescale, convective rain |
94 |
|
|
!$OMP THREADPRIVATE(cld_tau_con) |
95 |
|
|
|
96 |
|
|
REAL, SAVE :: cld_expo_lsc=2. ! liquid autoconversion threshold exponent, stratiform rain |
97 |
|
|
!$OMP THREADPRIVATE(cld_expo_lsc) |
98 |
|
|
|
99 |
|
|
REAL, SAVE :: cld_expo_con=2. ! liquid autoconversion threshold exponent, convective rain |
100 |
|
|
!$OMP THREADPRIVATE(cld_expo_con) |
101 |
|
|
|
102 |
|
|
REAL, SAVE :: ffallv_lsc=1. ! tuning coefficient crystal fall velocity, stratiform |
103 |
|
|
!$OMP THREADPRIVATE(ffallv_lsc) |
104 |
|
|
|
105 |
|
|
REAL, SAVE :: ffallv_con=1. ! tuning coefficient crystal fall velocity, convective |
106 |
|
|
!$OMP THREADPRIVATE(ffallv_con) |
107 |
|
|
|
108 |
|
|
REAL, SAVE :: coef_eva=2e-5 ! tuning coefficient liquid precip evaporation |
109 |
|
|
!$OMP THREADPRIVATE(coef_eva) |
110 |
|
|
|
111 |
|
|
REAL, SAVE :: coef_eva_i ! tuning coefficient ice precip sublimation |
112 |
|
|
!$OMP THREADPRIVATE(coef_eva_i) |
113 |
|
|
|
114 |
|
|
REAL cice_velo ! factor in the ice fall velocity formulation |
115 |
|
|
PARAMETER (cice_velo=1.645) |
116 |
|
|
|
117 |
|
|
REAL dice_velo ! exponent in the ice fall velocity formulation |
118 |
|
|
PARAMETER (dice_velo=0.16) |
119 |
|
|
|
120 |
|
|
REAL, SAVE :: dist_liq=300. ! typical deph of cloud-top liquid layer in mpcs |
121 |
|
|
!$OMP THREADPRIVATE(dist_liq) |
122 |
|
|
|
123 |
|
|
REAL, SAVE :: tresh_cl=0.0 ! cloud fraction threshold for cloud top search |
124 |
|
|
!$OMP THREADPRIVATE(tresh_cl) |
125 |
|
|
|
126 |
|
|
CONTAINS |
127 |
|
|
|
128 |
|
1 |
SUBROUTINE lscp_ini(dtime,ok_ice_sursat, RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, & |
129 |
|
|
RVTMP2_in, RTT_in,RD_in,RG_in) |
130 |
|
|
|
131 |
|
|
|
132 |
|
|
USE ioipsl_getin_p_mod, ONLY : getin_p |
133 |
|
|
USE print_control_mod, ONLY: prt_level, lunout |
134 |
|
|
USE ice_sursat_mod, ONLY: ice_sursat_init |
135 |
|
|
|
136 |
|
|
REAL, INTENT(IN) :: dtime |
137 |
|
|
LOGICAL, INTENT(IN) :: ok_ice_sursat |
138 |
|
|
|
139 |
|
|
REAL, INTENT(IN) :: RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in |
140 |
|
|
REAL, INTENT(IN) :: RVTMP2_in, RTT_in, RD_in, RG_in |
141 |
|
|
character (len=20) :: modname='lscp_ini_mod' |
142 |
|
|
character (len=80) :: abort_message |
143 |
|
|
|
144 |
|
|
|
145 |
|
1 |
RG=RG_in |
146 |
|
1 |
RD=RD_in |
147 |
|
1 |
RCPD=RCPD_in |
148 |
|
1 |
RLVTT=RLVTT_in |
149 |
|
1 |
RLSTT=RLSTT_in |
150 |
|
1 |
RLMLT=RLMLT_in |
151 |
|
1 |
RTT=RTT_in |
152 |
|
|
RG=RG_in |
153 |
|
1 |
RVTMP2=RVTMP2_in |
154 |
|
|
|
155 |
|
|
|
156 |
|
|
|
157 |
|
1 |
CALL getin_p('niter_lscp',niter_lscp) |
158 |
|
1 |
CALL getin_p('iflag_evap_prec',iflag_evap_prec) |
159 |
|
1 |
CALL getin_p('seuil_neb',seuil_neb) |
160 |
|
1 |
CALL getin_p('rain_int_min',rain_int_min) |
161 |
|
1 |
CALL getin_p('iflag_mpc_bl',iflag_mpc_bl) |
162 |
|
1 |
CALL getin_p('ok_radocond_snow',ok_radocond_snow) |
163 |
|
1 |
CALL getin_p('t_glace_max',t_glace_max) |
164 |
|
1 |
CALL getin_p('t_glace_min',t_glace_min) |
165 |
|
1 |
CALL getin_p('exposant_glace',exposant_glace) |
166 |
|
1 |
CALL getin_p('iflag_vice',iflag_vice) |
167 |
|
1 |
CALL getin_p('iflag_t_glace',iflag_t_glace) |
168 |
|
1 |
CALL getin_p('iflag_cloudth_vert',iflag_cloudth_vert) |
169 |
|
1 |
CALL getin_p('iflag_gammasat',iflag_gammasat) |
170 |
|
1 |
CALL getin_p('iflag_rain_incloud_vol',iflag_rain_incloud_vol) |
171 |
|
1 |
CALL getin_p('iflag_bergeron',iflag_bergeron) |
172 |
|
1 |
CALL getin_p('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat) |
173 |
|
1 |
CALL getin_p('iflag_pdf',iflag_pdf) |
174 |
|
1 |
CALL getin_p('reevap_ice',reevap_ice) |
175 |
|
1 |
CALL getin_p('cld_lc_lsc',cld_lc_lsc) |
176 |
|
1 |
CALL getin_p('cld_lc_con',cld_lc_con) |
177 |
|
1 |
CALL getin_p('cld_tau_lsc',cld_tau_lsc) |
178 |
|
1 |
CALL getin_p('cld_tau_con',cld_tau_con) |
179 |
|
1 |
CALL getin_p('cld_expo_lsc',cld_expo_lsc) |
180 |
|
1 |
CALL getin_p('cld_expo_con',cld_expo_con) |
181 |
|
1 |
CALL getin_p('ffallv_lsc',ffallv_lsc) |
182 |
|
1 |
CALL getin_p('ffallv_lsc',ffallv_con) |
183 |
|
1 |
CALL getin_p('coef_eva',coef_eva) |
184 |
|
1 |
coef_eva_i=coef_eva |
185 |
|
1 |
CALL getin_p('coef_eva_i',coef_eva_i) |
186 |
|
1 |
CALL getin_p('iflag_autoconversion',iflag_autoconversion) |
187 |
|
1 |
CALL getin_p('dist_liq',dist_liq) |
188 |
|
1 |
CALL getin_p('tresh_cl',tresh_cl) |
189 |
|
|
|
190 |
|
|
|
191 |
|
|
|
192 |
|
|
|
193 |
|
1 |
WRITE(lunout,*) 'lscp, niter_lscp:', niter_lscp |
194 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_evap_prec:', iflag_evap_prec |
195 |
|
1 |
WRITE(lunout,*) 'lscp, seuil_neb:', seuil_neb |
196 |
|
1 |
WRITE(lunout,*) 'lscp, rain_int_min:', rain_int_min |
197 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_mpc_bl:', iflag_mpc_bl |
198 |
|
1 |
WRITE(lunout,*) 'lscp, ok_radocond_snow:', ok_radocond_snow |
199 |
|
1 |
WRITE(lunout,*) 'lscp, t_glace_max:', t_glace_max |
200 |
|
1 |
WRITE(lunout,*) 'lscp, t_glace_min:', t_glace_min |
201 |
|
1 |
WRITE(lunout,*) 'lscp, exposant_glace:', exposant_glace |
202 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_vice:', iflag_vice |
203 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_t_glace:', iflag_t_glace |
204 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_cloudth_vert:', iflag_cloudth_vert |
205 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_gammasat:', iflag_gammasat |
206 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_rain_incloud_vol:', iflag_rain_incloud_vol |
207 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_bergeron:', iflag_bergeron |
208 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_fisrtilp_qsat:', iflag_fisrtilp_qsat |
209 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_pdf', iflag_pdf |
210 |
|
1 |
WRITE(lunout,*) 'lscp, reevap_ice', reevap_ice |
211 |
|
1 |
WRITE(lunout,*) 'lscp, cld_lc_lsc', cld_lc_lsc |
212 |
|
1 |
WRITE(lunout,*) 'lscp, cld_lc_con', cld_lc_con |
213 |
|
1 |
WRITE(lunout,*) 'lscp, cld_tau_lsc', cld_tau_lsc |
214 |
|
1 |
WRITE(lunout,*) 'lscp, cld_tau_con', cld_tau_con |
215 |
|
1 |
WRITE(lunout,*) 'lscp, cld_expo_lsc', cld_expo_lsc |
216 |
|
1 |
WRITE(lunout,*) 'lscp, cld_expo_con', cld_expo_con |
217 |
|
1 |
WRITE(lunout,*) 'lscp, ffallv_lsc', ffallv_lsc |
218 |
|
1 |
WRITE(lunout,*) 'lscp, ffallv_con', ffallv_con |
219 |
|
1 |
WRITE(lunout,*) 'lscp, coef_eva', coef_eva |
220 |
|
1 |
WRITE(lunout,*) 'lscp, coef_eva_i', coef_eva_i |
221 |
|
1 |
WRITE(lunout,*) 'lscp, iflag_autoconversion', iflag_autoconversion |
222 |
|
1 |
WRITE(lunout,*) 'lscp, dist_liq', dist_liq |
223 |
|
1 |
WRITE(lunout,*) 'lscp, tresh_cl', tresh_cl |
224 |
|
|
|
225 |
|
|
|
226 |
|
|
|
227 |
|
|
|
228 |
|
|
|
229 |
|
|
! check for precipitation sub-time steps |
230 |
✓✗ |
1 |
IF (ABS(dtime/REAL(niter_lscp)-360.0).GT.0.001) THEN |
231 |
|
1 |
WRITE(lunout,*) 'lscp: it is not expected, see Z.X.Li', dtime |
232 |
|
1 |
WRITE(lunout,*) 'I would prefer a 6 min sub-timestep' |
233 |
|
|
ENDIF |
234 |
|
|
|
235 |
|
|
! check consistency between numerical resolution of autoconversion |
236 |
|
|
! and other options |
237 |
|
|
|
238 |
✗✓ |
1 |
IF (iflag_autoconversion .EQ. 2) THEN |
239 |
|
|
IF ((iflag_vice .NE. 0) .OR. (niter_lscp .GT. 1)) THEN |
240 |
|
|
abort_message = 'in lscp, iflag_autoconversion=2 requires iflag_vice=0 and niter_lscp=1' |
241 |
|
|
CALL abort_physic (modname,abort_message,1) |
242 |
|
|
ENDIF |
243 |
|
|
ENDIF |
244 |
|
|
|
245 |
|
|
|
246 |
|
|
!AA Temporary initialisation |
247 |
|
1 |
a_tr_sca(1) = -0.5 |
248 |
|
1 |
a_tr_sca(2) = -0.5 |
249 |
|
1 |
a_tr_sca(3) = -0.5 |
250 |
|
1 |
a_tr_sca(4) = -0.5 |
251 |
|
|
|
252 |
✗✓ |
1 |
IF (ok_ice_sursat) CALL ice_sursat_init() |
253 |
|
|
|
254 |
|
|
|
255 |
|
|
|
256 |
|
1 |
end subroutine lscp_ini |
257 |
|
|
|
258 |
|
|
end module lscp_ini_mod |