4 SUBROUTINE conccm (dtime,paprs,pplay,t,q,conv_q,
5 s d_t, d_q, rain, snow, kbascm, ktopcm)
21 REAL paprs(klon,
klev+1)
25 REAL conv_q(klon,
klev)
44 REAL zlvdcp, zlsdcp, zdelta, zz, za, zb
49 REAL d_t_bis(klon,
klev)
50 REAL d_q_bis(klon,
klev)
53 INTEGER ibas_bis(klon)
54 INTEGER itop_bis(klon)
55 REAL d_ql_bis(klon,
klev)
56 REAL rneb_bis(klon,
klev)
89 . + rd * 0.5*(t(
i,
k-1)+t(
i,
k)) / paprs(
i,
k)
95 $ cmfprt, cmfprs, ntop, nbas)
105 rain(
i) = cmfprt(
i) * rhoh2o
106 snow(
i) = cmfprs(
i) * rhoh2o
107 kbascm(
i) =
klev+1 - nbas(
i)
108 ktopcm(
i) =
klev+1 - ntop(
i)
113 s d_t_bis, d_q_bis, d_ql_bis, rneb_bis,
114 s rain_bis, snow_bis, ibas_bis, itop_bis)
117 d_t(
i,
k) = d_t(
i,
k) + d_t_bis(
i,
k)
118 d_q(
i,
k) = d_q(
i,
k) + d_q_bis(
i,
k)
122 rain(
i) = rain(
i) + rain_bis(
i)
123 snow(
i) = snow(
i) + snow_bis(
i)
124 kbascm(
i) = min(kbascm(
i),ibas_bis(
i))
125 ktopcm(
i) = max(ktopcm(
i),itop_bis(
i))
129 zlvdcp=rlvtt/rcpd/(1.0+rvtmp2*
q(
i,
k))
130 zlsdcp=rlstt/rcpd/(1.0+rvtmp2*
q(
i,
k))
131 zdelta = max(0.,sign(1.,rtt-t(
i,
k)))
134 za = - max(0.0,zz) * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
135 d_t(
i,
k) = d_t(
i,
k) + za
136 d_q(
i,
k) = d_q(
i,
k) + zb
145 $ cmfprt, cmfprs, cnt, cnb)
182 REAL cmrp(klon,pcnst)
188 REAL cmrb(klon,
klev,pcnst)
192 REAL cmfdt(klon,
klev)
193 REAL cmfdq(klon,
klev)
194 REAL cmfmc(klon,
klev )
195 REAL cmfdqr(klon,
klev)
196 REAL cmfsl(klon,
klev )
197 REAL cmflq(klon,
klev )
233 REAL shbh(klon,
klev+1)
234 REAL sbh(klon,
klev+1)
235 REAL hbh(klon,
klev+1)
236 REAL cmrh(klon,
klev+1)
296 REAL tmp1, tmp2, tmp3, tmp4
297 REAL zx_t, zx_p, zx_q, zx_qs, zx_gam
298 REAL zcor, zdelta, zcvm5
300 REAL qhalf, sh1, sh2, shbs1, shbs2
304 qhalf(sh1,sh2,shbs1,shbs2) = min(max(sh1,sh2),
305 $ (shbs2*sh1 + shbs1*sh2)/(shbs1+shbs2))
334 cats = max(
dt,cmftau)
344 zdelta=max(0.,sign(1.,rtt-zx_t))
345 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
346 zcvm5 = zcvm5 / rcpd / (1.0+rvtmp2*zx_q)
347 zx_qs= r2es * foeew(zx_t,zdelta)/zx_p
349 zcor=1./(1.-retv*zx_qs)
351 zx_gam = foede(zx_t,zdelta,zcvm5,zx_qs,zcor)
359 sb(
i,
k) = rcpd*tb(
i,
k) + gz(
i,
k)
360 hb(
i,
k) = sb(
i,
k) + rlvtt*shb(
i,
k)
361 hbs(
i,
k) = sb(
i,
k) + rlvtt*shbs(
i,
k)
370 sbh(
i,
k) =0.5*(sb(
i,km1) + sb(
i,
k))
371 shbh(
i,
k) =qhalf(shb(
i,km1),shb(
i,
k),shbs(
i,km1),shbs(
i,
k))
372 hbh(
i,
k) =sbh(
i,
k) + rlvtt*shbh(
i,
k)
379 sbh(
i,limcnv) = sb(
i,limcnv)
380 shbh(
i,limcnv) = shb(
i,limcnv)
381 hbh(
i,limcnv) = hb(
i,limcnv)
407 DO 70
k=
klev-1,limcnv+1,-1
435 pblhgt = max(pblh(
i),1.0)
436 IF (gz(
i,kp1)/rg.LE.pblhgt .AND. dzcld(
i).EQ.0.0)
THEN
437 fac1 = max(0.0,1.0-gz(
i,kp1)/rg/pblhgt)
438 tprime = min(thtap(
i),tpmax)*fac1
439 qsattp = shbs(
i,kp1) + rcpd/rlvtt*gam(
i,kp1)*tprime
440 shprme = min(min(shp(
i),shpmax)*fac1,
441 $ max(qsattp-shb(
i,kp1),0.0))
442 qprime = max(qprime,shprme)
450 sc(
i) = sb(
i,kp1) + rcpd*tprime
451 shc(
i) = shb(
i,kp1) + qprime
452 hc(
i) = sc(
i ) + rlvtt*shc(
i)
453 flotab(
i) = hc(
i) - hbs(
i,
k)
454 dz = dp(
i,
k)*rd*tb(
i,
k)/rg/p(
i,
k)
455 IF (flotab(
i).gt.0.0)
THEN
456 dzcld(
i) = dzcld(
i) + dz
466 IF (flotab(
i).GT.0.0)
THEN
483 IF (
k.le.limcnv+1)
THEN
486 cldwtr(
i) = sb(
i,
k)-sc(
i)+flotab(
i)/(1.0+gam(
i,
k))
487 cldwtr(
i) = max(0.0,cldwtr(
i))
501 cldwtr(
i) = sb(
i,
k)-sc(
i)+flotab(
i)/(1.0+gam(
i,
k))
502 cldwtr(
i) = max(0.0,cldwtr(
i))
503 betamx = 1.0 - c0*max(0.0,(dzcld(
i)-dzmin))
504 b1 = (hc(
i) - hbs(
i,km1))*dp(
i,km1)
505 b2 = (hc(
i) - hbs(
i,
k ))*dp(
i,
k )
506 beta(
i) = max(betamn,min(betamx, 1.0+b1/b2))
507 IF (hbs(
i,km1).le.hb(
i,km1))
beta(
i) = 0.0
519 tmp1 = (1.0+gam(
i,
k))*(sc(
i)-sbh(
i,kp1) + cldwtr(
i))
520 $ - (hbh(
i,kp1)-hc(
i))*dp(
i,
k)/dp(
i,kp1)
521 tmp2 = (1.0+gam(
i,
k))*(sc(
i)-sbh(
i,
k))
522 IF ((
beta(
i)*tmp2-tmp1).GT.0.0)
THEN
523 betamx = 0.99*(tmp1/tmp2)
533 IF (hb(
i,km1).lt.hbs(
i,km1))
THEN
534 tmp1 = (1.0+gam(
i,
k))*(sc(
i)-sbh(
i,kp1) + cldwtr(
i))
535 $ - (hbh(
i,kp1)-hc(
i))*dp(
i,
k)/dp(
i,kp1)
537 tmp2 = gam(
i,km1)*(sbh(
i,
k)-sc(
i) + cldwtr(
i)) -
538 $ hbh(
i,
k) + hc(
i) - sc(
i) + sbh(
i,
k)
539 tmp3 = (1.0+gam(
i,
k))*(sc(
i)-sbh(
i,
k))/dp(
i,
k)
540 tmp4 = (
dt/cats)*(hc(
i)-hbs(
i,
k))*tmp2
541 $ / (dp(
i,km1)*(hbs(
i,km1)-hb(
i,km1))) + tmp3
542 IF ((
beta(
i)*tmp4-tmp1).GT.0.0)
THEN
543 betamx = ssfac*(tmp1/tmp4)
554 g = min(0.0,hb(
i,
k)-hb(
i,km1))
555 tmp3 = (hb(
i,
k)-hb(
i,km1)-
g)*(cats/
dt) / (hc(
i)-hbs(
i,
k))
556 tmp1 = (1.0+gam(
i,
k))*(sc(
i)-sbh(
i,kp1) + cldwtr(
i))
557 $ - (hbh(
i,kp1)-hc(
i))*dp(
i,
k)/dp(
i,kp1)
559 tmp1 = tmp3*tmp1 + (hc(
i) - hbh(
i,kp1))/dp(
i,
k)
560 tmp2 = tmp3*(1.0+gam(
i,
k))*(sc(
i)-sbh(
i,
k))/dp(
i,
k)
561 $ + (hc(
i)-hbh(
i,
k)-cldwtr(
i))
562 $ *(1.0/dp(
i,
k)+1.0/dp(
i,kp1))
563 IF ((
beta(
i)*tmp2-tmp1).GT.0.0)
THEN
565 IF (tmp2.NE.0.0) betamx = tmp1/tmp2
584 tmp1 = hc(
i) - hbs(
i,
k)
585 tmp2 = ((1.0+gam(
i,
k))*(sc(
i)-sbh(
i,kp1)+cldwtr(
i)) -
587 $ (hbh(
i,kp1)-hc(
i))/dp(
i,kp1)
588 eta(
i) = tmp1/(tmp2*rg*cats)
589 tmass = min(dp(
i,
k),dp(
i,kp1))/rg
590 IF (eta(
i).GT.tmass*rdt .OR. eta(
i).LE.0.0) eta(
i) = 0.0
594 IF(shc(
i)-shbh(
i,
k).LT.0.0 .AND.
beta(
i)*eta(
i).NE.0.0)
THEN
595 denom = eta(
i)*rg*
dt*(shc(
i) - shbh(
i,
k))/dp(
i,km1)
596 beta(
i) = max(0.0,min(-0.999*shb(
i,km1)/denom,
beta(
i)))
601 qtest1 = shb(
i,
k) + eta(
i)*rg*
dt*((shc(
i) - shbh(
i,kp1)) -
602 $ (1.0 -
beta(
i))*cldwtr(
i)/rlvtt -
604 IF (qtest1.le.0.0) eta(
i) = 0.0
608 fac1 = -(shbh(
i,kp1) - shc(
i))/dp(
i,kp1)
609 qtest2 = shb(
i,kp1) - eta(
i)*rg*
dt*fac1
610 IF (qtest2 .lt. 0.0)
THEN
611 eta(
i) = 0.99*shb(
i,kp1)/(rg*
dt*fac1)
621 etagdt = eta(
i)*rg*
dt
622 cldwtr(
i) = etagdt*cldwtr(
i)/rlvtt/rg
623 rnwtr(
i) = (1.0 -
beta(
i))*cldwtr(
i)
624 ds1(
i) = etagdt*(sbh(
i,kp1) - sc(
i))/dp(
i,kp1)
625 dq1(
i) = etagdt*(shbh(
i,kp1) - shc(
i))/dp(
i,kp1)
626 ds2(
i) = (etagdt*(sc(
i) - sbh(
i,kp1)) +
627 $ rlvtt*rg*cldwtr(
i) -
beta(
i)*etagdt*
628 $ (sc(
i) - sbh(
i,
k)))/dp(
i,
k)
629 dq2(
i) = (etagdt*(shc(
i) - shbh(
i,kp1)) -
630 $ rg*rnwtr(
i) -
beta(
i)*etagdt*
631 $ (shc(
i) - shbh(
i,
k)))/dp(
i,
k)
632 ds3(
i) =
beta(
i)*(etagdt*(sc(
i) - sbh(
i,
k)) -
633 $ rlvtt*rg*cldwtr(
i))/dp(
i,km1)
634 dq3(
i) =
beta(
i)*etagdt*(shc(
i) - shbh(
i,
k))/dp(
i,km1)
638 fslkp = eta(
i)*(sc(
i) - sbh(
i,kp1))
639 fslkm =
beta(
i)*(eta(
i)*(sc(
i) - sbh(
i,
k)) -
640 $ rlvtt*cldwtr(
i)*rdt)
641 fqlkp = eta(
i)*(shc(
i) - shbh(
i,kp1))
642 fqlkm =
beta(
i)*eta(
i)*(shc(
i) - shbh(
i,
k))
647 tb(
i,kp1) = tb(
i,kp1) + ds1(
i) / rcpd
648 tb(
i,
k ) = tb(
i,
k ) + ds2(
i) / rcpd
649 tb(
i,km1) = tb(
i,km1) + ds3(
i) / rcpd
650 shb(
i,kp1) = shb(
i,kp1) + dq1(
i)
651 shb(
i,
k ) = shb(
i,
k ) + dq2(
i)
652 shb(
i,km1) = shb(
i,km1) + dq3(
i)
653 prec(
i) = prec(
i) + rnwtr(
i)/rhoh2o
660 cmfdt(
i,kp1) = cmfdt(
i,kp1) + ds1(
i)/rcpd*rdt
661 cmfdt(
i,
k ) = cmfdt(
i,
k ) + ds2(
i)/rcpd*rdt
662 cmfdt(
i,km1) = cmfdt(
i,km1) + ds3(
i)/rcpd*rdt
663 cmfdq(
i,kp1) = cmfdq(
i,kp1) + dq1(
i)*rdt
664 cmfdq(
i,
k ) = cmfdq(
i,
k ) + dq2(
i)*rdt
665 cmfdq(
i,km1) = cmfdq(
i,km1) + dq3(
i)*rdt
666 cmfdqr(
i,
k ) = cmfdqr(
i,
k ) + (rg*rnwtr(
i)/dp(
i,
k))*rdt
667 cmfmc(
i,kp1) = cmfmc(
i,kp1) + eta(
i)
669 cmfsl(
i,kp1) = cmfsl(
i,kp1) + fslkp
670 cmfsl(
i,
k ) = cmfsl(
i,
k ) + fslkm
671 cmflq(
i,kp1) = cmflq(
i,kp1) + rlvtt*fqlkp
672 cmflq(
i,
k ) = cmflq(
i,
k ) + rlvtt*fqlkm
673 qc(
i,
k ) = (rg*rnwtr(
i)/dp(
i,
k))*rdt
686 IF ((cmrb(
i,kp1,
m).LT.0.0) .OR.
687 $ (cmrb(
i,
k,
m).LT.0.0) .OR.
688 $ (cmrb(
i,km1,
m).LT.0.0)) goto 40
692 cmrh(
i,
k ) = 0.5*(cmrb(
i,km1,
m) + cmrb(
i,
k ,
m))
693 cmrh(
i,kp1) = 0.5*(cmrb(
i,
k ,
m) + cmrb(
i,kp1,
m))
697 pblhgt = max(pblh(
i),1.0)
698 IF (gz(
i,kp1)/rg.LE.pblhgt .AND. dzcld(
i).EQ.0.)
THEN
699 fac1 = max(0.0,1.0-gz(
i,kp1)/rg/pblhgt)
700 cmrc(
i) = cmrb(
i,kp1,
m) + cmrp(
i,
m)*fac1
702 cmrc(
i) = cmrb(
i,kp1,
m)
710 etagdt = eta(
i)*rg*
dt
711 botflx = etagdt*(cmrc(
i) - cmrh(
i,kp1))
712 topflx =
beta(
i)*etagdt*(cmrc(
i)-cmrh(
i,
k))
713 dcmr1(
i) = -botflx/dp(
i,kp1)
718 IF (cmrb(
i,kp1,
m)+dcmr1(
i) .LT. 0.0)
THEN
719 efac1 = max(tiny,abs(cmrb(
i,kp1,
m)/dcmr1(
i)) -
eps)
722 IF (efac1.EQ.tiny .OR. efac1.GT.1.0) efac1 = 0.0
723 dcmr1(
i) = -efac1*botflx/dp(
i,kp1)
724 dcmr2(
i) = (efac1*botflx - topflx)/dp(
i,
k)
726 IF (cmrb(
i,
k,
m)+dcmr2(
i) .LT. 0.0)
THEN
727 efac2 = max(tiny,abs(cmrb(
i,
k ,
m)/dcmr2(
i)) -
eps)
730 IF (efac2.EQ.tiny .OR. efac2.GT.1.0) efac2 = 0.0
731 dcmr2(
i) = (efac1*botflx - efac2*topflx)/dp(
i,
k)
732 dcmr3(
i) = efac2*topflx/dp(
i,km1)
734 IF (cmrb(
i,km1,
m)+dcmr3(
i) .LT. 0.0)
THEN
735 efac3 = max(tiny,abs(cmrb(
i,km1,
m)/dcmr3(
i)) -
eps)
738 IF (efac3.EQ.tiny .OR. efac3.GT.1.0) efac3 = 0.0
739 efac3 = min(efac2,efac3)
740 dcmr2(
i) = (efac1*botflx - efac3*topflx)/dp(
i,
k)
741 dcmr3(
i) = efac3*topflx/dp(
i,km1)
743 cmrb(
i,kp1,
m) = cmrb(
i,kp1,
m) + dcmr1(
i)
744 cmrb(
i,
k ,
m) = cmrb(
i,
k ,
m) + dcmr2(
i)
745 cmrb(
i,km1,
m) = cmrb(
i,km1,
m) + dcmr3(
i)
750 IF (
k.EQ.limcnv+1) goto 60
761 zdelta=max(0.,sign(1.,rtt-zx_t))
762 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
763 zcvm5 = zcvm5 / rcpd / (1.0+rvtmp2*zx_q)
764 zx_qs= r2es * foeew(zx_t,zdelta)/zx_p
766 zcor=1./(1.-retv*zx_qs)
768 zx_gam = foede(zx_t,zdelta,zcvm5,zx_qs,zcor)
775 zdelta=max(0.,sign(1.,rtt-zx_t))
776 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
777 zcvm5 = zcvm5 / rcpd / (1.0+rvtmp2*zx_q)
778 zx_qs= r2es * foeew(zx_t,zdelta)/zx_p
780 zcor=1./(1.-retv*zx_qs)
782 zx_gam = foede(zx_t,zdelta,zcvm5,zx_qs,zcor)
786 sb(
i,
k ) = sb(
i,
k ) + ds2(
i)
787 sb(
i,km1) = sb(
i,km1) + ds3(
i)
788 hb(
i,
k ) = sb(
i,
k ) + rlvtt*shb(
i,
k)
789 hb(
i,km1) = sb(
i,km1) + rlvtt*shb(
i,km1)
790 hbs(
i,
k ) = sb(
i,
k ) + rlvtt*shbs(
i,
k )
791 hbs(
i,km1) = sb(
i,km1) + rlvtt*shbs(
i,km1)
793 sbh(
i,
k) = 0.5*(sb(
i,
k) + sb(
i,km1))
794 shbh(
i,
k) = qhalf(shb(
i,km1),shb(
i,
k)
795 $ ,shbs(
i,km1),shbs(
i,
k))
796 hbh(
i,
k) = sbh(
i,
k) + rlvtt*shbh(
i,
k)
797 sbh(
i,km1) = 0.5*(sb(
i,km1) + sb(
i,
k-2))
798 shbh(
i,km1) = qhalf(shb(
i,
k-2),shb(
i,km1),
799 $ shbs(
i,
k-2),shbs(
i,km1))
800 hbh(
i,km1) = sbh(
i,km1) + rlvtt*shbh(
i,km1)
810 etagt0 = eta(
i).gt.0.0
811 IF (.not.etagt0) dzcld(
i) = 0.0
812 IF (etagt0 .and.
beta(
i).gt.betamn)
THEN
818 cnt(
i) = min(cnt(
i),ktp)
819 cnb(
i) = max(cnb(
i),
k)
827 IF (tb(
i,
klev).LT.tmelt .AND. tb(
i,
klev-1).lt.tmelt)
THEN
828 cmfprs(
i) = prec(
i)*rdt
830 cmfprt(
i) = prec(
i)*rdt