4 SUBROUTINE conccm(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, rain, snow, &
 
   42   REAL zlvdcp, zlsdcp, zdelta, zz, za, zb
 
   51   INTEGER ibas_bis(
klon)
 
   52   INTEGER itop_bis(
klon)
 
   74       pt(i, k) = t(i, 
klev-k+1)
 
   75       pq(i, k) = q(i, 
klev-k+1)
 
   76       pres(i, k) = pplay(i, 
klev-k+1)
 
   77       dp(i, k) = paprs(i, 
klev+1-k) - paprs(i, 
klev+1-k+1)
 
   81     zgeom(i, 
klev) = rd*t(i, 1)/(0.5*(paprs(i,1)+pplay(i, &
 
   82       1)))*(paprs(i,1)-pplay(i,1))
 
   86       zgeom(i, 
klev+1-k) = zgeom(i, 
klev+1-k+1) + rd*0.5*(t(i,k-1)+t(i,k))/ &
 
   87         paprs(i, k)*(pplay(i,k-1)-pplay(i,k))
 
   91   CALL cmfmca(dtime, pres, dp, zgeom, pt, pq, cmfprt, cmfprs, ntop, nbas)
 
   95       d_q(i, 
klev+1-k) = pq(i, k) - q(i, 
klev+1-k)
 
   96       d_t(i, 
klev+1-k) = pt(i, k) - t(i, 
klev+1-k)
 
  101     rain(i) = cmfprt(i)*rhoh2o
 
  102     snow(i) = cmfprs(i)*rhoh2o
 
  103     kbascm(i) = 
klev + 1 - nbas(i)
 
  104     ktopcm(i) = 
klev + 1 - ntop(i)
 
  108     CALL conkuo(dtime, paprs, pplay, t, q, conv_q, d_t_bis, d_q_bis, &
 
  109       d_ql_bis, rneb_bis, rain_bis, snow_bis, ibas_bis, itop_bis)
 
  112         d_t(i, k) = d_t(i, k) + d_t_bis(i, k)
 
  113         d_q(i, k) = d_q(i, k) + d_q_bis(i, k)
 
  117       rain(i) = rain(i) + rain_bis(i)
 
  118       snow(i) = snow(i) + snow_bis(i)
 
  119       kbascm(i) = min(kbascm(i), ibas_bis(i))
 
  120       ktopcm(i) = max(ktopcm(i), itop_bis(i))
 
  124         zlvdcp = rlvtt/rcpd/(1.0+rvtmp2*q(i,k))
 
  125         zlsdcp = rlstt/rcpd/(1.0+rvtmp2*q(i,k))
 
  126         zdelta = max(0., sign(1.,rtt-t(i,k)))
 
  129         za = -max(0.0, zz)*(zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
 
  130         d_t(i, k) = d_t(i, k) + za
 
  131         d_q(i, k) = d_q(i, k) + zb
 
  138 SUBROUTINE cmfmca(deltat, p, dp, gz, tb, shb, cmfprt, cmfprs, cnt, cnb)
 
  173   REAL cmrp(
klon, pcnst) 
 
  287   REAL tmp1, tmp2, tmp3, tmp4
 
  288   REAL zx_t, zx_p, zx_q, zx_qs, zx_gam
 
  289   REAL zcor, zdelta, zcvm5
 
  291   REAL qhalf, sh1, sh2, shbs1, shbs2
 
  295   qhalf(sh1, sh2, shbs1, shbs2) = min(max(sh1,sh2), &
 
  296     (shbs2*sh1+shbs1*sh2)/(shbs1+shbs2))
 
  325   cats = max(dt, cmftau)
 
  335       zdelta = max(0., sign(1.,rtt-zx_t))
 
  336       zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
 
  337       zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zx_q)
 
  338       zx_qs = r2es*foeew(zx_t, zdelta)/zx_p
 
  339       zx_qs = min(0.5, zx_qs)
 
  340       zcor = 1./(1.-retv*zx_qs)
 
  342       zx_gam = foede(zx_t, zdelta, zcvm5, zx_qs, zcor)
 
  350       sb(i, k) = rcpd*tb(i, k) + gz(i, k)
 
  351       hb(i, k) = sb(i, k) + rlvtt*shb(i, k)
 
  352       hbs(i, k) = sb(i, k) + rlvtt*shbs(i, k)
 
  358   DO k = limcnv + 1, 
klev 
  361       sbh(i, k) = 0.5*(sb(i,km1)+sb(i,k))
 
  362       shbh(i, k) = qhalf(shb(i,km1), shb(i,k), shbs(i,km1), shbs(i,k))
 
  363       hbh(i, k) = sbh(i, k) + rlvtt*shbh(i, k)
 
  370     sbh(i, limcnv) = sb(i, limcnv)
 
  371     shbh(i, limcnv) = shb(i, limcnv)
 
  372     hbh(i, limcnv) = hb(i, limcnv)
 
  398   DO k = 
klev - 1, limcnv + 1, -1
 
  426       pblhgt = max(pblh(i), 1.0)
 
  427       IF (gz(i,kp1)/
rg<=pblhgt .AND. dzcld(i)==0.0) 
THEN 
  428         fac1 = max(0.0, 1.0-gz(i,kp1)/
rg/pblhgt)
 
  429         tprime = min(thtap(i), tpmax)*fac1
 
  430         qsattp = shbs(i, kp1) + rcpd/rlvtt*gam(i, kp1)*tprime
 
  431         shprme = min(min(shp(i),shpmax)*fac1, max(qsattp-shb(i,kp1),0.0))
 
  432         qprime = max(qprime, shprme)
 
  440       sc(i) = sb(i, kp1) + rcpd*tprime
 
  441       shc(i) = shb(i, kp1) + qprime
 
  442       hc(i) = sc(i) + rlvtt*shc(i)
 
  443       flotab(i) = hc(i) - hbs(i, k)
 
  444       dz = dp(i, k)*rd*tb(i, k)/
rg/p(i, k)
 
  445       IF (flotab(i)>0.0) 
THEN 
  446         dzcld(i) = dzcld(i) + dz
 
  456       IF (flotab(i)>0.0) 
THEN 
  473     IF (k<=limcnv+1) 
THEN 
  476           cldwtr(i) = sb(i, k) - sc(i) + flotab(i)/(1.0+gam(i,k))
 
  477           cldwtr(i) = max(0.0, cldwtr(i))
 
  491         cldwtr(i) = sb(i, k) - sc(i) + flotab(i)/(1.0+gam(i,k))
 
  492         cldwtr(i) = max(0.0, cldwtr(i))
 
  493         betamx = 1.0 - c0*max(0.0, (dzcld(i)-dzmin))
 
  494         b1 = (hc(i)-hbs(i,km1))*dp(i, km1)
 
  495         b2 = (hc(i)-hbs(i,k))*dp(i, k)
 
  496         beta(i) = max(betamn, min(betamx,1.0+b1/b2))
 
  497         IF (hbs(i,km1)<=hb(i,km1)) beta(i) = 0.0
 
  509         tmp1 = (1.0+gam(i,k))*(sc(i)-sbh(i,kp1)+cldwtr(i)) - &
 
  510           (hbh(i,kp1)-hc(i))*dp(i, k)/dp(i, kp1)
 
  511         tmp2 = (1.0+gam(i,k))*(sc(i)-sbh(i,k))
 
  512         IF ((beta(i)*tmp2-tmp1)>0.0) 
THEN 
  513           betamx = 0.99*(tmp1/tmp2)
 
  514           beta(i) = max(0.0, min(betamx,beta(i)))
 
  523         IF (hb(i,km1)<hbs(i,km1)) 
THEN 
  524           tmp1 = (1.0+gam(i,k))*(sc(i)-sbh(i,kp1)+cldwtr(i)) - &
 
  525             (hbh(i,kp1)-hc(i))*dp(i, k)/dp(i, kp1)
 
  527           tmp2 = gam(i, km1)*(sbh(i,k)-sc(i)+cldwtr(i)) - hbh(i, k) + hc(i) - &
 
  529           tmp3 = (1.0+gam(i,k))*(sc(i)-sbh(i,k))/dp(i, k)
 
  530           tmp4 = (dt/cats)*(hc(i)-hbs(i,k))*tmp2/(dp(i,km1)*(hbs(i,km1)-hb(i, &
 
  532           IF ((beta(i)*tmp4-tmp1)>0.0) 
THEN 
  533             betamx = ssfac*(tmp1/tmp4)
 
  534             beta(i) = max(0.0, min(betamx,beta(i)))
 
  544         g = min(0.0, hb(i,k)-hb(i,km1))
 
  545         tmp3 = (hb(i,k)-hb(i,km1)-g)*(cats/dt)/(hc(i)-hbs(i,k))
 
  546         tmp1 = (1.0+gam(i,k))*(sc(i)-sbh(i,kp1)+cldwtr(i)) - &
 
  547           (hbh(i,kp1)-hc(i))*dp(i, k)/dp(i, kp1)
 
  549         tmp1 = tmp3*tmp1 + (hc(i)-hbh(i,kp1))/dp(i, k)
 
  550         tmp2 = tmp3*(1.0+gam(i,k))*(sc(i)-sbh(i,k))/dp(i, k) + &
 
  551           (hc(i)-hbh(i,k)-cldwtr(i))*(1.0/dp(i,k)+1.0/dp(i,kp1))
 
  552         IF ((beta(i)*tmp2-tmp1)>0.0) 
THEN 
  554           IF (tmp2/=0.0) betamx = tmp1/tmp2
 
  555           beta(i) = max(0.0, min(betamx,beta(i)))
 
  572         beta(i) = max(0.0, beta(i))
 
  573         tmp1 = hc(i) - hbs(i, k)
 
  574         tmp2 = ((1.0+gam(i,k))*(sc(i)-sbh(i,kp1)+cldwtr(i))-beta(i)*(1.0+gam( &
 
  575           i,k))*(sc(i)-sbh(i,k)))/dp(i, k) - (hbh(i,kp1)-hc(i))/dp(i, kp1)
 
  576         eta(i) = tmp1/(tmp2*
rg*cats)
 
  577         tmass = min(dp(i,k), dp(i,kp1))/
rg 
  578         IF (eta(i)>tmass*rdt .OR. eta(i)<=0.0) eta(i) = 0.0
 
  582         IF (shc(i)-shbh(i,k)<0.0 .AND. beta(i)*eta(i)/=0.0) 
THEN 
  583           denom = eta(i)*
rg*dt*(shc(i)-shbh(i,k))/dp(i, km1)
 
  584           beta(i) = max(0.0, min(-0.999*shb(i,km1)/denom,beta(i)))
 
  589         qtest1 = shb(i, k) + eta(i)*
rg*dt*((shc(i)-shbh(i, &
 
  590           kp1))-(1.0-beta(i))*cldwtr(i)/rlvtt-beta(i)*(shc(i)-shbh(i, &
 
  592         IF (qtest1<=0.0) eta(i) = 0.0
 
  596         fac1 = -(shbh(i,kp1)-shc(i))/dp(i, kp1)
 
  597         qtest2 = shb(i, kp1) - eta(i)*
rg*dt*fac1
 
  599           eta(i) = 0.99*shb(i, kp1)/(
rg*dt*fac1)
 
  609         etagdt = eta(i)*
rg*dt
 
  610         cldwtr(i) = etagdt*cldwtr(i)/rlvtt/
rg 
  611         rnwtr(i) = (1.0-beta(i))*cldwtr(i)
 
  612         ds1(i) = etagdt*(sbh(i,kp1)-sc(i))/dp(i, kp1)
 
  613         dq1(i) = etagdt*(shbh(i,kp1)-shc(i))/dp(i, kp1)
 
  614         ds2(i) = (etagdt*(sc(i)-sbh(i,kp1))+rlvtt*
rg*cldwtr(i)-beta(i)*etagdt &
 
  615           *(sc(i)-sbh(i,k)))/dp(i, k)
 
  616         dq2(i) = (etagdt*(shc(i)-shbh(i,kp1))-
rg*rnwtr(i)-beta(i)*etagdt*(shc &
 
  617           (i)-shbh(i,k)))/dp(i, k)
 
  618         ds3(i) = beta(i)*(etagdt*(sc(i)-sbh(i,k))-rlvtt*
rg*cldwtr(i))/dp(i, &
 
  620         dq3(i) = beta(i)*etagdt*(shc(i)-shbh(i,k))/dp(i, km1)
 
  624         fslkp = eta(i)*(sc(i)-sbh(i,kp1))
 
  625         fslkm = beta(i)*(eta(i)*(sc(i)-sbh(i,k))-rlvtt*cldwtr(i)*rdt)
 
  626         fqlkp = eta(i)*(shc(i)-shbh(i,kp1))
 
  627         fqlkm = beta(i)*eta(i)*(shc(i)-shbh(i,k))
 
  632         tb(i, kp1) = tb(i, kp1) + ds1(i)/rcpd
 
  633         tb(i, k) = tb(i, k) + ds2(i)/rcpd
 
  634         tb(i, km1) = tb(i, km1) + ds3(i)/rcpd
 
  635         shb(i, kp1) = shb(i, kp1) + dq1(i)
 
  636         shb(i, k) = shb(i, k) + dq2(i)
 
  637         shb(i, km1) = shb(i, km1) + dq3(i)
 
  638         prec(i) = prec(i) + rnwtr(i)/rhoh2o
 
  645         cmfdt(i, kp1) = cmfdt(i, kp1) + ds1(i)/rcpd*rdt
 
  646         cmfdt(i, k) = cmfdt(i, k) + ds2(i)/rcpd*rdt
 
  647         cmfdt(i, km1) = cmfdt(i, km1) + ds3(i)/rcpd*rdt
 
  648         cmfdq(i, kp1) = cmfdq(i, kp1) + dq1(i)*rdt
 
  649         cmfdq(i, k) = cmfdq(i, k) + dq2(i)*rdt
 
  650         cmfdq(i, km1) = cmfdq(i, km1) + dq3(i)*rdt
 
  651         cmfdqr(i, k) = cmfdqr(i, k) + (
rg*rnwtr(i)/dp(i,k))*rdt
 
  652         cmfmc(i, kp1) = cmfmc(i, kp1) + eta(i)
 
  653         cmfmc(i, k) = cmfmc(i, k) + beta(i)*eta(i)
 
  654         cmfsl(i, kp1) = cmfsl(i, kp1) + fslkp
 
  655         cmfsl(i, k) = cmfsl(i, k) + fslkm
 
  656         cmflq(i, kp1) = cmflq(i, kp1) + rlvtt*fqlkp
 
  657         cmflq(i, k) = cmflq(i, k) + rlvtt*fqlkm
 
  658         qc(i, k) = (
rg*rnwtr(i)/dp(i,k))*rdt
 
  671           IF ((cmrb(i,kp1,m)<0.0) .OR. (cmrb(i,k,m)<0.0) .OR. (cmrb(i,km1, &
 
  676           cmrh(i, k) = 0.5*(cmrb(i,km1,m)+cmrb(i,k,m))
 
  677           cmrh(i, kp1) = 0.5*(cmrb(i,k,m)+cmrb(i,kp1,m))
 
  681           pblhgt = max(pblh(i), 1.0)
 
  682           IF (gz(i,kp1)/
rg<=pblhgt .AND. dzcld(i)==0.) 
THEN 
  683             fac1 = max(0.0, 1.0-gz(i,kp1)/
rg/pblhgt)
 
  684             cmrc(i) = cmrb(i, kp1, m) + cmrp(i, m)*fac1
 
  686             cmrc(i) = cmrb(i, kp1, m)
 
  694           etagdt = eta(i)*
rg*dt
 
  695           botflx = etagdt*(cmrc(i)-cmrh(i,kp1))
 
  696           topflx = beta(i)*etagdt*(cmrc(i)-cmrh(i,k))
 
  697           dcmr1(i) = -botflx/dp(i, kp1)
 
  702           IF (cmrb(i,kp1,m)+dcmr1(i)<0.0) 
THEN 
  703             efac1 = max(tiny, abs(cmrb(i,kp1,m)/dcmr1(i))-eps)
 
  706           IF (efac1==tiny .OR. efac1>1.0) efac1 = 0.0
 
  707           dcmr1(i) = -efac1*botflx/dp(i, kp1)
 
  708           dcmr2(i) = (efac1*botflx-topflx)/dp(i, k)
 
  710           IF (cmrb(i,k,m)+dcmr2(i)<0.0) 
THEN 
  711             efac2 = max(tiny, abs(cmrb(i,k,m)/dcmr2(i))-eps)
 
  714           IF (efac2==tiny .OR. efac2>1.0) efac2 = 0.0
 
  715           dcmr2(i) = (efac1*botflx-efac2*topflx)/dp(i, k)
 
  716           dcmr3(i) = efac2*topflx/dp(i, km1)
 
  718           IF (cmrb(i,km1,m)+dcmr3(i)<0.0) 
THEN 
  719             efac3 = max(tiny, abs(cmrb(i,km1,m)/dcmr3(i))-eps)
 
  722           IF (efac3==tiny .OR. efac3>1.0) efac3 = 0.0
 
  723           efac3 = min(efac2, efac3)
 
  724           dcmr2(i) = (efac1*botflx-efac3*topflx)/dp(i, k)
 
  725           dcmr3(i) = efac3*topflx/dp(i, km1)
 
  727           cmrb(i, kp1, m) = cmrb(i, kp1, m) + dcmr1(i)
 
  728           cmrb(i, k, m) = cmrb(i, k, m) + dcmr2(i)
 
  729           cmrb(i, km1, m) = cmrb(i, km1, m) + dcmr3(i)
 
  734     IF (k==limcnv+1) 
GO TO 60 
 
  745         zdelta = max(0., sign(1.,rtt-zx_t))
 
  746         zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
 
  747         zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zx_q)
 
  748         zx_qs = r2es*foeew(zx_t, zdelta)/zx_p
 
  749         zx_qs = min(0.5, zx_qs)
 
  750         zcor = 1./(1.-retv*zx_qs)
 
  752         zx_gam = foede(zx_t, zdelta, zcvm5, zx_qs, zcor)
 
  759         zdelta = max(0., sign(1.,rtt-zx_t))
 
  760         zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
 
  761         zcvm5 = zcvm5/rcpd/(1.0+rvtmp2*zx_q)
 
  762         zx_qs = r2es*foeew(zx_t, zdelta)/zx_p
 
  763         zx_qs = min(0.5, zx_qs)
 
  764         zcor = 1./(1.-retv*zx_qs)
 
  766         zx_gam = foede(zx_t, zdelta, zcvm5, zx_qs, zcor)
 
  770         sb(i, k) = sb(i, k) + ds2(i)
 
  771         sb(i, km1) = sb(i, km1) + ds3(i)
 
  772         hb(i, k) = sb(i, k) + rlvtt*shb(i, k)
 
  773         hb(i, km1) = sb(i, km1) + rlvtt*shb(i, km1)
 
  774         hbs(i, k) = sb(i, k) + rlvtt*shbs(i, k)
 
  775         hbs(i, km1) = sb(i, km1) + rlvtt*shbs(i, km1)
 
  777         sbh(i, k) = 0.5*(sb(i,k)+sb(i,km1))
 
  778         shbh(i, k) = qhalf(shb(i,km1), shb(i,k), shbs(i,km1), shbs(i,k))
 
  779         hbh(i, k) = sbh(i, k) + rlvtt*shbh(i, k)
 
  780         sbh(i, km1) = 0.5*(sb(i,km1)+sb(i,k-2))
 
  781         shbh(i, km1) = qhalf(shb(i,k-2), shb(i,km1), shbs(i,k-2), &
 
  783         hbh(i, km1) = sbh(i, km1) + rlvtt*shbh(i, km1)
 
  793       etagt0 = eta(i) > 0.0
 
  794       IF (.NOT. etagt0) dzcld(i) = 0.0
 
  795       IF (etagt0 .AND. beta(i)>betamn) 
THEN 
  801         cnt(i) = min(cnt(i), ktp)
 
  802         cnb(i) = max(cnb(i), k)
 
  810     IF (tb(i,
klev)<tmelt .AND. tb(i,
klev-1)<tmelt) 
THEN 
  811       cmfprs(i) = prec(i)*rdt
 
  813       cmfprt(i) = prec(i)*rdt
 
!$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
 
subroutine conccm(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, rain, snow, kbascm, ktopcm)
 
subroutine cmfmca(deltat, p, dp, gz, tb, shb, cmfprt, cmfprs, cnt, cnb)
 
subroutine conkuo(dtime, paprs, pplay, t, q, conv_q, d_t, d_q, d_ql, rneb, rain, snow, ibas, itop)