--- trunk/phylmd/fisrtilp.f 2014/03/05 14:57:53 82 +++ trunk/Sources/phylmd/fisrtilp.f 2015/04/29 15:47:56 134 @@ -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 @@ -225,8 +218,7 @@ 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) = r2es*foeew(zt(i), rtt >= zt(i))/pplay(i, k) zqs(i) = min(0.5, zqs(i)) zcor = 1./(1.-retv*zqs(i)) zqs(i) = zqs(i)*zcor @@ -264,8 +256,8 @@ IF (thermcep) THEN DO i = 1, klon - zdelta = max(0., sign(1., rtt-zt(i))) - zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta + zdelta = rtt >= 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)) @@ -491,6 +483,20 @@ END DO END DO + contains + + ! vitesse de chute pour crystaux de glace + + REAL function fallvs(zzz) + REAL zzz + fallvs = 3.29/2.0*((zzz)**0.16)*ffallv_lsc + end function fallvs + + real function fallvc(zzz) + REAL zzz + fallvc = 3.29/2.0*((zzz)**0.16)*ffallv_con + end function fallvc + END SUBROUTINE fisrtilp end module fisrtilp_m