Changeset 4666 for LMDZ6/trunk/libf/phylmd/lmdz_lscp_old.F90
- Timestamp:
- Sep 3, 2023, 10:08:39 AM (10 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lmdz_lscp_old.F90
r4664 r4666 4 4 MODULE lmdz_lscp_old 5 5 CONTAINS 6 SUBROUTINE fisrtilp( dtime,paprs,pplay,t,q,ptconv,ratqs, &7 d_t, d_q, d_ql, d_qi, rneb, 6 SUBROUTINE fisrtilp(klon,klev,dtime,paprs,pplay,t,q,ptconv,ratqs, & 7 d_t, d_q, d_ql, d_qi, rneb,rneblsvol,radliq, rain, snow, & 8 8 pfrac_impa, pfrac_nucl, pfrac_1nucl, & 9 9 frac_impa, frac_nucl, beta, & 10 10 prfl, psfl, rhcl, zqta, fraca, & 11 11 ztv, zpspsk, ztla, zthl, iflag_cld_th, & 12 iflag_ice_thermo) 13 14 ! 15 USE dimphy 12 iflag_ice_thermo, & 13 cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv) 14 15 16 ! 16 17 USE icefrac_lsc_mod ! compute ice fraction (JBM 3/14) 17 USE print_control_mod, ONLY: prt_level, lunout18 18 USE lmdz_cloudth, only : cloudth, cloudth_v3, cloudth_v6 19 USE ioipsl_getin_p_mod, ONLY : getin_p 20 USE phys_local_var_mod, ONLY: ql_seri,qs_seri 21 USE phys_local_var_mod, ONLY: rneblsvol 22 ! flag to include modifications to ensure energy conservation (if flag >0) 23 USE add_phys_tend_mod, only : fl_cor_ebil 19 20 USE lmdz_lscp_ini, ONLY: prt_level, lunout 21 USE lmdz_lscp_ini, ONLY : fl_cor_ebil 24 22 USE lmdz_lscp_ini, ONLY: iflag_t_glace,t_glace_min, t_glace_max, exposant_glace 23 USE lmdz_lscp_ini, ONLY : seuil_neb, rain_int_min, iflag_evap_prec, iflag_oldbug_fisrtilp,a_tr_sca 25 24 USE lmdz_lscp_ini, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol 26 25 USE lmdz_lscp_ini, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con 27 26 USE lmdz_lscp_ini, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 28 27 USE lmdz_lscp_ini, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf 29 use phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv30 use phys_output_var_mod, ONLY : cloudth_sigmath,cloudth_sigmaenv31 28 32 29 … … 63 60 ! 64 61 REAL, INTENT(IN) :: dtime ! intervalle du temps (s) 62 INTEGER, INTENT(IN) :: klon, klev 65 63 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs ! pression a inter-couche 66 64 REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay ! pression au milieu de couche … … 87 85 REAL, DIMENSION(klon,klev), INTENT(OUT) :: d_ql ! incrementation de l'eau liquide 88 86 REAL, DIMENSION(klon,klev), INTENT(OUT) :: d_qi ! incrementation de l'eau glace 89 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneb ! fraction nuageuse87 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneb, rneblsvol ! fraction nuageuse 90 88 REAL, DIMENSION(klon,klev), INTENT(OUT) :: radliq ! eau liquide utilisee dans rayonnements 91 89 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rhcl ! humidite relative en ciel clair … … 107 105 REAL, DIMENSION(klon,klev), INTENT(OUT) :: frac_impa 108 106 REAL, DIMENSION(klon,klev), INTENT(OUT) :: frac_nucl 107 REAL, DIMENSION(klon,klev), INTENT(OUT) :: cloudth_sth,cloudth_senv 108 REAL, DIMENSION(klon,klev), INTENT(OUT) :: cloudth_sigmath,cloudth_sigmaenv 109 109 !AA 110 110 ! -------------------------------------------------------------------------------- … … 112 112 ! Options du programme: 113 113 ! 114 REAL, SAVE :: seuil_neb=0.001 ! un nuage existe vraiment au-dela 115 !$OMP THREADPRIVATE(seuil_neb) 116 117 !<LTP 118 REAL smallestreal 119 REAL, SAVE :: rain_int_min=0.001 !intensité locale minimum pour la pluie avant diminution de la fraction précipitante associée = 0.001 mm/s 120 !>LTP 121 !$OMP THREADPRIVATE(rain_int_min) 122 123 124 INTEGER ninter ! sous-intervals pour la precipitation 125 PARAMETER (ninter=5) 126 INTEGER,SAVE :: iflag_evap_prec=1 ! evaporation de la pluie 127 !$OMP THREADPRIVATE(iflag_evap_prec) 128 ! 129 LOGICAL cpartiel ! condensation partielle 130 PARAMETER (cpartiel=.TRUE.) 131 REAL t_coup 132 PARAMETER (t_coup=234.0) 133 REAL DDT0 134 PARAMETER (DDT0=.01) 135 REAL ztfondue 136 PARAMETER (ztfondue=278.15) 114 115 REAL :: smallestreal 116 117 INTEGER, PARAMETER :: ninter=5 ! sous-intervals pour la precipitation 118 LOGICAL, PARAMETER :: cpartiel=.TRUE. ! condensation partielle 119 REAL, PARAMETER :: t_coup=234.0 120 REAL, PARAMETER :: DDT0=.01 121 REAL, PARAMETER :: ztfondue=278.15 137 122 ! -------------------------------------------------------------------------------- 138 123 ! 139 124 ! Variables locales: 140 125 ! 141 INTEGER i, k, n, kk 142 INTEGER,save::itap=0 143 !$OMP THREADPRIVATE(itap) 144 145 REAL qsl, qsi 146 real zct ,zcl 147 INTEGER ncoreczq 148 REAL ctot(klon,klev) 149 REAL ctot_vol(klon,klev) 150 REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5 151 REAL zdqsdT_raw(klon) 152 REAL Tbef(klon),qlbef(klon),DT(klon),num,denom 153 154 logical lognormale(klon) 155 logical ice_thermo 156 LOGICAL convergence(klon) 157 INTEGER n_i(klon), iter 158 REAL cste 159 160 real zpdf_sig(klon),zpdf_k(klon),zpdf_delta(klon) 161 real Zpdf_a(klon),zpdf_b(klon),zpdf_e1(klon),zpdf_e2(klon) 162 real erf 163 REAL qcloud(klon) 126 INTEGER :: i, k, n, kk 127 REAL :: qsl, qsi 128 REAL :: zct ,zcl 129 INTEGER :: ncoreczq 130 REAL, DIMENSION(klon,klev) :: ctot,ctot_vol 131 REAL, DIMENSION(klon) :: zqs, zdqs, zdqsdT_raw, Tbef,qlbef,DT 132 REAL :: zdelta, zcor, zcvm5 133 REAL ::num,denom 134 135 LOGICAL, DIMENSION(klon) :: lognormale,convergence 136 LOGICAL :: ice_thermo 137 INTEGER, DIMENSION(klon) :: n_i 138 INTEGER :: iter 139 REAL :: cste 140 141 REAL, DIMENSION(klon) :: zpdf_sig,zpdf_k,zpdf_delta, Zpdf_a,zpdf_b,zpdf_e1,zpdf_e2, qcloud 142 REAL :: erf 164 143 165 REAL zrfl(klon), zrfln(klon), zqev, zqevt 166 !<LTP 167 REAL zrflclr(klon), zrflcld(klon) 168 REAL d_zrfl_clr_cld(klon), d_zifl_clr_cld(klon) 169 REAL d_zrfl_cld_clr(klon), d_zifl_cld_clr(klon) 170 !>LTP 171 172 REAL zifl(klon), zifln(klon), zqev0,zqevi, zqevti 173 !<LTP 174 REAL ziflclr(klon), ziflcld(klon) 175 !>LTP 176 REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq 177 REAL zoliqp(klon), zoliqi(klon) 178 REAL zt(klon) 144 REAL :: zqev, zqevt, zqev0,zqevi, zqevti, zdelq 145 REAL, DIMENSION(klon) :: zrfl(klon), zrfln(klon), zrflclr(klon), zrflcld(klon), d_zrfl_clr_cld(klon), d_zifl_clr_cld(klon), d_zrfl_cld_clr(klon), d_zifl_cld_clr(klon) 146 147 REAL, DIMENSION(klon) :: zifl, zifln, ziflclr, ziflcld, zoliq, zcond, zq, zqn, zoliqp, zoliqi, zt 179 148 ! JBM (3/14) nexpo is replaced by exposant_glace 180 149 ! REAL nexpo ! exponentiel pour glace/eau 181 150 ! INTEGER, PARAMETER :: nexpo=6 182 INTEGER exposant_glace_old 183 REAL t_glace_min_old 184 REAL zdz(klon),zrho(klon),ztot , zrhol(klon) 185 REAL zchau ,zfroi ,zfice(klon),zneb(klon),znebprecip(klon) 186 !<LTP 187 REAL znebprecipclr(klon), znebprecipcld(klon) 188 REAL tot_zneb(klon), tot_znebn(klon), d_tot_zneb(klon) 189 REAL d_znebprecip_clr_cld(klon), d_znebprecip_cld_clr(klon) 190 !>LTP 191 192 REAL zmelt, zpluie, zice 193 REAL dzfice(klon) 194 REAL zsolid 151 INTEGER :: exposant_glace_old 152 REAL :: t_glace_min_old, ztot 153 REAL, DIMENSION(klon) :: zdz,zrho , zrhol, zfice,zneb,znebprecip 154 REAL :: zchau ,zfroi 155 REAL, DIMENSION(klon) :: znebprecipclr, znebprecipcld, tot_zneb, tot_znebn, d_tot_zneb, d_znebprecip_clr_cld, d_znebprecip_cld_clr, dzfice 156 REAL :: zmelt, zpluie, zice 157 REAL :: zsolid 195 158 !!!! 196 159 ! Variables pour Bergeron 197 REAL zcp, coef1, DeltaT, Deltaq, Deltaqprecl198 REAL zqpreci(klon), zqprecl(klon)160 REAL :: zcp, coef1, DeltaT, Deltaq, Deltaqprecl 161 REAL, DIMENSION(klon) :: zqpreci, zqprecl 199 162 ! Variable pour conservation enegie des precipitations 200 REAL zmqc(klon) 201 ! 202 LOGICAL appel1er 203 SAVE appel1er 163 REAL, DIMENSION(klon) :: zmqc 164 ! 165 LOGICAL, SAVE :: appel1er=.TRUE. 204 166 !$OMP THREADPRIVATE(appel1er) 205 167 ! 206 168 ! iflag_oldbug_fisrtilp=0 enleve le BUG par JYG : tglace_min -> tglace_max 207 169 ! iflag_oldbug_fisrtilp=1 ajoute le BUG 208 INTEGER,SAVE :: iflag_oldbug_fisrtilp=0 !=0 sans bug209 !$OMP THREADPRIVATE(iflag_oldbug_fisrtilp)210 170 !--------------------------------------------------------------- 211 171 ! … … 214 174 !AA A priori on a 4 scavenging # possibles 215 175 ! 216 REAL a_tr_sca(4)217 save a_tr_sca218 !$OMP THREADPRIVATE(a_tr_sca)219 !220 176 ! Variables intermediaires 221 177 ! 222 REAL zalpha_tr 223 REAL zfrac_lessi 224 REAL zprec_cond(klon) 178 REAL :: zalpha_tr, zfrac_lessi 179 REAL, DIMENSION(klon) :: zprec_cond 225 180 !AA 226 181 ! RomP >>> 15 nov 2012 227 REAL beta(klon,klev)! taux de conversion de l'eau cond182 REAL, DIMENSION(klon,klev) :: beta ! taux de conversion de l'eau cond 228 183 ! RomP <<< 229 REAL zmair(klon), zcpair, zcpeau 184 REAL, DIMENSION(klon) :: zmair 185 REAL :: zcpair, zcpeau 230 186 ! Pour la conversion eau-neige 231 REAL zlh_solid(klon), zm_solid 187 REAL, DIMENSION(klon) :: zlh_solid 188 REAL :: zm_solid 232 189 !--------------------------------------------------------------- 233 190 ! 234 191 ! Fonctions en ligne: 235 192 ! 236 REAL fallvs,fallvc ! Vitesse de chute pour cristaux de glace193 REAL :: fallvs,fallvc ! Vitesse de chute pour cristaux de glace 237 194 ! (Heymsfield & Donner, 1990) 238 195 REAL zzz … … 242 199 fallvs (zzz) = 3.29/2.0 * ((zzz)**0.16) * ffallv_lsc 243 200 ! 244 DATA appel1er /.TRUE./245 201 !ym 246 202 !CR: pour iflag_ice_thermo=2, on active que la convection … … 248 204 249 205 250 itap=itap+1251 206 znebprecip(:)=0. 252 207 … … 264 219 if (prt_level>9)write(lunout,*)'NUAGES4 A. JAM' 265 220 IF (appel1er) THEN 266 CALL getin_p('iflag_oldbug_fisrtilp',iflag_oldbug_fisrtilp)267 CALL getin_p('iflag_evap_prec',iflag_evap_prec)268 CALL getin_p('seuil_neb',seuil_neb)269 !<LTP270 CALL getin_p('rain_int_min',rain_int_min)271 !>LTP272 write(lunout,*)' iflag_oldbug_fisrtilp =',iflag_oldbug_fisrtilp273 !274 221 WRITE(lunout,*) 'fisrtilp, ninter:', ninter 275 WRITE(lunout,*) 'fisrtilp, iflag_evap_prec:', iflag_evap_prec276 !<LTP277 WRITE(lunout,*) 'fisrtilp, rain_int_min:', rain_int_min278 !>LTP279 222 WRITE(lunout,*) 'fisrtilp, cpartiel:', cpartiel 280 223 WRITE(lunout,*) 'FISRTILP VERSION LUDO' … … 286 229 ENDIF 287 230 appel1er = .FALSE. 288 !289 !AA initialiation provisoire290 a_tr_sca(1) = -0.5291 a_tr_sca(2) = -0.5292 a_tr_sca(3) = -0.5293 a_tr_sca(4) = -0.5294 !295 !AA Initialisation a 1 des coefs des fractions lessivees296 231 ! 297 232 !cdir collapse … … 416 351 ! - zmqc: masse de precip qui doit etre thermalisee 417 352 ! 418 IF(k.LE.klev m1) THEN353 IF(k.LE.klev-1) THEN 419 354 DO i = 1, klon 420 355 !IM … … 437 372 end if 438 373 ENDDO 439 ELSE ! IF(k.LE.klev m1)374 ELSE ! IF(k.LE.klev-1) 440 375 DO i = 1, klon 441 376 zmair(i)=(paprs(i,k)-paprs(i,k+1))/RG 442 377 zmqc(i) = 0. 443 378 ENDDO 444 ENDIF ! end IF(k.LE.klev m1)379 ENDIF ! end IF(k.LE.klev-1) 445 380 ! 446 381 ! ---------------------------------------------------------------- … … 698 633 !>LTP 699 634 700 701 ! print*,'REEVAP ',itap,k,znebprecip(1),zqev0,zqev,zqevi,zrfl(1)702 635 703 636 !CR ATTENTION: deplacement de la fonte de la glace
Note: See TracChangeset
for help on using the changeset viewer.