--- trunk/phylmd/fisrtilp.f 2014/03/05 14:57:53 82 +++ trunk/Sources/phylmd/fisrtilp.f 2016/09/01 10:30:53 207 @@ -12,13 +12,13 @@ ! First author: Z. X. Li (LMD/CNRS), 20 mars 1995 ! Other authors: Olivier, AA, IM, YM, MAF - ! Objet : condensation et précipitation stratiforme, schéma de - ! nuage, schéma de condensation à grande échelle (pluie). + ! Objet : condensation et pr\'ecipitation stratiforme, sch\'ema de + ! nuage, sch\'ema de condensation \`a grande \'echelle (pluie). USE comfisrtilp, ONLY: cld_lc_con, cld_lc_lsc, cld_tau_con, & cld_tau_lsc, coef_eva, ffallv_con, ffallv_lsc, iflag_pdf, reevap_ice USE dimphy, ONLY: klev, klon - USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats, thermcep + USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats USE numer_rec_95, ONLY: nr_erf USE suphec_m, ONLY: rcpd, rd, retv, rg, rlstt, rlvtt, rtt USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2 @@ -87,7 +87,8 @@ PARAMETER (t_coup=234.0) INTEGER i, k, n, kk - REAL zqs(klon), zdqs(klon), zdelta, zcor, zcvm5 + REAL zqs(klon), zdqs(klon), zcor, zcvm5 + logical zdelta REAL zrfl(klon), zrfln(klon), zqev, zqevt REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq REAL ztglace, zt(klon) @@ -112,14 +113,6 @@ ! Pour la conversion eau-neige REAL zlh_solid(klon), zm_solid - ! Fonctions en ligne: - - REAL fallvs, fallvc ! vitesse de chute pour crystaux de glace - REAL zzz - - fallvc(zzz) = 3.29/2.0*((zzz)**0.16)*ffallv_con - fallvs(zzz) = 3.29/2.0*((zzz)**0.16)*ffallv_lsc - !--------------------------------------------------------------- zdelq = 0.0 @@ -129,8 +122,8 @@ PRINT *, 'fisrtilp, evap_prec:', evap_prec PRINT *, 'fisrtilp, cpartiel:', cpartiel IF (abs(dtime / real(ninter) - 360.) > 0.001) THEN - PRINT *, "fisrtilp : ce n'est pas prévu, voir Z. X. Li", dtime - PRINT *, 'Je préfère un sous-intervalle de 6 minutes.' + PRINT *, "fisrtilp : ce n'est pas pr\'evu, voir Z. X. Li", dtime + PRINT *, "Je pr\'ef\`ere un sous-intervalle de 6 minutes." END IF appel1er = .FALSE. @@ -224,19 +217,10 @@ ! Calculer l'evaporation de la precipitation DO i = 1, klon IF (zrfl(i)>0.) THEN - IF (thermcep) THEN - zdelta = max(0., sign(1., rtt-zt(i))) - zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k) - zqs(i) = min(0.5, zqs(i)) - zcor = 1./(1.-retv*zqs(i)) - zqs(i) = zqs(i)*zcor - ELSE - IF (zt(i)= zt(i))/pplay(i, k) + zqs(i) = min(0.5, zqs(i)) + zcor = 1./(1.-retv*zqs(i)) + zqs(i) = zqs(i)*zcor zqev = max(0.0, (zqs(i)-zq(i))*zneb(i)) zqevt = coef_eva*(1.0-zq(i)/zqs(i))*sqrt(zrfl(i))* & (paprs(i, k)-paprs(i, k+1))/pplay(i, k)*zt(i)*rd/rg @@ -245,7 +229,7 @@ zqev = min(zqev, zqevt) zrfln(i) = zrfl(i) - zqev*(paprs(i, k)-paprs(i, k+1))/rg/dtime - ! pour la glace, on réévapore toute la précip dans la + ! pour la glace, on r\'e\'evapore toute la pr\'ecip dans la ! couche du dessous la glace venant de la couche du ! dessus est simplement dans la couche du dessous. @@ -262,28 +246,16 @@ ! Calculer Qs et L/Cp*dQs/dT: - IF (thermcep) THEN - DO i = 1, klon - zdelta = max(0., sign(1., rtt-zt(i))) - zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta - zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zq(i)) - zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k) - zqs(i) = min(0.5, zqs(i)) - zcor = 1./(1.-retv*zqs(i)) - zqs(i) = zqs(i)*zcor - zdqs(i) = foede(zt(i), zdelta, zcvm5, zqs(i), zcor) - END DO - ELSE - DO i = 1, klon - IF (zt(i)= zt(i) + zcvm5 = merge(r5ies*rlstt, r5les*rlvtt, zdelta) + zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zq(i)) + zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k) + zqs(i) = min(0.5, zqs(i)) + zcor = 1./(1.-retv*zqs(i)) + zqs(i) = zqs(i)*zcor + zdqs(i) = foede(zt(i), zdelta, zcvm5, zqs(i), zcor) + END DO ! Determiner la condensation partielle et calculer la quantite ! de l'eau condensee: @@ -295,8 +267,8 @@ ! zqn : eau totale dans le nuage ! zcond : eau condensee moyenne dans la maille. - ! on prend en compte le réchauffement qui diminue - ! la partie condensée + ! on prend en compte le r\'echauffement qui diminue + ! la partie condens\'ee ! Version avec les ratqs @@ -339,8 +311,8 @@ IF (rneb(i, k)<=0.0) zqn(i) = 0.0 IF (rneb(i, k)>=1.0) zqn(i) = zq(i) rneb(i, k) = max(0., min(1., rneb(i, k))) - ! On ne divise pas par 1 + zdqs pour forcer à avoir l'eau - ! prédite par la convection. Attention : il va falloir + ! On ne divise pas par 1 + zdqs pour forcer \`a avoir l'eau + ! pr\'edite par la convection. Attention : il va falloir ! verifier tout ca. zcond(i) = max(0., zqn(i)-zqs(i))*rneb(i, k) rhcl(i, k) = (zqs(i)+zq(i)-zdelq)/2./zqs(i) @@ -390,7 +362,7 @@ zcl(i) = cld_lc_lsc zct(i) = 1./cld_tau_lsc END IF - ! quantité d'eau à élminier. + ! quantit\'e d'eau \`a \'elminier. zchau(i) = zct(i)*dtime/real(ninter)*zoliq(i)* & (1.0-exp(-(zoliq(i)/zneb(i)/zcl(i))**2))*(1.-zfice(i)) ! meme chose pour la glace. @@ -491,6 +463,22 @@ END DO END DO + contains + + ! vitesse de chute pour cristaux de glace + + REAL function fallvs(zzz) + REAL, intent(in):: zzz + fallvs = 3.29/2.0*((zzz)**0.16)*ffallv_lsc + end function fallvs + + !******************************************************** + + real function fallvc(zzz) + REAL, intent(in):: zzz + fallvc = 3.29/2.0*((zzz)**0.16)*ffallv_con + end function fallvc + END SUBROUTINE fisrtilp end module fisrtilp_m