75 subroutine samfdeepcnv(im,ix,km,delt,delp,prslp,psp,phil,ql,
76 & q1,t1,u1,v1,cldwrk,rn,kbot,ktop,kcnv,islimsk,garea,
77 & dot,ncloud,ud_mf,dd_mf,dt_mf,cnvw,cnvc,
78 & clam,c0s,c1,betal,betas,evfact,evfactl,pgcon,asolfac)
80 use machine
, only : kind_phys
81 use funcphys
, only : fpvs
82 use physcons, grav => con_g, cp => con_cp, hvap => con_hvap
83 &, rv => con_rv, fv => con_fvirt, t0c => con_t0c
84 &, rd => con_rd, cvap => con_cvap, cliq => con_cliq
85 &, eps => con_eps, epsm1 => con_epsm1
88 integer,
intent(in) :: im, ix, km, ncloud
89 integer,
intent(in) :: islimsk(im)
90 real(kind=kind_phys),
intent(in) :: delt
91 real(kind=kind_phys),
intent(in) :: psp(im), delp(ix,km),
92 & prslp(ix,km), garea(im), dot(ix,km), phil(ix,km)
94 integer,
intent(inout) :: kcnv(im)
95 real(kind=kind_phys),
intent(inout) :: ql(ix,km,2),
96 & q1(ix,km), t1(ix,km), u1(ix,km), v1(ix,km)
98 integer,
intent(out) :: kbot(im), ktop(im)
99 real(kind=kind_phys),
intent(out) :: cldwrk(im),
100 & rn(im), cnvw(ix,km), cnvc(ix,km),
101 & ud_mf(im,km),dd_mf(im,km), dt_mf(im,km)
104 integer i, indx, jmn, k, kk, km1, n
107 real(kind=kind_phys) clam, cxlamu, cxlamd,
112 real(kind=kind_phys) adw, aup, aafac,
113 & beta, betal, betas,
116 & dellat, delta, desdt, dg,
118 & dq, dqsdp, dqsdt, dt,
123 & dz, dz1, e1, edtmax,
124 & edtmaxl, edtmaxs, el2orc, elocp,
127 & evef, evfact, evfactl, fact1,
129 & g, gamma, pprime, cm,
131 & rain, rfact, shear, tfac,
139 & xqrch, tem, tem1, tem2,
140 & ptem, ptem1, ptem2,
143 integer kb(im), kbcon(im), kbcon1(im),
144 & ktcon(im), ktcon1(im), ktconn(im),
145 & jmin(im), lmin(im), kbmax(im),
149 real(kind=kind_phys) aa1(im),
150 & ps(im), del(ix,km), prsl(ix,km),
151 & umean(im), tauadv(im), gdx(im),
152 & delhbar(im), delq(im), delq2(im),
153 & delqbar(im), delqev(im), deltbar(im),
154 & deltv(im), dtconv(im), edt(im),
155 & edto(im), edtx(im), fld(im),
156 & hcdo(im,km), hmax(im), hmin(im),
157 & ucdo(im,km), vcdo(im,km),aa2(im),
158 & pdot(im), po(im,km),
159 & pwavo(im), pwevo(im), mbdt(im),
160 & qcdo(im,km), qcond(im), qevap(im),
161 & rntot(im), vshear(im), xaa0(im),
162 & xk(im), xlamd(im), cina(im),
163 & xmb(im), xmbmax(im), xpwav(im),
164 & xpwev(im), xlamx(im),
165 & delubar(im),delvbar(im)
167 real(kind=kind_phys) c0(im)
169 real(kind=kind_phys) cinpcr, cinpcrmx, cinpcrmn,
170 & cinacr, cinacrmx, cinacrmn
174 real(kind=kind_phys) bet1, cd1, f1, gam1,
178 c physical parameters
181 parameter(elocp=hvap/cp,el2orc=hvap*hvap/(rv*cp))
193 parameter(cm=1.0,delta=fv)
194 parameter(fact1=(cvap-cliq)/rv,fact2=hvap/rv-fact1*t0c)
195 parameter(cthk=200.,dthk=25.)
196 parameter(cinpcrmx=180.,cinpcrmn=120.)
198 parameter(cinacrmx=-120.,cinacrmn=-80.)
199 parameter(bet1=1.875,cd1=.506,f1=2.0,gam1=.5)
200 parameter(betaw=.03,dxcrtas=8.e3,dxcrtuf=15.e3)
203 real(kind=kind_phys) pfld(im,km), to(im,km), qo(im,km),
204 & uo(im,km), vo(im,km), qeso(im,km)
206 real(kind=kind_phys) wu2(im,km), buo(im,km), drag(im,km)
207 real(kind=kind_phys) wc(im), scaldfunc(im), sigmagfm(im)
211 real(kind=kind_phys) qlko_ktcon(im), dellal(im,km), tvo(im,km),
212 & dbyo(im,km), zo(im,km),
213 & xlamue(im,km), xlamud(im,km),
214 & fent1(im,km), fent2(im,km), frh(im,km),
215 & heo(im,km), heso(im,km),
216 & qrcd(im,km), dellah(im,km), dellaq(im,km),
217 & dellau(im,km), dellav(im,km), hcko(im,km),
218 & ucko(im,km), vcko(im,km), qcko(im,km),
219 & eta(im,km), etad(im,km), zi(im,km),
220 & qrcko(im,km), qrcdo(im,km),
221 & pwo(im,km), pwdo(im,km), c0t(im,km),
222 & tx1(im), sumx(im), cnvwt(im,km)
225 logical totflg, cnvflg(im), asqecflg(im), flg(im)
236 c
data acritt/.203,.515,.521,.566,.625,.665,.659,.688,
237 c & .743,.813,.886,.947,1.138,1.377,1.896/
238 real(kind=kind_phys) tf, tcr, tcrf
239 parameter(tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf))
241 c-----------------------------------------------------------------------
286 gdx(i) = sqrt(garea(i))
291 if(islimsk(i) == 1)
then 300 if(t1(i,k) > 273.16)
then 303 tem = d0 * (t1(i,k) - 273.16)
305 c0t(i,k) = c0(i) * tem1
333 dtmin = max(dt2, val )
336 dtmax = max(dt2, val )
337 c model tunable parameters are all here
370 c define top layer for search of the downdraft originating layer
371 c and the maximum thetae for updraft
383 if (prsl(i,k)*tx1(i) > 0.04) kmax(i) = k + 1
384 if (prsl(i,k)*tx1(i) > 0.45) kbmax(i) = k + 1
385 if (prsl(i,k)*tx1(i) > 0.70) kbm(i) = k + 1
389 kmax(i) = min(km,kmax(i))
390 kbmax(i) = min(kbmax(i),kmax(i))
391 kbm(i) = min(kbm(i),kmax(i))
394 c hydrostatic height assume zero terr and initially assume
395 c updraft entrainment rate as an inverse
function of height
400 zo(i,k) = phil(i,k) / g
406 zi(i,k) = 0.5*(zo(i,k)+zo(i,k+1))
407 xlamue(i,k) = clam / zi(i,k)
413 c convert surface pressure to mb from cb
418 if (k <= kmax(i))
then 419 pfld(i,k) = prsl(i,k) * 10.0
456 if (k <= kmax(i))
then 457 qeso(i,k) = 0.01 * fpvs(to(i,k))
458 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
460 qeso(i,k) = max(qeso(i,k), val1)
462 qo(i,k) = max(qo(i,k), val2 )
469 c compute moist static energy
474 if (k <= kmax(i))
then 476 tem = phil(i,k) + cp * to(i,k)
477 heo(i,k) = tem + hvap * qo(i,k)
478 heso(i,k) = tem + hvap * qeso(i,k)
479 c heo(i,k) = min(heo(i,k),heso(i,k))
484 c determine level with largest moist static energy
485 c this is the level
where updraft starts
495 if (k <= kbm(i))
then 496 if(heo(i,k) > hmax(i))
then 507 if (k <= kmax(i)-1)
then 508 dz = .5 * (zo(i,k+1) - zo(i,k))
509 dp = .5 * (pfld(i,k+1) - pfld(i,k))
510 es = 0.01 * fpvs(to(i,k+1))
511 pprime = pfld(i,k+1) + epsm1 * es
512 qs = eps * es / pprime
513 dqsdp = - qs / pprime
514 desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
515 dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
516 gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
517 dt = (g * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
518 dq = dqsdt * dt + dqsdp * dp
519 to(i,k) = to(i,k+1) + dt
520 qo(i,k) = qo(i,k+1) + dq
521 po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
529 if (k <= kmax(i)-1)
then 530 qeso(i,k) = 0.01 * fpvs(to(i,k))
531 qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1*qeso(i,k))
533 qeso(i,k) = max(qeso(i,k), val1)
535 qo(i,k) = max(qo(i,k), val2 )
537 frh(i,k) = 1. - min(qo(i,k)/qeso(i,k), 1.)
538 heo(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +
539 & cp * to(i,k) + hvap * qo(i,k)
540 heso(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +
541 & cp * to(i,k) + hvap * qeso(i,k)
542 uo(i,k) = .5 * (uo(i,k) + uo(i,k+1))
543 vo(i,k) = .5 * (vo(i,k) + vo(i,k+1))
548 c look for the level of free convection as cloud base
557 if (flg(i) .and. k <= kbmax(i))
then 558 if(k > kb(i) .and. heo(i,kb(i)) > heso(i,k))
then 568 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
573 totflg = totflg .and. (.not. cnvflg(i))
581 pdot(i) = 0.01 * dot(i,kbcon(i))
585 c turn off convection
if pressure depth between parcel source level
586 c and cloud base is larger than a critical
value, cinpcr
590 if(islimsk(i) == 1)
then 601 if(pdot(i) <= w4)
then 602 tem = (pdot(i) - w4) / (w3 - w4)
603 elseif(pdot(i) >= -w4)
then 604 tem = - (pdot(i) + w4) / (w4 - w3)
613 ptem1= .5*(cinpcrmx-cinpcrmn)
614 cinpcr = cinpcrmx - ptem * ptem1
615 tem1 = pfld(i,kb(i)) - pfld(i,kbcon(i))
616 if(tem1 > cinpcr)
then 624 totflg = totflg .and. (.not. cnvflg(i))
629 c assume that updraft entrainment rate above cloud base is
630 c same as that at cloud base
639 xlamx(i) = xlamue(i,kbcon(i))
645 & (k > kbcon(i) .and. k < kmax(i)))
then 646 xlamue(i,k) = xlamx(i)
651 c specify detrainment rate for the updrafts
656 if(cnvflg(i) .and. k < kmax(i))
then 657 xlamud(i,k) = xlamx(i)
663 c functions rapidly decreasing with height, mimicking a cloud ensemble
664 c(bechtold et al., 2008)
669 & (k > kbcon(i) .and. k < kmax(i)))
then 670 tem = qeso(i,k)/qeso(i,kbcon(i))
677 c final entrainment and detrainment rates as the sum of turbulent part and
678 c organized entrainment depending on the environmental relative humidity
679 c(bechtold et al., 2008)
684 & (k > kbcon(i) .and. k < kmax(i)))
then 685 tem = cxlamu * frh(i,k) * fent2(i,k)
686 xlamue(i,k) = xlamue(i,k)*fent1(i,k) + tem
695 c determine updraft mass flux for the subcloud layers
705 if(k < kbcon(i) .and. k >= kb(i))
then 706 dz = zi(i,k+1) - zi(i,k)
707 tem = 0.5*(xlamud(i,k)+xlamud(i,k+1))
708 ptem = 0.5*(xlamue(i,k)+xlamue(i,k+1))-tem
709 eta(i,k) = eta(i,k+1) / (1. + ptem * dz)
715 c compute mass flux above cloud base
723 if(k > kbcon(i) .and. k < kmax(i))
then 724 dz = zi(i,k) - zi(i,k-1)
725 tem = 0.5*(xlamud(i,k)+xlamud(i,k-1))
726 ptem = 0.5*(xlamue(i,k)+xlamue(i,k-1))-tem
727 eta(i,k) = eta(i,k-1) * (1 + ptem * dz)
728 if(eta(i,k) <= 0.)
then 738 c compute updraft cloud properties
744 hcko(i,indx) = heo(i,indx)
745 ucko(i,indx) = uo(i,indx)
746 vcko(i,indx) = vo(i,indx)
751 c cloud property is modified by the entrainment process
759 if(k > kb(i) .and. k < kmax(i))
then 760 dz = zi(i,k) - zi(i,k-1)
761 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
762 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
763 factor = 1. + tem - tem1
764 hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*
765 & (heo(i,k)+heo(i,k-1)))/factor
766 dbyo(i,k) = hcko(i,k) - heso(i,k)
772 ucko(i,k) = ((1.-tem)*ucko(i,k-1)+ptem*uo(i,k)
773 & +ptem1*uo(i,k-1))/factor
774 vcko(i,k) = ((1.-tem)*vcko(i,k-1)+ptem*vo(i,k)
775 & +ptem1*vo(i,k-1))/factor
781 c taking account into convection inhibition due to existence of
782 c dry layers below cloud base
791 if (flg(i) .and. k < kmax(i))
then 792 if(k >= kbcon(i) .and. dbyo(i,k) > 0.)
then 801 if(kbcon1(i) == kmax(i)) cnvflg(i) = .false.
806 tem = pfld(i,kbcon(i)) - pfld(i,kbcon1(i))
815 totflg = totflg .and. (.not. cnvflg(i))
820 c calculate convective inhibition
826 if(k > kb(i) .and. k < kbcon1(i))
then 827 dz1 = zo(i,k+1) - zo(i,k)
828 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
829 rfact = 1. + delta * cp * gamma
833 & dz1 * (g / (cp * to(i,k)))
834 & * dbyo(i,k) / (1. + gamma)
840 & max(val,(qeso(i,k) - qo(i,k)))
849 if(islimsk(i) == 1)
then 860 if(pdot(i) <= w4)
then 861 tem = (pdot(i) - w4) / (w3 - w4)
862 elseif(pdot(i) >= -w4)
then 863 tem = - (pdot(i) + w4) / (w4 - w3)
873 tem1= .5*(cinacrmx-cinacrmn)
874 cinacr = cinacrmx - tem * tem1
877 if(cina(i) < cinacr) cnvflg(i) = .false.
883 totflg = totflg .and. (.not. cnvflg(i))
888 c determine first guess cloud top as the level of zero buoyancy
897 if (flg(i) .and. k < kmax(i))
then 898 if(k > kbcon1(i) .and. dbyo(i,k) < 0.)
then 908 if(ktcon(i) == 1 .and. ktconn(i) > 1)
then 911 tem = pfld(i,kbcon(i))-pfld(i,ktcon(i))
912 if(tem < cthk) cnvflg(i) = .false.
918 totflg = totflg .and. (.not. cnvflg(i))
923 c search for downdraft originating level above theta-e minimum
928 hmin(i) = heo(i,kbcon1(i))
935 if (cnvflg(i) .and. k <= kbmax(i))
then 936 if(k > kbcon1(i) .and. heo(i,k) < hmin(i))
then 944 c make sure that jmin is within the cloud
948 jmin(i) = min(lmin(i),ktcon(i)-1)
949 jmin(i) = max(jmin(i),kbcon1(i)+1)
950 if(jmin(i) >= ktcon(i)) cnvflg(i) = .false.
954 c specify upper limit of mass flux at cloud base
962 dp = 1000. * del(i,k)
963 xmbmax(i) = dp / (g * dt2)
972 c compute cloud moisture property and precipitation
978 qcko(i,kb(i)) = qo(i,kb(i))
979 qrcko(i,kb(i)) = qo(i,kb(i))
987 if(k > kb(i) .and. k < ktcon(i))
then 988 dz = zi(i,k) - zi(i,k-1)
989 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
991 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
993 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
994 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
995 factor = 1. + tem - tem1
996 qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*
997 & (qo(i,k)+qo(i,k-1)))/factor
998 qrcko(i,k) = qcko(i,k)
1000 dq = eta(i,k) * (qcko(i,k) - qrch)
1004 c check
if there is excess moisture to release latent heat
1006 if(k >= kbcon(i) .and. dq > 0.)
then 1007 etah = .5 * (eta(i,k) + eta(i,k-1))
1008 dp = 1000. * del(i,k)
1009 if(ncloud > 0 .and. k > jmin(i))
then 1010 ptem = c0t(i,k) + c1
1011 qlk = dq / (eta(i,k) + etah * ptem * dz)
1012 dellal(i,k) = etah * c1 * dz * qlk * g / dp
1014 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1018 buo(i,k) = buo(i,k) - g * qlk
1019 qcko(i,k) = qlk + qrch
1020 pwo(i,k) = etah * c0t(i,k) * dz * qlk
1021 pwavo(i) = pwavo(i) + pwo(i,k)
1023 cnvwt(i,k) = etah * qlk * g / dp
1028 if(k >= kbcon(i))
then 1029 rfact = 1. + delta * cp * gamma
1031 buo(i,k) = buo(i,k) + (g / (cp * to(i,k)))
1032 & * dbyo(i,k) / (1. + gamma)
1035 buo(i,k) = buo(i,k) + g * delta *
1036 & max(val,(qeso(i,k) - qo(i,k)))
1037 drag(i,k) = max(xlamue(i,k),xlamud(i,k))
1052 c calculate cloud work function
1092 if(k >= kbcon(i) .and. k < ktcon(i))
then 1093 dz1 = zo(i,k+1) - zo(i,k)
1095 aa1(i) = aa1(i) + buo(i,k) * dz1
1103 if(cnvflg(i) .and. aa1(i) <= 0.) cnvflg(i) = .false.
1108 totflg = totflg .and. (.not. cnvflg(i))
1113 c estimate the onvective overshooting as the level
1114 c
where the [aafac * cloud work function] becomes zero,
1115 c which is the final cloud top
1120 aa2(i) = aafac * aa1(i)
1131 if(k >= ktcon(i) .and. k < kmax(i))
then 1132 dz1 = zo(i,k+1) - zo(i,k)
1133 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1134 rfact = 1. + delta * cp * gamma
1138 & dz1 * (g / (cp * to(i,k)))
1139 & * dbyo(i,k) / (1. + gamma)
1146 if(aa2(i) < 0.)
then 1155 c compute cloud moisture property, detraining cloud water
1156 c and precipitation in overshooting layers
1162 if(k >= ktcon(i) .and. k < ktcon1(i))
then 1163 dz = zi(i,k) - zi(i,k-1)
1164 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1166 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1168 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1169 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
1170 factor = 1. + tem - tem1
1171 qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*
1172 & (qo(i,k)+qo(i,k-1)))/factor
1173 qrcko(i,k) = qcko(i,k)
1175 dq = eta(i,k) * (qcko(i,k) - qrch)
1177 c check
if there is excess moisture to release latent heat
1180 etah = .5 * (eta(i,k) + eta(i,k-1))
1181 dp = 1000. * del(i,k)
1183 ptem = c0t(i,k) + c1
1184 qlk = dq / (eta(i,k) + etah * ptem * dz)
1185 dellal(i,k) = etah * c1 * dz * qlk * g / dp
1187 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1189 qcko(i,k) = qlk + qrch
1190 pwo(i,k) = etah * c0t(i,k) * dz * qlk
1191 pwavo(i) = pwavo(i) + pwo(i,k)
1193 cnvwt(i,k) = etah * qlk * g / dp
1230 if(k > kbcon1(i) .and. k < ktcon(i))
then 1231 dz = zi(i,k) - zi(i,k-1)
1232 tem = 0.25 * bb1 * (drag(i,k)+drag(i,k-1)) * dz
1233 tem1 = 0.5 * bb2 * (buo(i,k)+buo(i,k-1)) * dz
1234 ptem = (1. - tem) * wu2(i,k-1)
1236 wu2(i,k) = (ptem + tem1) / ptem1
1237 wu2(i,k) = max(wu2(i,k), 0.)
1253 if(k > kbcon1(i) .and. k < ktcon(i))
then 1254 dz = zi(i,k) - zi(i,k-1)
1255 tem = 0.5 * (sqrt(wu2(i,k)) + sqrt(wu2(i,k-1)))
1256 wc(i) = wc(i) + tem * dz
1257 sumx(i) = sumx(i) + dz
1264 if(sumx(i) == 0.)
then 1267 wc(i) = wc(i) / sumx(i)
1270 if (wc(i) < val) cnvflg(i)=.false.
1274 c exchange ktcon with ktcon1
1280 ktcon(i) = ktcon1(i)
1285 c this section is ready for cloud water
1290 c compute liquid and vapor separation at cloud top
1295 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1297 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1298 dq = qcko(i,k) - qrch
1300 c check
if there is excess moisture to release latent heat
1310 ccccc
if(lat.==.latd.and.lon.==.lond.and.cnvflg(i))
then 1311 ccccc print *,
' aa1(i) before dwndrft =', aa1(i)
1314 c------- downdraft calculations
1316 c--- compute precipitation efficiency in terms of windshear
1332 if(k > kb(i) .and. k <= ktcon(i))
then 1333 shear= sqrt((uo(i,k)-uo(i,k-1)) ** 2
1334 & + (vo(i,k)-vo(i,k-1)) ** 2)
1335 vshear(i) = vshear(i) + shear
1342 vshear(i) = 1.e3 * vshear(i) / (zi(i,ktcon(i))-zi(i,kb(i)))
1343 e1=1.591-.639*vshear(i)
1344 & +.0953*(vshear(i)**2)-.00496*(vshear(i)**3)
1347 edt(i) = min(edt(i),val)
1349 edt(i) = max(edt(i),val)
1355 c determine detrainment rate between 1 and kbcon
1370 if(k >= 1 .and. k < kbcon(i))
then 1371 dz = zi(i,k+1) - zi(i,k)
1372 sumx(i) = sumx(i) + dz
1379 if(islimsk(i) == 1) beta = betal
1381 dz = (sumx(i)+zi(i,1))/float(kbcon(i))
1382 tem = 1./float(kbcon(i))
1383 xlamd(i) = (1.-beta**tem)/dz
1387 c determine downdraft mass flux
1392 if (cnvflg(i) .and. k <= kmax(i)-1)
then 1393 if(k < jmin(i) .and. k >= kbcon(i))
then 1394 dz = zi(i,k+1) - zi(i,k)
1395 ptem = xlamdd - xlamde
1396 etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
1397 else if(k < kbcon(i))
then 1398 dz = zi(i,k+1) - zi(i,k)
1399 ptem = xlamd(i) + xlamdd - xlamde
1400 etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
1406 c--- downdraft moisture properties
1412 hcdo(i,jmn) = heo(i,jmn)
1413 qcdo(i,jmn) = qo(i,jmn)
1414 qrcdo(i,jmn)= qo(i,jmn)
1415 ucdo(i,jmn) = uo(i,jmn)
1416 vcdo(i,jmn) = vo(i,jmn)
1424 if (cnvflg(i) .and. k < jmin(i))
then 1425 dz = zi(i,k+1) - zi(i,k)
1426 if(k >= kbcon(i))
then 1428 tem1 = 0.5 * xlamdd * dz
1431 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
1433 factor = 1. + tem - tem1
1434 hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*
1435 & (heo(i,k)+heo(i,k+1)))/factor
1436 dbyo(i,k) = hcdo(i,k) - heso(i,k)
1438 tem = 0.5 * cm * tem
1442 ucdo(i,k) = ((1.-tem)*ucdo(i,k+1)+ptem*uo(i,k+1)
1443 & +ptem1*uo(i,k))/factor
1444 vcdo(i,k) = ((1.-tem)*vcdo(i,k+1)+ptem*vo(i,k+1)
1445 & +ptem1*vo(i,k))/factor
1453 if (cnvflg(i) .and. k < jmin(i))
then 1454 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1455 qrcdo(i,k) = qeso(i,k)+
1456 & (1./hvap)*(gamma/(1.+gamma))*dbyo(i,k)
1459 dz = zi(i,k+1) - zi(i,k)
1460 if(k >= kbcon(i))
then 1462 tem1 = 0.5 * xlamdd * dz
1465 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
1467 factor = 1. + tem - tem1
1468 qcdo(i,k) = ((1.-tem1)*qrcdo(i,k+1)+tem*0.5*
1469 & (qo(i,k)+qo(i,k+1)))/factor
1476 pwdo(i,k) = etad(i,k) * (qcdo(i,k) - qrcdo(i,k))
1477 pwevo(i) = pwevo(i) + pwdo(i,k)
1482 c--- final downdraft strength dependent on precip
1483 c--- efficiency(edt), normalized condensate(pwav), and
1484 c--- evaporate(pwev)
1489 if(islimsk(i) == 0) edtmax = edtmaxs
1491 if(pwevo(i) < 0.)
then 1492 edto(i) = -edto(i) * pwavo(i) / pwevo(i)
1493 edto(i) = min(edto(i),edtmax)
1500 c--- downdraft cloudwork functions
1505 if (cnvflg(i) .and. k < jmin(i))
then 1506 gamma = el2orc * qeso(i,k) / to(i,k)**2
1511 dz=-1.*(zo(i,k+1)-zo(i,k))
1513 aa1(i)=aa1(i)+edto(i)*dz
1514 & *(g/(cp*dt))*((dhh-dh)/(1.+dg))
1515 & *(1.+delta*cp*dg*dt/hvap)
1518 aa1(i)=aa1(i)+edto(i)*dz
1519 & *g*delta*max(val,(qeso(i,k)-qo(i,k)))
1525 if(cnvflg(i) .and. aa1(i) <= 0.)
then 1532 totflg = totflg .and. (.not. cnvflg(i))
1537 c--- what would the change be, that a cloud with unit mass
1538 c--- will
do to the environment?
1543 if(cnvflg(i) .and. k <= kmax(i))
then 1553 dp = 1000. * del(i,1)
1554 dellah(i,1) = edto(i) * etad(i,1) * (hcdo(i,1)
1555 & - heo(i,1)) * g / dp
1556 dellaq(i,1) = edto(i) * etad(i,1) * (qrcdo(i,1)
1557 & - qo(i,1)) * g / dp
1558 dellau(i,1) = edto(i) * etad(i,1) * (ucdo(i,1)
1559 & - uo(i,1)) * g / dp
1560 dellav(i,1) = edto(i) * etad(i,1) * (vcdo(i,1)
1561 & - vo(i,1)) * g / dp
1565 c--- changed due to subsidence and entrainment
1569 if (cnvflg(i) .and. k < ktcon(i))
then 1571 if(k <= kb(i)) aup = 0.
1573 if(k > jmin(i)) adw = 0.
1574 dp = 1000. * del(i,k)
1575 dz = zi(i,k) - zi(i,k-1)
1578 dv2h = .5 * (heo(i,k) + heo(i,k-1))
1581 dv2q = .5 * (qo(i,k) + qo(i,k-1))
1584 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1))
1585 tem1 = 0.5 * (xlamud(i,k)+xlamud(i,k-1))
1587 if(k <= kbcon(i))
then 1589 ptem1 = xlamd(i)+xlamdd
1595 dellah(i,k) = dellah(i,k) +
1596 & ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1h
1597 & - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3h
1598 & - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2h*dz
1599 & + aup*tem1*eta(i,k-1)*.5*(hcko(i,k)+hcko(i,k-1))*dz
1600 & + adw*edto(i)*ptem1*etad(i,k)*.5*(hcdo(i,k)+hcdo(i,k-1))*dz
1603 dellaq(i,k) = dellaq(i,k) +
1604 & ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1q
1605 & - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3q
1606 & - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2q*dz
1607 & + aup*tem1*eta(i,k-1)*.5*(qrcko(i,k)+qcko(i,k-1))*dz
1608 & + adw*edto(i)*ptem1*etad(i,k)*.5*(qrcdo(i,k)+qcdo(i,k-1))*dz
1611 tem1=eta(i,k)*(uo(i,k)-ucko(i,k))
1612 tem2=eta(i,k-1)*(uo(i,k-1)-ucko(i,k-1))
1613 ptem1=etad(i,k)*(uo(i,k)-ucdo(i,k))
1614 ptem2=etad(i,k-1)*(uo(i,k-1)-ucdo(i,k-1))
1615 dellau(i,k) = dellau(i,k) +
1616 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*g/dp
1618 tem1=eta(i,k)*(vo(i,k)-vcko(i,k))
1619 tem2=eta(i,k-1)*(vo(i,k-1)-vcko(i,k-1))
1620 ptem1=etad(i,k)*(vo(i,k)-vcdo(i,k))
1621 ptem2=etad(i,k-1)*(vo(i,k-1)-vcdo(i,k-1))
1622 dellav(i,k) = dellav(i,k) +
1623 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*g/dp
1634 dp = 1000. * del(i,indx)
1635 dv1h = heo(i,indx-1)
1636 dellah(i,indx) = eta(i,indx-1) *
1637 & (hcko(i,indx-1) - dv1h) * g / dp
1639 dellaq(i,indx) = eta(i,indx-1) *
1640 & (qcko(i,indx-1) - dv1q) * g / dp
1641 dellau(i,indx) = eta(i,indx-1) *
1642 & (ucko(i,indx-1) - uo(i,indx-1)) * g / dp
1643 dellav(i,indx) = eta(i,indx-1) *
1644 & (vcko(i,indx-1) - vo(i,indx-1)) * g / dp
1648 dellal(i,indx) = eta(i,indx-1) *
1649 & qlko_ktcon(i) * g / dp
1653 c------- final changed variable per unit mass flux
1658 asqecflg(i) = cnvflg(i)
1659 if(asqecflg(i) .and. gdx(i) < dxcrtas)
then 1660 asqecflg(i) = .false.
1667 if (asqecflg(i) .and. k <= kmax(i))
then 1668 if(k > ktcon(i))
then 1672 if(k <= ktcon(i))
then 1673 qo(i,k) = dellaq(i,k) * mbdt(i) + q1(i,k)
1674 dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
1675 to(i,k) = dellat * mbdt(i) + t1(i,k)
1677 qo(i,k) = max(qo(i,k), val )
1684 c--- the above changed environment is now used to calulate the
1685 c--- effect the arbitrary cloud(with unit mass flux)
1686 c--- would have on the stability,
1687 c--- which
then is used to calculate the
real mass flux,
1688 c--- necessary to keep this change in balance with the large-scale
1689 c--- destabilization.
1691 c--- environmental conditions again, first heights
1698 if(asqecflg(i) .and. k <= kmax(i))
then 1699 qeso(i,k) = 0.01 * fpvs(to(i,k))
1700 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k)+epsm1*qeso(i,k))
1702 qeso(i,k) = max(qeso(i,k), val )
1708 c--- moist static energy
1713 if(asqecflg(i) .and. k <= kmax(i)-1)
then 1714 dz = .5 * (zo(i,k+1) - zo(i,k))
1715 dp = .5 * (pfld(i,k+1) - pfld(i,k))
1716 es = 0.01 * fpvs(to(i,k+1))
1717 pprime = pfld(i,k+1) + epsm1 * es
1718 qs = eps * es / pprime
1719 dqsdp = - qs / pprime
1720 desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
1721 dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
1722 gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
1723 dt = (g * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
1724 dq = dqsdt * dt + dqsdp * dp
1725 to(i,k) = to(i,k+1) + dt
1726 qo(i,k) = qo(i,k+1) + dq
1727 po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
1733 if(asqecflg(i) .and. k <= kmax(i)-1)
then 1734 qeso(i,k) = 0.01 * fpvs(to(i,k))
1735 qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1 * qeso(i,k))
1737 qeso(i,k) = max(qeso(i,k), val1)
1739 qo(i,k) = max(qo(i,k), val2 )
1741 heo(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +
1742 & cp * to(i,k) + hvap * qo(i,k)
1743 heso(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +
1744 & cp * to(i,k) + hvap * qeso(i,k)
1749 if(asqecflg(i))
then 1751 heo(i,k) = g * zo(i,k) + cp * to(i,k) + hvap * qo(i,k)
1752 heso(i,k) = g * zo(i,k) + cp * to(i,k) + hvap * qeso(i,k)
1753 c heo(i,k) = min(heo(i,k),heso(i,k))
1757 c**************************** static control
1759 c------- moisture and cloud work functions
1763 if(asqecflg(i))
then 1770 if(asqecflg(i))
then 1772 hcko(i,indx) = heo(i,indx)
1773 qcko(i,indx) = qo(i,indx)
1778 if (asqecflg(i))
then 1779 if(k > kb(i) .and. k <= ktcon(i))
then 1780 dz = zi(i,k) - zi(i,k-1)
1781 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1782 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
1783 factor = 1. + tem - tem1
1784 hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*
1785 & (heo(i,k)+heo(i,k-1)))/factor
1792 if (asqecflg(i))
then 1793 if(k > kb(i) .and. k < ktcon(i))
then 1794 dz = zi(i,k) - zi(i,k-1)
1795 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1796 xdby = hcko(i,k) - heso(i,k)
1798 & + gamma * xdby / (hvap * (1. + gamma))
1800 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1801 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
1802 factor = 1. + tem - tem1
1803 qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*
1804 & (qo(i,k)+qo(i,k-1)))/factor
1806 dq = eta(i,k) * (qcko(i,k) - xqrch)
1808 if(k >= kbcon(i) .and. dq > 0.)
then 1809 etah = .5 * (eta(i,k) + eta(i,k-1))
1810 if(ncloud > 0 .and. k > jmin(i))
then 1811 ptem = c0t(i,k) + c1
1812 qlk = dq / (eta(i,k) + etah * ptem * dz)
1814 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1816 if(k < ktcon1(i))
then 1818 xaa0(i) = xaa0(i) - dz * g * qlk
1820 qcko(i,k) = qlk + xqrch
1821 xpw = etah * c0t(i,k) * dz * qlk
1822 xpwav(i) = xpwav(i) + xpw
1825 if(k >= kbcon(i) .and. k < ktcon1(i))
then 1826 dz1 = zo(i,k+1) - zo(i,k)
1827 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1828 rfact = 1. + delta * cp * gamma
1832 & + dz1 * (g / (cp * to(i,k)))
1833 & * xdby / (1. + gamma)
1839 & max(val,(qeso(i,k) - qo(i,k)))
1845 c------- downdraft calculations
1847 c--- downdraft moisture properties
1851 if(asqecflg(i))
then 1853 hcdo(i,jmn) = heo(i,jmn)
1854 qcdo(i,jmn) = qo(i,jmn)
1855 qrcd(i,jmn) = qo(i,jmn)
1862 if (asqecflg(i) .and. k < jmin(i))
then 1863 dz = zi(i,k+1) - zi(i,k)
1864 if(k >= kbcon(i))
then 1866 tem1 = 0.5 * xlamdd * dz
1869 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
1871 factor = 1. + tem - tem1
1872 hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*
1873 & (heo(i,k)+heo(i,k+1)))/factor
1880 if (asqecflg(i) .and. k < jmin(i))
then 1883 gamma = el2orc * dq / dt**2
1884 dh = hcdo(i,k) - heso(i,k)
1885 qrcd(i,k)=dq+(1./hvap)*(gamma/(1.+gamma))*dh
1888 dz = zi(i,k+1) - zi(i,k)
1889 if(k >= kbcon(i))
then 1891 tem1 = 0.5 * xlamdd * dz
1894 tem1 = 0.5 * (xlamd(i)+xlamdd) * dz
1896 factor = 1. + tem - tem1
1897 qcdo(i,k) = ((1.-tem1)*qrcd(i,k+1)+tem*0.5*
1898 & (qo(i,k)+qo(i,k+1)))/factor
1905 xpwd = etad(i,k) * (qcdo(i,k) - qrcd(i,k))
1906 xpwev(i) = xpwev(i) + xpwd
1913 if(islimsk(i) == 0) edtmax = edtmaxs
1914 if(asqecflg(i))
then 1915 if(xpwev(i) >= 0.)
then 1918 edtx(i) = -edtx(i) * xpwav(i) / xpwev(i)
1919 edtx(i) = min(edtx(i),edtmax)
1925 c--- downdraft cloudwork functions
1930 if (asqecflg(i) .and. k < jmin(i))
then 1931 gamma = el2orc * qeso(i,k) / to(i,k)**2
1936 dz=-1.*(zo(i,k+1)-zo(i,k))
1938 xaa0(i)=xaa0(i)+edtx(i)*dz
1939 & *(g/(cp*dt))*((dhh-dh)/(1.+dg))
1940 & *(1.+delta*cp*dg*dt/hvap)
1943 xaa0(i)=xaa0(i)+edtx(i)*dz
1944 & *g*delta*max(val,(qeso(i,k)-qo(i,k)))
1949 c calculate critical cloud work function
1981 c modify critical cloud workfunction by cloud base vertical velocity
1996 c modify acrtfct(i) by colume mean rh
if rhbar(i) is greater than 80 percent
1998 c
if(rhbar(i) >= .8)
then 1999 c acrtfct(i) = acrtfct(i) * (.9 - min(rhbar(i),.9)) * 10.
2002 c modify adjustment time scale by cloud base vertical velocity
2006 c dtconv(i) = max(dtconv(i), dt2)
2007 c dtconv(i) = 1800. * (pdot(i) - w2) / (w1 - w2)
2020 tem = zi(i,ktcon1(i)) - zi(i,kbcon1(i))
2021 dtconv(i) = tem / wc(i)
2022 tfac = 1. + gdx(i) / 75000.
2023 dtconv(i) = tfac * dtconv(i)
2024 dtconv(i) = max(dtconv(i),dtmin)
2025 dtconv(i) = min(dtconv(i),dtmax)
2039 if(k >= kbcon1(i) .and. k < ktcon1(i))
then 2040 dz = zi(i,k) - zi(i,k-1)
2041 tem = sqrt(u1(i,k)*u1(i,k)+v1(i,k)*v1(i,k))
2042 umean(i) = umean(i) + tem * dz
2043 sumx(i) = sumx(i) + dz
2050 umean(i) = umean(i) / sumx(i)
2051 umean(i) = max(umean(i), 1.)
2052 tauadv(i) = gdx(i) / umean(i)
2058 if(cnvflg(i) .and. .not.asqecflg(i))
then 2060 rho = po(i,k)*100. / (rd*to(i,k))
2061 tfac = tauadv(i) / dtconv(i)
2062 tfac = min(tfac, 1.)
2063 xmb(i) = tfac*betaw*rho*wc(i)
2072 if(asqecflg(i))
then 2074 fld(i)=aa1(i)/dtconv(i)
2075 if(fld(i) <= 0.)
then 2076 asqecflg(i) = .false.
2085 if(asqecflg(i))
then 2086 c xaa0(i) = max(xaa0(i),0.)
2087 xk(i) = (xaa0(i) - aa1(i)) / mbdt(i)
2088 if(xk(i) >= 0.)
then 2089 asqecflg(i) = .false.
2094 c--- kernel, cloud base mass flux
2102 if(asqecflg(i))
then 2103 tfac = tauadv(i) / dtconv(i)
2104 tfac = min(tfac, 1.)
2105 xmb(i) = -tfac * fld(i) / xk(i)
2113 totflg = totflg .and. (.not. cnvflg(i))
2121 tem = min(max(xlamx(i), 7.e-5), 3.e-4)
2123 tem1 = 3.14 * tem * tem
2124 sigmagfm(i) = tem1 / garea(i)
2125 sigmagfm(i) = max(sigmagfm(i), 0.001)
2126 sigmagfm(i) = min(sigmagfm(i), 0.999)
2133 if (gdx(i) < dxcrtuf)
then 2134 scaldfunc(i) = (1.-sigmagfm(i)) * (1.-sigmagfm(i))
2135 scaldfunc(i) = max(min(scaldfunc(i), 1.0), 0.)
2139 xmb(i) = xmb(i) * scaldfunc(i)
2140 xmb(i) = min(xmb(i),xmbmax(i))
2144 c restore to,qo,uo,vo to t1,q1,u1,v1 in
case convection stops
2148 if (cnvflg(i) .and. k <= kmax(i))
then 2153 qeso(i,k) = 0.01 * fpvs(t1(i,k))
2154 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
2156 qeso(i,k) = max(qeso(i,k), val )
2162 c--- feedback: simply the changes from the cloud with unit mass flux
2163 c--- multiplied by the mass flux necessary to keep the
2164 c--- equilibrium with the larger-scale.
2180 if (cnvflg(i) .and. k <= kmax(i))
then 2181 if(k <= ktcon(i))
then 2182 dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
2183 t1(i,k) = t1(i,k) + dellat * xmb(i) * dt2
2184 q1(i,k) = q1(i,k) + dellaq(i,k) * xmb(i) * dt2
2188 u1(i,k) = u1(i,k) + dellau(i,k) * xmb(i) * dt2
2189 v1(i,k) = v1(i,k) + dellav(i,k) * xmb(i) * dt2
2190 dp = 1000. * del(i,k)
2191 delhbar(i) = delhbar(i) + dellah(i,k)*xmb(i)*dp/g
2192 delqbar(i) = delqbar(i) + dellaq(i,k)*xmb(i)*dp/g
2193 deltbar(i) = deltbar(i) + dellat*xmb(i)*dp/g
2194 delubar(i) = delubar(i) + dellau(i,k)*xmb(i)*dp/g
2195 delvbar(i) = delvbar(i) + dellav(i,k)*xmb(i)*dp/g
2203 if (cnvflg(i) .and. k <= kmax(i))
then 2204 if(k <= ktcon(i))
then 2205 qeso(i,k) = 0.01 * fpvs(t1(i,k))
2206 qeso(i,k) = eps * qeso(i,k)/(pfld(i,k) + epsm1*qeso(i,k))
2208 qeso(i,k) = max(qeso(i,k), val )
2223 if (cnvflg(i) .and. k <= kmax(i))
then 2224 if(k < ktcon(i))
then 2226 if(k <= kb(i)) aup = 0.
2228 if(k >= jmin(i)) adw = 0.
2229 rain = aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
2230 rntot(i) = rntot(i) + rain * xmb(i) * .001 * dt2
2240 if (k <= kmax(i))
then 2244 if(cnvflg(i) .and. k < ktcon(i))
then 2246 if(k <= kb(i)) aup = 0.
2248 if(k >= jmin(i)) adw = 0.
2249 rain = aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
2250 rn(i) = rn(i) + rain * xmb(i) * .001 * dt2
2252 if(flg(i) .and. k < ktcon(i))
then 2253 evef = edt(i) * evfact
2254 if(islimsk(i) == 1) evef=edt(i) * evfactl
2256 c
if(islimsk(i) == 1) evef = 0.
2257 qcond(i) = evef * (q1(i,k) - qeso(i,k))
2258 & / (1. + el2orc * qeso(i,k) / t1(i,k)**2)
2259 dp = 1000. * del(i,k)
2260 if(rn(i) > 0. .and. qcond(i) < 0.)
then 2261 qevap(i) = -qcond(i) * (1.-exp(-.32*sqrt(dt2*rn(i))))
2262 qevap(i) = min(qevap(i), rn(i)*1000.*g/dp)
2263 delq2(i) = delqev(i) + .001 * qevap(i) * dp / g
2265 if(rn(i) > 0. .and. qcond(i) < 0. .and.
2266 & delq2(i) > rntot(i))
then 2267 qevap(i) = 1000.* g * (rntot(i) - delqev(i)) / dp
2270 if(rn(i) > 0. .and. qevap(i) > 0.)
then 2271 q1(i,k) = q1(i,k) + qevap(i)
2272 t1(i,k) = t1(i,k) - elocp * qevap(i)
2273 rn(i) = rn(i) - .001 * qevap(i) * dp / g
2274 deltv(i) = - elocp*qevap(i)/dt2
2275 delq(i) = + qevap(i)/dt2
2276 delqev(i) = delqev(i) + .001*dp*qevap(i)/g
2278 delqbar(i) = delqbar(i) + delq(i)*dp/g
2279 deltbar(i) = deltbar(i) + deltv(i)*dp/g
2296 c precipitation rate converted to actual precip
2297 c in unit of m instead of kg
2302 c in the event of upper level rain evaporation and lower level downdraft
2303 c moistening, rn can become negative, in this
case, we back out of the
2304 c heating and the moistening
2306 if(rn(i) < 0. .and. .not.flg(i)) rn(i) = 0.
2307 if(rn(i) <= 0.)
then 2318 c convective cloud water
2323 if (cnvflg(i) .and. rn(i) > 0.)
then 2324 if (k >= kbcon(i) .and. k < ktcon(i))
then 2325 cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
2331 c convective cloud cover
2336 if (cnvflg(i) .and. rn(i) > 0.)
then 2337 if (k >= kbcon(i) .and. k < ktcon(i))
then 2338 cnvc(i,k) = 0.04 * log(1. + 675. * eta(i,k) * xmb(i))
2339 cnvc(i,k) = min(cnvc(i,k), 0.6)
2340 cnvc(i,k) = max(cnvc(i,k), 0.0)
2349 if (ncloud > 0)
then 2353 if (cnvflg(i) .and. rn(i) > 0.)
then 2355 if (k >= kbcon(i) .and. k <= ktcon(i))
then 2356 tem = dellal(i,k) * xmb(i) * dt2
2357 tem1 = max(0.0, min(1.0, (tcr-t1(i,k))*tcrf))
2358 if (ql(i,k,2) > -999.0)
then 2359 ql(i,k,1) = ql(i,k,1) + tem * tem1
2360 ql(i,k,2) = ql(i,k,2) + tem *(1.0-tem1)
2362 ql(i,k,1) = ql(i,k,1) + tem
2374 if(cnvflg(i) .and. rn(i) <= 0.)
then 2375 if (k <= kmax(i))
then 2392 if(cnvflg(i) .and. rn(i) > 0.)
then 2393 if(k >= kb(i) .and. k < ktop(i))
then 2394 ud_mf(i,k) = eta(i,k) * xmb(i) * dt2
2401 if(cnvflg(i) .and. rn(i) > 0.)
then 2403 dt_mf(i,k) = ud_mf(i,k)
2409 if(cnvflg(i) .and. rn(i) > 0.)
then 2410 if(k >= 1 .and. k <= jmin(i))
then 2411 dd_mf(i,k) = edto(i) * etad(i,k) * xmb(i) * dt2
subroutine samfdeepcnv(im, ix, km, delt, delp, prslp, psp, phil, ql,
This subroutine contains the entirety of the SAMF deep convection scheme.