GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/lscp_ini_mod.F90 Lines: 82 85 96.5 %
Date: 2023-06-30 12:51:15 Branches: 3 10 30.0 %

Line Branch Exec Source
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