source: LMDZ6/branches/Test_modipsl/libf/phylmd/lscp_ini_mod.F90 @ 5456

Last change on this file since 5456 was 4563, checked in by evignon, 19 months ago

correction de l'evaporation max dans la param d'evaporation des precips
de ludo

File size: 10.5 KB
Line 
1module lscp_ini_mod
2
3implicit 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
126CONTAINS
127
128SUBROUTINE 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    RG=RG_in
146    RD=RD_in
147    RCPD=RCPD_in
148    RLVTT=RLVTT_in
149    RLSTT=RLSTT_in
150    RLMLT=RLMLT_in
151    RTT=RTT_in
152    RG=RG_in
153    RVTMP2=RVTMP2_in
154
155
156
157    CALL getin_p('niter_lscp',niter_lscp)
158    CALL getin_p('iflag_evap_prec',iflag_evap_prec)
159    CALL getin_p('seuil_neb',seuil_neb)
160    CALL getin_p('rain_int_min',rain_int_min)
161    CALL getin_p('iflag_mpc_bl',iflag_mpc_bl)
162    CALL getin_p('ok_radocond_snow',ok_radocond_snow)
163    CALL getin_p('t_glace_max',t_glace_max)
164    CALL getin_p('t_glace_min',t_glace_min)
165    CALL getin_p('exposant_glace',exposant_glace)
166    CALL getin_p('iflag_vice',iflag_vice)
167    CALL getin_p('iflag_t_glace',iflag_t_glace)
168    CALL getin_p('iflag_cloudth_vert',iflag_cloudth_vert)
169    CALL getin_p('iflag_gammasat',iflag_gammasat)
170    CALL getin_p('iflag_rain_incloud_vol',iflag_rain_incloud_vol)
171    CALL getin_p('iflag_bergeron',iflag_bergeron)
172    CALL getin_p('iflag_fisrtilp_qsat',iflag_fisrtilp_qsat)
173    CALL getin_p('iflag_pdf',iflag_pdf)
174    CALL getin_p('reevap_ice',reevap_ice)
175    CALL getin_p('cld_lc_lsc',cld_lc_lsc)
176    CALL getin_p('cld_lc_con',cld_lc_con)
177    CALL getin_p('cld_tau_lsc',cld_tau_lsc)
178    CALL getin_p('cld_tau_con',cld_tau_con)
179    CALL getin_p('cld_expo_lsc',cld_expo_lsc)
180    CALL getin_p('cld_expo_con',cld_expo_con)
181    CALL getin_p('ffallv_lsc',ffallv_lsc)
182    CALL getin_p('ffallv_lsc',ffallv_con)
183    CALL getin_p('coef_eva',coef_eva)
184    coef_eva_i=coef_eva
185    CALL getin_p('coef_eva_i',coef_eva_i)
186    CALL getin_p('iflag_autoconversion',iflag_autoconversion)
187    CALL getin_p('dist_liq',dist_liq)
188    CALL getin_p('tresh_cl',tresh_cl)
189
190
191
192
193    WRITE(lunout,*) 'lscp, niter_lscp:', niter_lscp
194    WRITE(lunout,*) 'lscp, iflag_evap_prec:', iflag_evap_prec
195    WRITE(lunout,*) 'lscp, seuil_neb:', seuil_neb
196    WRITE(lunout,*) 'lscp, rain_int_min:', rain_int_min
197    WRITE(lunout,*) 'lscp, iflag_mpc_bl:', iflag_mpc_bl
198    WRITE(lunout,*) 'lscp, ok_radocond_snow:', ok_radocond_snow
199    WRITE(lunout,*) 'lscp, t_glace_max:', t_glace_max
200    WRITE(lunout,*) 'lscp, t_glace_min:', t_glace_min
201    WRITE(lunout,*) 'lscp, exposant_glace:', exposant_glace
202    WRITE(lunout,*) 'lscp, iflag_vice:', iflag_vice
203    WRITE(lunout,*) 'lscp, iflag_t_glace:', iflag_t_glace
204    WRITE(lunout,*) 'lscp, iflag_cloudth_vert:', iflag_cloudth_vert
205    WRITE(lunout,*) 'lscp, iflag_gammasat:', iflag_gammasat
206    WRITE(lunout,*) 'lscp, iflag_rain_incloud_vol:', iflag_rain_incloud_vol
207    WRITE(lunout,*) 'lscp, iflag_bergeron:', iflag_bergeron
208    WRITE(lunout,*) 'lscp, iflag_fisrtilp_qsat:', iflag_fisrtilp_qsat
209    WRITE(lunout,*) 'lscp, iflag_pdf', iflag_pdf
210    WRITE(lunout,*) 'lscp, reevap_ice', reevap_ice
211    WRITE(lunout,*) 'lscp, cld_lc_lsc', cld_lc_lsc
212    WRITE(lunout,*) 'lscp, cld_lc_con', cld_lc_con
213    WRITE(lunout,*) 'lscp, cld_tau_lsc', cld_tau_lsc
214    WRITE(lunout,*) 'lscp, cld_tau_con', cld_tau_con
215    WRITE(lunout,*) 'lscp, cld_expo_lsc', cld_expo_lsc
216    WRITE(lunout,*) 'lscp, cld_expo_con', cld_expo_con
217    WRITE(lunout,*) 'lscp, ffallv_lsc', ffallv_lsc
218    WRITE(lunout,*) 'lscp, ffallv_con', ffallv_con
219    WRITE(lunout,*) 'lscp, coef_eva', coef_eva
220    WRITE(lunout,*) 'lscp, coef_eva_i', coef_eva_i
221    WRITE(lunout,*) 'lscp, iflag_autoconversion', iflag_autoconversion
222    WRITE(lunout,*) 'lscp, dist_liq', dist_liq
223    WRITE(lunout,*) 'lscp, tresh_cl', tresh_cl
224
225
226
227
228
229    ! check for precipitation sub-time steps
230    IF (ABS(dtime/REAL(niter_lscp)-360.0).GT.0.001) THEN
231        WRITE(lunout,*) 'lscp: it is not expected, see Z.X.Li', dtime
232        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    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    a_tr_sca(1) = -0.5
248    a_tr_sca(2) = -0.5
249    a_tr_sca(3) = -0.5
250    a_tr_sca(4) = -0.5
251   
252    IF (ok_ice_sursat) CALL ice_sursat_init()
253
254
255
256end subroutine lscp_ini
257
258end module lscp_ini_mod
Note: See TracBrowser for help on using the repository browser.