5 SUBROUTINE fisrtilp_tr(dtime, paprs, pplay, t, q, ratqs, d_t, d_q, d_ql, &
 
    6     rneb, radliq, rain, snow, pfrac_impa, pfrac_nucl, pfrac_1nucl, frac_impa, &
 
    7     frac_nucl, prfl, psfl, rhcl) 
 
   90   REAL zqs(
klon), zdqs(
klon), zdelta, zcor, zcvm5
 
   91   REAL zrfl(
klon), zrfln(
klon), zqev, zqevt
 
   93   REAL ztglace, zt(
klon)
 
  116   REAL zprec_cond(
klon)
 
  126   fallv(zzz) = 3.29/2.0*((zzz)**0.16)
 
  130   DATA appel1er/.
true./
 
  134     WRITE (
lunout, *) 
'fisrtilp, calcrat:', calcrat
 
  135     WRITE (
lunout, *) 
'fisrtilp, ninter:', ninter
 
  136     WRITE (
lunout, *) 
'fisrtilp, evap_prec:', evap_prec
 
  137     WRITE (
lunout, *) 
'fisrtilp, cpartiel:', cpartiel
 
  138     IF (abs(dtime/
real(ninter)-360.0)>0.001) then
 
  139       WRITE (
lunout, *) 
'fisrtilp: Ce n est pas prevu, voir Z.X.Li', dtime
 
  140       WRITE (
lunout, *) 
'Je prefere un sous-intervalle de 6 minutes' 
  155         pfrac_nucl(i, k) = 1.
 
  156         pfrac_1nucl(i, k) = 1.
 
  157         pfrac_impa(i, k) = 1.
 
  230             zdelta = max(0., sign(1.,rtt-zt(i)))
 
  231             zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k)
 
  232             zqs(i) = min(0.5, zqs(i))
 
  233             zcor = 1./(1.-retv*zqs(i))
 
  236             IF (zt(i)<t_coup) 
THEN 
  237               zqs(i) = qsats(zt(i))/pplay(i, k)
 
  239               zqs(i) = qsatl(zt(i))/pplay(i, k)
 
  242           zqev = max(0.0, (zqs(i)-zq(i))*zneb(i))
 
  243           zqevt = coef_eva*(1.0-zq(i)/zqs(i))*sqrt(zrfl(i))* &
 
  244             (paprs(i,k)-paprs(i,k+1))/pplay(i, k)*zt(i)*rd/
rg 
  245           zqevt = max(0.0, min(zqevt,zrfl(i)))*
rg*dtime/ &
 
  246             (paprs(i,k)-paprs(i,k+1))
 
  247           zqev = min(zqev, zqevt)
 
  248           zrfln(i) = zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1))/
rg/dtime
 
  249           zq(i) = zq(i) - (zrfln(i)-zrfl(i))*(
rg/(paprs(i,k)-paprs(i, &
 
  251           zt(i) = zt(i) + (zrfln(i)-zrfl(i))*(
rg/(paprs(i,k)-paprs(i, &
 
  252             k+1)))*dtime*rlvtt/rcpd/(1.0+rvtmp2*zq(i))
 
  262         zdelta = max(0., sign(1.,rtt-zt(i)))
 
  263         zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
 
  264         zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zq(i))
 
  265         zqs(i) = r2es*foeew(zt(i), zdelta)/pplay(i, k)
 
  266         zqs(i) = min(0.5, zqs(i))
 
  267         zcor = 1./(1.-retv*zqs(i))
 
  269         zdqs(i) = foede(zt(i), zdelta, zcvm5, zqs(i), zcor)
 
  273         IF (zt(i)<t_coup) 
THEN 
  274           zqs(i) = qsats(zt(i))/pplay(i, k)
 
  275           zdqs(i) = dqsats(zt(i), zqs(i))
 
  277           zqs(i) = qsatl(zt(i))/pplay(i, k)
 
  278           zdqs(i) = dqsatl(zt(i), zqs(i))
 
  289         zdelq = ratqs(i, k)*zq(i)
 
  290         rneb(i, k) = (zq(i)+zdelq-zqs(i))/(2.0*zdelq)
 
  291         zqn(i) = (zq(i)+zdelq+zqs(i))/2.0
 
  292         IF (rneb(i,k)<=0.0) zqn(i) = 0.0
 
  293         IF (rneb(i,k)>=1.0) zqn(i) = zq(i)
 
  294         rneb(i, k) = max(0.0, min(1.0,rneb(i,k)))
 
  295         zcond(i) = max(0.0, zqn(i)-zqs(i))*rneb(i, k)/(1.+zdqs(i))
 
  298         rhcl(i, k) = (zqs(i)+zq(i)-zdelq)/2./zqs(i)
 
  299         IF (rneb(i,k)<=0.0) rhcl(i, k) = zq(i)/zqs(i)
 
  300         IF (rneb(i,k)>=1.0) rhcl(i, k) = 1.0
 
  306         IF (zq(i)>zqs(i)) 
THEN 
  311         zcond(i) = max(0.0, zq(i)-zqs(i))/(1.+zdqs(i))
 
  316       zq(i) = zq(i) - zcond(i)
 
  317       zt(i) = zt(i) + zcond(i)*rlvtt/rcpd
 
  323       IF (rneb(i,k)>0.0) 
THEN 
  325         zrho(i) = pplay(i, k)/zt(i)/rd
 
  326         zdz(i) = (paprs(i,k)-paprs(i,k+1))/(zrho(i)*
rg)
 
  327         zfice(i) = 1.0 - (zt(i)-ztglace)/(273.13-ztglace)
 
  328         zfice(i) = min(max(zfice(i),0.0), 1.0)
 
  329         zfice(i) = zfice(i)**nexpo
 
  330         zneb(i) = max(rneb(i,k), seuil_neb)
 
  331         radliq(i, k) = zoliq(i)/
real(ninter+1)
 
  337         IF (rneb(i,k)>0.0) 
THEN 
  338           zchau(i) = ct*dtime/
real(ninter)*zoliq(i)* &
 
  339             (1.0-exp(-(zoliq(i)/zneb(i)/cl)**2))*(1.-zfice(i))
 
  340           zrhol(i) = zrho(i)*zoliq(i)/zneb(i)
 
  341           zfroi(i) = dtime/
real(ninter)/zdz(i)*zoliq(i)*fallv(zrhol(i))* &
 
  343           ztot(i) = zchau(i) + zfroi(i)
 
  344           IF (zneb(i)==seuil_neb) ztot(i) = 0.0
 
  345           ztot(i) = min(max(ztot(i),0.0), zoliq(i))
 
  346           zoliq(i) = max(zoliq(i)-ztot(i), 0.0)
 
  347           radliq(i, k) = radliq(i, k) + zoliq(i)/
real(ninter+1)
 
  353       IF (rneb(i,k)>0.0) 
THEN 
  354         d_ql(i, k) = zoliq(i)
 
  355         zrfl(i) = zrfl(i) + max(zcond(i)-zoliq(i), 0.0)*(paprs(i,k)-paprs(i,k &
 
  368       d_q(i, k) = zq(i) - q(i, k)
 
  369       d_t(i, k) = zt(i) - t(i, k)
 
  376       zprec_cond(i) = max(zcond(i)-zoliq(i), 0.0)*(paprs(i,k)-paprs(i,k+1))/ &
 
  378       IF (rneb(i,k)>0.0 .AND. zprec_cond(i)>0.) 
THEN 
  380         IF (t(i,k)>=ztglace) 
THEN 
  381           zalpha_tr = a_tr_sca(3)
 
  383           zalpha_tr = a_tr_sca(4)
 
  385         zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(i)/zneb(i))
 
  386         pfrac_nucl(i, k) = pfrac_nucl(i, k)*(1.-zneb(i)*zfrac_lessi)
 
  387         frac_nucl(i, k) = 1. - zneb(i)*zfrac_lessi
 
  390         zfrac_lessi = 1. - exp(-zprec_cond(i)/zneb(i))
 
  391         pfrac_1nucl(i, k) = pfrac_1nucl(i, k)*(1.-zneb(i)*zfrac_lessi)
 
  399         IF (rneb(i,k)>0.0 .AND. zprec_cond(i)>0.) 
THEN 
  400           IF (t(i,kk)>=ztglace) 
THEN 
  401             zalpha_tr = a_tr_sca(1)
 
  403             zalpha_tr = a_tr_sca(2)
 
  405           zfrac_lessi = 1. - exp(zalpha_tr*zprec_cond(i)/zneb(i))
 
  406           pfrac_impa(i, kk) = pfrac_impa(i, kk)*(1.-zneb(i)*zfrac_lessi)
 
  407           frac_impa(i, kk) = 1. - zneb(i)*zfrac_lessi
 
  421     IF ((t(i,1)+d_t(i,1))<rtt) 
THEN 
subroutine fisrtilp_tr(dtime, paprs, pplay, t, q, ratqs, d_t, d_q, d_ql, rneb, radliq, rain, snow, pfrac_impa, pfrac_nucl, pfrac_1nucl, frac_impa, frac_nucl, prfl, psfl, rhcl)
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
 
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
 
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout