77 & tmf,qmicro,itc,ntc,cliq,cp,cvap, &
78 & eps,epsm1,fv,grav,hvap,rd,rv, &
79 & t0c,delt,ntk,ntr,delp, &
80 & prslp,psp,phil,tkeh,qtr,prevsq,q,q1,t1,u1,v1,fscav, &
81 & hwrf_samfdeep,progsigma,progomega,cldwrk,rn,kbot,ktop,kcnv, &
82 & islimsk,garea,dot,ncloud,hpbl,ud_mf,dd_mf,dt_mf,cnvw,cnvc, &
83 & QLCN, QICN, w_upi, cf_upi, CNV_MFD, &
84 & CNV_DQLDT,CLCN,CNV_FICE,CNV_NDROP,CNV_NICE,mp_phys,mp_phys_mg,&
85 & clam,c0s,c1,betal,betas,evef,pgcon,asolfac,cscale, &
86 & do_ca, ca_closure, ca_entr, ca_trigger, nthresh,ca_deep, &
87 & rainevap,sigmain,sigmaout,omegain,omegaout,betadcu,betamcu, &
88 & betascu,maxMF,do_mynnedmf,sigmab_coldstart,errmsg,errflg)
91 use machine ,
only : kind_phys
92 use funcphys ,
only : fpvs
96 integer,
intent(in) :: im, km, itc, ntc, ntk, ntr, ncloud
97 integer,
intent(in) :: islimsk(:)
98 real(kind=kind_phys),
intent(in) :: cliq, cp, cvap, eps, epsm1, &
99 & fv, grav, hvap, rd, rv, t0c
100 real(kind=kind_phys),
intent(in) :: delt, cscale
101 real(kind=kind_phys),
intent(in) :: psp(:), delp(:,:), &
102 & prslp(:,:), garea(:), hpbl(:), dot(:,:), phil(:,:)
103 real(kind=kind_phys),
dimension(:),
intent(in) :: fscav
104 logical,
intent(in) :: first_time_step,restart,hwrf_samfdeep, &
105 & progsigma,progomega,do_mynnedmf,sigmab_coldstart
106 real(kind=kind_phys),
intent(in) :: nthresh,betadcu,betamcu, &
108 real(kind=kind_phys),
intent(in),
optional :: ca_deep(:)
109 real(kind=kind_phys),
intent(in),
optional :: sigmain(:,:), &
110 & qmicro(:,:), prevsq(:,:), omegain(:,:)
111 real(kind=kind_phys),
intent(in) :: tmf(:,:,:),q(:,:)
112 real(kind=kind_phys),
dimension (:),
intent(in),
optional :: maxmf
113 real(kind=kind_phys),
intent(out) :: rainevap(:)
114 real(kind=kind_phys),
intent(inout),
optional :: sigmaout(:,:), &
116 logical,
intent(in) :: do_ca,ca_closure,ca_entr,ca_trigger
117 integer,
intent(inout) :: kcnv(:)
119 real(kind=kind_phys),
intent(inout) :: qtr(:,:,:), &
120 & q1(:,:), t1(:,:), u1(:,:), v1(:,:), &
121 & cnvw(:,:), cnvc(:,:), tkeh(:,:)
123 integer,
intent(out) :: kbot(:), ktop(:)
124 real(kind=kind_phys),
intent(out) :: cldwrk(:), &
126 & dd_mf(:,:), dt_mf(:,:)
127 real(kind=kind_phys),
intent(out) :: ud_mf(:,:)
131 real(kind=kind_phys),
dimension(:,:),
intent(inout),
optional :: &
132 & qlcn, qicn, w_upi, cnv_mfd, cnv_dqldt, clcn &
133 &, cnv_fice, cnv_ndrop, cnv_nice, cf_upi
135 integer,
intent(in) :: mp_phys, mp_phys_mg
137 real(kind=kind_phys),
intent(in) :: clam, c0s, c1, &
138 & betal, betas, asolfac, &
140 character(len=*),
intent(out) :: errmsg
141 integer,
intent(out) :: errflg
144 integer i, indx, jmn, k, kk, km1, n
147 real(kind=kind_phys) clamd, tkemx, tkemn, dtke,
154 real(kind=kind_phys) adw, aup, aafac, d0,
157 & dq, dqsdp, dqsdt, dt,
161 & dz, dz1, e1, edtmax,
162 & edtmaxl, edtmaxs, el2orc, elocp,
166 & fact1, fact2, factor,
167 & gamma, pprime, cm, cq,
169 & rain, rfact, shear, tfac,
174 & rho, betaw, tauadv,
177 & xqrch, tem, tem1, tem2,
180 integer kb(im), kb1(im), kbcon(im), kbcon1(im),
181 & ktcon(im), ktcon1(im), ktconn(im),
182 & jmin(im), lmin(im), kbmax(im),
183 & kbm(im), kmax(im), kd94(im)
186 real(kind=kind_phys) aa1(im), tkemean(im),clamt(im),
187 & ps(im), del(im,km), prsl(im,km),
188 & umean(im), advfac(im), gdx(im),
189 & delhbar(im), delq(im), delq2(im),
190 & delqbar(im), delqev(im), deltbar(im),
191 & deltv(im), dtconv(im), edt(im),
192 & edto(im), edtx(im), fld(im),
193 & hcdo(im,km), hmax(im), hmin(im),
194 & ucdo(im,km), vcdo(im,km),aa2(im),
196 & pdot(im), po(im,km),
197 & pwavo(im), pwevo(im), mbdt(im),
198 & qcdo(im,km), qcond(im), qevap(im),
199 & rntot(im), vshear(im), xaa0(im),
200 & xlamd(im), xlamdet(im),xlamddt(im),
201 & cxlamet(im), cxlamdt(im),
203 & xmb(im), xmbmax(im), xpwav(im),
204 & xpwev(im), xlamx(im), delebar(im,ntr),
206 & delubar(im), delvbar(im)
208 real(kind=kind_phys) c0(im), sfcpbl(im)
210 real(kind=kind_phys) cinpcr, cinpcrmx, cinpcrmn,
211 & cinacr, cinacrmx, cinacrmn,
217 real(kind=kind_phys) bb1, bb2, csmf, wucb
220 real(kind=kind_phys) omega_u(im,km),zdqca(im,km),tmfq(im,km),
221 & omegac(im),zeta(im,km),dbyo1(im,km),sigmab(im),qadv(im,km),
223 real(kind=kind_phys) gravinv,invdelt,sigmind,sigminm,sigmins
224 parameter(sigmind=0.01,sigmins=0.03,sigminm=0.01)
225 logical flag_shallow, flag_mid
241 parameter(cm=1.0,cq=1.0)
243 parameter(clamd=0.03,tkemx=0.65,tkemn=0.05)
244 parameter(clamca=0.03)
245 parameter(dtke=tkemx-tkemn)
246 parameter(cthk=200.,dthk=25.,sfclfac=0.2,rhcrt=0.75)
247 parameter(cinpcrmx=180.,cinpcrmn=120.)
249 parameter(cinacrmx=-120.,cinacrmn=-80.)
250 parameter(bb1=4.0,bb2=0.8,csmf=0.2)
251 parameter(tkcrt=2.,cmxfac=15.)
256 real(kind=kind_phys) pfld(im,km), to(im,km), qo(im,km),
257 & uo(im,km), vo(im,km), qeso(im,km),
258 & ctr(im,km,ntr), ctro(im,km,ntr)
261c variables for tracer wet deposition,
262 real(kind=kind_phys),
dimension(im,km,ntc) :: chem_c, chem_pw,
266 real(kind=kind_phys) wu2(im,km), buo(im,km), drag(im,km),
267 & wush(im,km), wc(im)
270 real(kind=kind_phys) scaldfunc(im), sigmagfm(im)
274 real(kind=kind_phys) qlko_ktcon(im), dellal(im,km), tvo(im,km),
275 & dbyo(im,km), zo(im,km),
276 & xlamue(im,km), xlamud(im,km),
277 & fent1(im,km), fent2(im,km),
278 & rh(im,km), frh(im,km),
279 & heo(im,km), heso(im,km),
280 & qrcd(im,km), dellah(im,km), dellaq(im,km),
282 & dellau(im,km), dellav(im,km), hcko(im,km),
283 & ucko(im,km), vcko(im,km), qcko(im,km),
284 & ecko(im,km,ntr),ercko(im,km,ntr),
285 & eta(im,km), etad(im,km), zi(im,km),
286 & qrcko(im,km), qrcdo(im,km),
287 & pwo(im,km), pwdo(im,km), c0t(im,km),
288 & tx1(im), sumx(im), cnvwt(im,km)
294 real(kind=kind_phys) q_diff(im,0:km-1), e_diff(im,0:km-1,ntr),
296 real(kind=kind_phys) rrkp, phkp
297 real(kind=kind_phys) tsumn(im), tsump(im), rtnp(im)
299 logical do_aerosols, totflg, cnvflg(im), asqecflg(im), flg(im)
310c
data acritt/.203,.515,.521,.566,.625,.665,.659,.688,
311c & .743,.813,.886,.947,1.138,1.377,1.896/
312 real(kind=kind_phys) tf, tcr, tcrf
313 parameter(tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf))
323 el2orc = hvap*hvap/(rv*cp)
325 fact1 = (cvap-cliq)/rv
326 fact2 = hvap/rv-fact1*t0c
327c-----------------------------------------------------------------------
329 if(hwrf_samfdeep)
then
330 do_aerosols = .false.
332 do_aerosols = (itc > 0) .and. (ntc > 0) .and. (ntr > 0)
333 if (do_aerosols) do_aerosols = (ntr >= itc + ntc - 3)
336c-----------------------------------------------------------------------
360 if(maxmf(i).gt.0.)cnvflg(i)=.false.
362 sfcpbl(i) = sfclfac * hpbl(i)
394 gdx(i) = sqrt(garea(i))
404 if (hwrf_samfdeep)
then
414 if(islimsk(i) == 1)
then
424 if(t1(i,k) > 273.16)
then
427 tem = d0 * (t1(i,k) - 273.16)
429 c0t(i,k) = c0(i) * tem1
449 if(mp_phys == mp_phys_mg)
then
452 qlcn(i,k) = qtr(i,k,2)
453 qicn(i,k) = qtr(i,k,1)
474 dtmin = max(dt2, val )
477 dtmax = max(dt2, val )
484 if (hwrf_samfdeep)
then
507c define top layer for search of the downdraft originating layer
508c and the maximum thetae for updraft
521 if (prsl(i,k)*tx1(i) > 0.04) kmax(i) = k + 1
522 if (prsl(i,k)*tx1(i) > 0.45) kbmax(i) = k + 1
523 if (prsl(i,k)*tx1(i) > 0.70) kbm(i) = k + 1
524 if (prsl(i,k)*tx1(i) > 0.94) kd94(i) = k + 1
528 kmax(i) = min(km,kmax(i))
529 kbmax(i) = min(kbmax(i),kmax(i))
530 kbm(i) = min(kbm(i),kmax(i))
531 kd94(i) = min(kd94(i),kmax(i))
534c hydrostatic height assume zero terr and initially assume
535c updraft entrainment rate as an inverse
function of height
540 zo(i,k) = phil(i,k) / grav
546 zi(i,k) = 0.5*(zo(i,k)+zo(i,k+1))
549 if (hwrf_samfdeep)
then
552 xlamue(i,k) = clam / zi(i,k)
558c convert surface pressure to mb from cb
563 if (k <= kmax(i))
then
564 pfld(i,k) = prsl(i,k) * 10.0
613 if(.not.hwrf_samfdeep)
then
618 if (k <= kmax(i))
then
619 ctr(i,k,kk) = qtr(i,k,n)
620 ctro(i,k,kk) = qtr(i,k,n)
633 if (k <= kmax(i))
then
634 qeso(i,k) = 0.01 * fpvs(to(i,k))
635 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
637 qeso(i,k) = max(qeso(i,k), val1)
639 qo(i,k) = max(qo(i,k), val2 )
646c compute moist static
energy
651 if (k <= kmax(i))
then
653 tem = phil(i,k) + cp * to(i,k)
654 heo(i,k) = tem + hvap * qo(i,k)
655 heso(i,k) = tem + hvap * qeso(i,k)
656c heo(i,k) = min(heo(i,k),heso(i,k))
661c determine level with largest moist static
energy
662c this is the level
where updraft starts
672 if (flg(i) .and. zo(i,k) <= sfcpbl(i))
then
680 kb1(i) = min(kb1(i),kbm(i))
685 hmax(i) = heo(i,kb1(i))
690 if (k > kb1(i) .and. k <= kbm(i))
then
691 if(heo(i,k) > hmax(i))
then
702 if (k <= kmax(i)-1)
then
703 dz = .5 * (zo(i,k+1) - zo(i,k))
704 dp = .5 * (pfld(i,k+1) - pfld(i,k))
705 es = 0.01 * fpvs(to(i,k+1))
706 pprime = pfld(i,k+1) + epsm1 * es
707 qs = eps * es / pprime
708 dqsdp = - qs / pprime
709 desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
710 dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
711 gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
712 dt = (grav*dz + hvap*dqsdp*dp) / (cp * (1. + gamma))
713 dq = dqsdt * dt + dqsdp * dp
714 to(i,k) = to(i,k+1) + dt
715 qo(i,k) = qo(i,k+1) + dq
716 po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
724 if (k <= kmax(i)-1)
then
725 qeso(i,k) = 0.01 * fpvs(to(i,k))
726 qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1*qeso(i,k))
728 qeso(i,k) = max(qeso(i,k), val1)
730 qo(i,k) = max(qo(i,k), val2 )
732 rh(i,k) = min(qo(i,k)/qeso(i,k), 1.)
733 frh(i,k) = 1. - rh(i,k)
734 heo(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
735 & cp * to(i,k) + hvap * qo(i,k)
736 heso(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
737 & cp * to(i,k) + hvap * qeso(i,k)
738 uo(i,k) = .5 * (uo(i,k) + uo(i,k+1))
739 vo(i,k) = .5 * (vo(i,k) + vo(i,k+1))
743 if (.not.hwrf_samfdeep)
then
747 if (k <= kmax(i)-1)
then
748 ctro(i,k,n) = .5 * (ctro(i,k,n) + ctro(i,k+1,n))
755c look for the level of free convection as cloud base
764 if (flg(i) .and. k <= kbmax(i))
then
765 if(k > kb(i) .and. heo(i,kb(i)) > heso(i,k))
then
775 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
780 totflg = totflg .and. (.not. cnvflg(i))
788 pdot(i) = 0.01 * dot(i,kbcon(i))
792c turn off convection
if pressure depth between parcel source level
793c and cloud base is larger than a critical
value, cinpcr
797 if(islimsk(i) == 1)
then
808 if(pdot(i) <= w4)
then
809 tem = (pdot(i) - w4) / (w3 - w4)
810 elseif(pdot(i) >= -w4)
then
811 tem = - (pdot(i) + w4) / (w4 - w3)
820 ptem1= .5*(cinpcrmx-cinpcrmn)
821 cinpcr = cinpcrmx - ptem * ptem1
822 tem1 = pfld(i,kb(i)) - pfld(i,kbcon(i))
823 if(tem1 > cinpcr .and.
824 & zi(i,kbcon(i)) > hpbl(i))
then
830 if(do_ca .and. ca_trigger)
then
832 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
833 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
839 totflg = totflg .and. (.not. cnvflg(i))
854 if (cnvflg(i) .and. k <= kbm(i))
then
855 if(heo(i,k) > hmax(i))
then
865 if(flg(i)) kbcon(i) = kmax(i)
869 if (flg(i) .and. k <= kbmax(i))
then
870 if(k > kb(i) .and. heo(i,kb(i)) > heso(i,k))
then
879 if(cnvflg(i) .and. kbcon(i) == kmax(i))
then
884 if(do_ca .and. ca_trigger)
then
886 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
887 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
893 totflg = totflg .and. (.not. cnvflg(i))
900 pdot(i) = 0.01 * dot(i,kbcon(i))
913 if(k >= kb(i) .and. k < kbcon(i))
then
914 dz = zo(i,k+1) - zo(i,k)
915 rhbar(i) = rhbar(i) + rh(i,k) * dz
916 sumx(i) = sumx(i) + dz
923 rhbar(i) = rhbar(i) / sumx(i)
924 if(rhbar(i) < rhcrt)
then
930 if(do_ca .and. ca_trigger)
then
932 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
933 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
939 totflg = totflg .and. (.not. cnvflg(i))
947 if(.not. hwrf_samfdeep .and. ntk > 0)
then
958 if(k >= kb(i) .and. k < kbcon(i))
then
959 dz = zo(i,k+1) - zo(i,k)
960 tkemean(i) = tkemean(i) + tkeh(i,k) * dz
961 sumx(i) = sumx(i) + dz
969 tkemean(i) = tkemean(i) / sumx(i)
970 if(tkemean(i) > tkemx)
then
971 clamt(i) = clam + clamd
972 else if(tkemean(i) < tkemn)
then
973 clamt(i) = clam - clamd
975 tem = tkemx - tkemean(i)
976 tem1 = 1. - 2. * tem / dtke
977 clamt(i) = clam + clamd * tem1
982 if(do_ca .and. ca_entr)
then
985 if(ca_deep(i) > nthresh)
then
986 clamt(i) = clam - clamca
1000 if(tkemean(i) > tkcrt)
then
1001 tem = 1. + tkemean(i)/tkcrt
1002 tem1 = min(tem, cmxfac)
1003 clamt(i) = tem1 * clam
1004 xlamdet(i) = tem1 * xlamdet(i)
1005 xlamddt(i) = tem1 * xlamddt(i)
1006 cxlamet(i) = tem1 * cxlamet(i)
1007 cxlamdt(i) = tem1 * cxlamdt(i)
1014 if(do_ca .and. ca_entr)
then
1017 if(ca_deep(i) > nthresh)
then
1018 clamt(i) = clam - clamca
1049 dz =zo(i,k+1) - zo(i,k)
1050 xlamue(i,k) = clamt(i) / (zi(i,k) + dz)
1051 xlamue(i,k) = max(xlamue(i,k), crtlame)
1056c assume that updraft entrainment rate above cloud base is
1057c same as that at cloud base
1064 if (hwrf_samfdeep)
then
1067 xlamx(i) = xlamue(i,kbcon(i))
1073 & (k > kbcon(i) .and. k < kmax(i)))
then
1074 xlamue(i,k) = xlamx(i)
1080c specify detrainment rate for the updrafts
1085 if (hwrf_samfdeep)
then
1088 if(cnvflg(i) .and. k < kmax(i))
then
1089 xlamud(i,k) = xlamx(i)
1096 if(cnvflg(i) .and. k < kmax(i))
then
1098 xlamud(i,k) = 0.001 * clamt(i)
1104c entrainment functions decreasing with height(fent),
1105c mimicking a cloud ensemble
1106c(bechtold et al., 2008)
1111 & (k > kbcon(i) .and. k < kmax(i)))
then
1112 tem = qeso(i,k)/qeso(i,kbcon(i))
1113 fent1(i,k) = min(tem**2, 3.0)
1114 fent2(i,k) = min(tem**3, 5.2)
1119c final entrainment and detrainment rates as the sum of turbulent part and
1120c organized one depending on the environmental relative humidity
1121c(bechtold et al., 2008; derbyshire et al., 2011)
1123 if (hwrf_samfdeep)
then
1127 & (k > kbcon(i) .and. k < kmax(i)))
then
1128 tem = cxlamet(i) * frh(i,k) * fent2(i,k)
1129 xlamue(i,k) = xlamue(i,k)*fent1(i,k) + tem
1137 & (k > kbcon(i) .and. k < kmax(i)))
then
1138 tentr(i,k)=xlamue(i,k)*fent1(i,k)
1139 tem = cxlamet(i) * frh(i,k) * fent2(i,k)
1140 xlamue(i,k) = xlamue(i,k)*fent1(i,k) + tem
1141 tem1 = cxlamdt(i) * frh(i,k)
1142 xlamud(i,k) = xlamud(i,k) + tem1
1150c determine updraft mass flux for the subcloud layers
1160 if(k < kbcon(i) .and. k >= kb(i))
then
1161 dz = zi(i,k+1) - zi(i,k)
1162 tem = 0.5*(xlamud(i,k)+xlamud(i,k+1))
1163 ptem = 0.5*(xlamue(i,k)+xlamue(i,k+1))-tem
1164 eta(i,k) = eta(i,k+1) / (1. + ptem * dz)
1170c compute mass flux above cloud base
1178 if(k > kbcon(i) .and. k < kmax(i))
then
1179 dz = zi(i,k) - zi(i,k-1)
1180 tem = 0.5*(xlamud(i,k)+xlamud(i,k-1))
1181 ptem = 0.5*(xlamue(i,k)+xlamue(i,k-1))-tem
1182 eta(i,k) = eta(i,k-1) * (1 + ptem * dz)
1183 if(eta(i,k) <= 0.)
then
1193c compute updraft cloud properties
1199 hcko(i,indx) = heo(i,indx)
1200 ucko(i,indx) = uo(i,indx)
1201 vcko(i,indx) = vo(i,indx)
1205 if (.not.hwrf_samfdeep)
then
1211 ecko(i,indx,n) = ctro(i,indx,n)
1212 ercko(i,indx,n) = ctro(i,indx,n)
1218c cloud property is modified by the entrainment process
1226 if(k > kb(i) .and. k < kmax(i))
then
1227 dz = zi(i,k) - zi(i,k-1)
1228 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1229 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
1230 factor = 1. + tem - tem1
1231 hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*
1232 & (heo(i,k)+heo(i,k-1)))/factor
1233 dbyo(i,k) = hcko(i,k) - heso(i,k)
1235 tem = 0.5 * cm * tem
1239 ucko(i,k) = ((1.-tem)*ucko(i,k-1)+ptem*uo(i,k)
1240 & +ptem1*uo(i,k-1))/factor
1241 vcko(i,k) = ((1.-tem)*vcko(i,k-1)+ptem*vo(i,k)
1242 & +ptem1*vo(i,k-1))/factor
1247 if (.not.hwrf_samfdeep)
then
1248 if (do_aerosols)
then
1257 if(k > kb(i) .and. k < kmax(i))
then
1258 dz = zi(i,k) - zi(i,k-1)
1259 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1262 ecko(i,k,n) = ((1.-tem)*ecko(i,k-1,n)+tem*
1263 & (ctro(i,k,n)+ctro(i,k-1,n)))/factor
1264 ercko(i,k,n) = ecko(i,k,n)
1270 if (do_aerosols)
then
1276 if(k > kb(i) .and. k < kmax(i))
then
1277 dz = zi(i,k) - zi(i,k-1)
1278 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1281 ecko(i,k,kk) = ((1. - tem) * ecko(i,k-1,kk) + tem *
1282 & (ctro(i,k,kk) + ctro(i,k-1,kk))) / factor
1283 ercko(i,k,kk) = ecko(i,k,kk)
1284 chem_c(i,k,n) = fscav(n) * ecko(i,k,kk)
1285 tem = chem_c(i,k,n) / (1. + c0t(i,k) * dz)
1286 chem_pw(i,k,n) = c0t(i,k) * dz * tem * eta(i,k-1)
1287 ecko(i,k,kk) = tem + ecko(i,k,kk) - chem_c(i,k,n)
1298 if(k > kb(i) .and. k < kmax(i))
then
1299 dz = zi(i,k) - zi(i,k-1)
1300 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1303 ecko(i,k,kk) = ((1. - tem) * ecko(i,k-1,kk) + tem *
1304 & (ctro(i,k,kk) + ctro(i,k-1,kk))) / factor
1305 ercko(i,k,kk) = ecko(i,k,kk)
1314c taking account into convection inhibition due to existence of
1315c dry layers below cloud base
1324 if (flg(i) .and. k < kmax(i))
then
1325 if(k >= kbcon(i) .and. dbyo(i,k) > 0.)
then
1334 if(kbcon1(i) == kmax(i)) cnvflg(i) = .false.
1339 tem = pfld(i,kbcon(i)) - pfld(i,kbcon1(i))
1347 if(do_ca .and. ca_trigger)
then
1349 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
1350 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
1356 totflg = totflg .and. (.not. cnvflg(i))
1361c calculate convective inhibition
1367 if(k > kb(i) .and. k < kbcon1(i))
then
1368 dz1 = zo(i,k+1) - zo(i,k)
1369 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1370 rfact = 1. + fv * cp * gamma
1374 & dz1 * (grav / (cp * to(i,k)))
1375 & * dbyo(i,k) / (1. + gamma)
1381 & max(val,(qeso(i,k) - qo(i,k)))
1387 if(hwrf_samfdeep)
then
1391 if(cina(i) < cinacr) cnvflg(i) = .false.
1397 if(islimsk(i) == 1)
then
1408 if(pdot(i) <= w4)
then
1409 tem = (pdot(i) - w4) / (w3 - w4)
1410 elseif(pdot(i) >= -w4)
then
1411 tem = - (pdot(i) + w4) / (w4 - w3)
1421 tem1= .5*(cinacrmx-cinacrmn)
1422 cinacr = cinacrmx - tem * tem1
1423 if(cina(i) < cinacr) cnvflg(i) = .false.
1428 if(do_ca .and. ca_trigger)
then
1430 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
1431 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
1437 totflg = totflg .and. (.not. cnvflg(i))
1442c determine first guess cloud top as the level of zero buoyancy
1451 if (flg(i) .and. k < kmax(i))
then
1452 if(k > kbcon1(i) .and. dbyo(i,k) < 0.)
then
1462 if(ktcon(i) == 1 .and. ktconn(i) > 1)
then
1463 ktcon(i) = ktconn(i)
1465 tem = pfld(i,kbcon(i))-pfld(i,ktcon(i))
1466 if(tem < cthk) cnvflg(i) = .false.
1471 if(do_ca .and. ca_trigger)
then
1473 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
1474 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
1480 totflg = totflg .and. (.not. cnvflg(i))
1486c search for downdraft originating level above theta-e minimum
1491 hmin(i) = heo(i,kbcon1(i))
1498 if (cnvflg(i) .and. k <= kbmax(i))
then
1499 if(k > kbcon1(i) .and. heo(i,k) < hmin(i))
then
1507c make sure that jmin is within the cloud
1511 jmin(i) = min(lmin(i),ktcon(i)-1)
1512 jmin(i) = max(jmin(i),kbcon1(i)+1)
1513 if(jmin(i) >= ktcon(i)) cnvflg(i) = .false.
1517c specify upper limit of mass flux at cloud base
1523 dp = 1000. * del(i,k)
1524 xmbmax(i) = dp / (grav * dt2)
1528c compute cloud moisture property and precipitation
1534 qcko(i,kb(i)) = qo(i,kb(i))
1535 qrcko(i,kb(i)) = qo(i,kb(i))
1543 if(k > kb(i) .and. k < ktcon(i))
then
1544 dz = zi(i,k) - zi(i,k-1)
1545 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1547 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1549 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1552 qcko(i,k) = ((1.-tem)*qcko(i,k-1)+tem*
1553 & (qo(i,k)+qo(i,k-1)))/factor
1554 qrcko(i,k) = qcko(i,k)
1556 dq = eta(i,k) * (qcko(i,k) - qrch)
1560c check
if there is excess moisture to release latent heat
1562 if(k >= kbcon(i) .and. dq > 0.)
then
1563 etah = .5 * (eta(i,k) + eta(i,k-1))
1564 dp = 1000. * del(i,k)
1565 if(ncloud > 0 .and. k > jmin(i))
then
1566 ptem = c0t(i,k) + c1
1567 qlk = dq / (eta(i,k) + etah * ptem * dz)
1568 dellal(i,k) = etah * c1 * dz * qlk * grav / dp
1570 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1574 buo(i,k) = buo(i,k) - grav * qlk
1575 qcko(i,k) = qlk + qrch
1576 pwo(i,k) = etah * c0t(i,k) * dz * qlk
1577 pwavo(i) = pwavo(i) + pwo(i,k)
1579 cnvwt(i,k) = etah * qlk * grav / dp
1580 zdqca(i,k)=dq/eta(i,k)
1585 if(k >= kbcon(i))
then
1586 rfact = 1. + fv * cp * gamma
1588 buo(i,k) = buo(i,k) + (grav / (cp * to(i,k)))
1589 & * dbyo(i,k) / (1. + gamma)
1592 buo(i,k) = buo(i,k) + grav * fv *
1593 & max(val,(qeso(i,k) - qo(i,k)))
1594 drag(i,k) = max(xlamue(i,k),xlamud(i,k))
1596 tem = ((uo(i,k)-uo(i,k-1))/dz)**2
1597 tem = tem+((vo(i,k)-vo(i,k-1))/dz)**2
1598 wush(i,k) = csmf * sqrt(tem)
1614c calculate cloud work function
1654 if(k >= kbcon(i) .and. k < ktcon(i))
then
1655 dz1 = zo(i,k+1) - zo(i,k)
1657 aa1(i) = aa1(i) + buo(i,k) * dz1
1658 dbyo1(i,k) = hcko(i,k) - heso(i,k)
1666 if(cnvflg(i) .and. aa1(i) <= 0.) cnvflg(i) = .false.
1671 totflg = totflg .and. (.not. cnvflg(i))
1676c estimate the convective overshooting as the level
1677c
where the [aafac * cloud work function] becomes zero,
1678c which is the final cloud top.
1683 aa2(i) = aafac * aa1(i)
1689 ktcon1(i) = ktcon(i)
1694 if(k >= ktcon(i) .and. k < kmax(i))
then
1695 dz1 = zo(i,k+1) - zo(i,k)
1696 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1697 rfact = 1. + fv * cp * gamma
1701 & dz1 * (grav / (cp * to(i,k)))
1702 & * dbyo(i,k) / (1. + gamma)
1710 tem = 0.5 * (zi(i,ktcon(i))-zi(i,kbcon(i)))
1711 tem1 = zi(i,k)-zi(i,ktcon(i))
1712 if(aa2(i) < 0. .or. tem1 >= tem)
then
1721c compute cloud moisture property, detraining cloud
water
1722c and precipitation in overshooting layers
1728 if(k >= ktcon(i) .and. k < ktcon1(i))
then
1729 dz = zi(i,k) - zi(i,k-1)
1730 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1732 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1734 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1737 qcko(i,k) = ((1.-tem)*qcko(i,k-1)+tem*
1738 & (qo(i,k)+qo(i,k-1)))/factor
1739 qrcko(i,k) = qcko(i,k)
1741 dq = eta(i,k) * (qcko(i,k) - qrch)
1743c check
if there is excess moisture to release latent heat
1746 etah = .5 * (eta(i,k) + eta(i,k-1))
1747 dp = 1000. * del(i,k)
1749 ptem = c0t(i,k) + c1
1750 qlk = dq / (eta(i,k) + etah * ptem * dz)
1751 dellal(i,k) = etah * c1 * dz * qlk * grav / dp
1753 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1755 qcko(i,k) = qlk + qrch
1756 pwo(i,k) = etah * c0t(i,k) * dz * qlk
1757 pwavo(i) = pwavo(i) + pwo(i,k)
1759 cnvwt(i,k) = etah * qlk * grav / dp
1760 zdqca(i,k)=dq/eta(i,k)
1771 if (hwrf_samfdeep)
then
1775 tem = po(i,k) / (rd * to(i,k))
1776 wucb = -0.01 * dot(i,k) / (tem * grav)
1778 wu2(i,k) = wucb * wucb
1788 & kbcon1,ktcon,omegain,delt,del,zi,cnvflg,omegaout,
1789 & grav,buo,drag,wush,tentr,bb1,bb2)
1793 if(k > kbcon1(i) .and. k < ktcon(i))
then
1794 omega_u(i,k)=omegaout(i,k)
1795 omega_u(i,k)=max(omega_u(i,k),-80.)
1797 rho = po(i,k)*100. / (rd * to(i,k))
1798 tem = (-omega_u(i,k)) / ((rho * grav))
1800 wu2(i,k) = max(wu2(i,k), 0.)
1810 if(k > kbcon1(i) .and. k < ktcon(i))
then
1811 dz = zi(i,k) - zi(i,k-1)
1812 tem = 0.25 * bb1 * (drag(i,k-1)+drag(i,k)) * dz
1813 tem1 = 0.5 * bb2 * (buo(i,k-1)+buo(i,k))
1814 tem2 = wush(i,k) * sqrt(wu2(i,k-1))
1815 tem2 = (tem1 - tem2) * dz
1816 ptem = (1. - tem) * wu2(i,k-1)
1818 wu2(i,k) = (ptem + tem2) / ptem1
1819 wu2(i,k) = max(wu2(i,k), 0.)
1828 if(k > kbcon1(i) .and. k < ktcon(i))
then
1829 rho = po(i,k)*100. / (rd * to(i,k))
1830 omega_u(i,k)=-1.0*sqrt(wu2(i,k))*rho*grav
1831 omega_u(i,k)=max(omega_u(i,k),-80.)
1849 if(k > kbcon1(i) .and. k < ktcon(i))
then
1850 dz = zi(i,k) - zi(i,k-1)
1851 tem = 0.5 * (sqrt(wu2(i,k)) + sqrt(wu2(i,k-1)))
1852 wc(i) = wc(i) + tem * dz
1853 sumx(i) = sumx(i) + dz
1860 if(sumx(i) == 0.)
then
1863 wc(i) = wc(i) / sumx(i)
1866 if (wc(i) < val) cnvflg(i)=.false.
1879 if(k > kbcon1(i) .and. k < ktcon(i))
then
1880 dp = 1000. * del(i,k)
1881 tem = 0.5 * (omega_u(i,k) + omega_u(i,k-1))
1882 omegac(i) = omegac(i) + tem * dp
1883 sumx(i) = sumx(i) + dp
1890 if(sumx(i) == 0.)
then
1893 omegac(i) = omegac(i) / sumx(i)
1896 if (omegac(i) > val) cnvflg(i)=.false.
1904 if(k >= kbcon1(i) .and. k < ktcon(i))
then
1905 if(omega_u(i,k) .ne. 0.)
then
1906 zeta(i,k)=eta(i,k)*(omegac(i)/omega_u(i,k))
1910 zeta(i,k)=max(0.,zeta(i,k))
1911 zeta(i,k)=min(1.,zeta(i,k))
1920c exchange ktcon with ktcon1
1926 ktcon(i) = ktcon1(i)
1931c this section is ready for cloud
water
1936c compute liquid and vapor separation at cloud top
1941 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1943 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1944 dq = qcko(i,k) - qrch
1946c check
if there is excess moisture to release latent heat
1958ccccc
if(lat.==.latd.and.lon.==.lond.and.cnvflg(i))
then
1959ccccc print *,
' aa1(i) before dwndrft =', aa1(i)
1962c------- downdraft calculations
1964c--- compute precipitation efficiency in terms of windshear
1980 if(k > kb(i) .and. k <= ktcon(i))
then
1981 shear = sqrt((uo(i,k)-uo(i,k-1)) ** 2
1982 & + (vo(i,k)-vo(i,k-1)) ** 2)
1983 vshear(i) = vshear(i) + shear
1990 vshear(i) = 1.e3 * vshear(i) / (zi(i,ktcon(i))-zi(i,kb(i)))
1991 e1=1.591-.639*vshear(i)
1992 & +.0953*(vshear(i)**2)-.00496*(vshear(i)**3)
1995 edt(i) = min(edt(i),val)
1997 edt(i) = max(edt(i),val)
2003c determine detrainment rate between 1 and kbcon
2018 if(k >= 1 .and. k < kd94(i))
then
2019 dz = zi(i,k+1) - zi(i,k)
2020 sumx(i) = sumx(i) + dz
2027 if(islimsk(i) == 1) beta = betal
2029 dz = (sumx(i)+zi(i,1))/float(kd94(i))
2030 tem = 1./float(kd94(i))
2031 xlamd(i) = (1.-beta**tem)/dz
2035c determine downdraft mass flux
2040 if (cnvflg(i) .and. k <= kmax(i)-1)
then
2041 if(k < jmin(i) .and. k >= kd94(i))
then
2042 dz = zi(i,k+1) - zi(i,k)
2043 ptem = xlamddt(i) - xlamdet(i)
2044 etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
2045 else if(k < kd94(i))
then
2046 dz = zi(i,k+1) - zi(i,k)
2047 ptem = xlamd(i) + xlamddt(i) - xlamdet(i)
2048 etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
2054c--- downdraft moisture properties
2060 hcdo(i,jmn) = heo(i,jmn)
2061 qcdo(i,jmn) = qo(i,jmn)
2062 qrcdo(i,jmn)= qo(i,jmn)
2063 ucdo(i,jmn) = uo(i,jmn)
2064 vcdo(i,jmn) = vo(i,jmn)
2069 if (.not.hwrf_samfdeep)
then
2074 ecdo(i,jmn,n) = ctro(i,jmn,n)
2083 if (cnvflg(i) .and. k < jmin(i))
then
2084 dz = zi(i,k+1) - zi(i,k)
2085 if(k >= kd94(i))
then
2086 tem = xlamdet(i) * dz
2087 tem1 = 0.5 * xlamddt(i) * dz
2089 tem = xlamdet(i) * dz
2090 tem1 = 0.5 * (xlamd(i)+xlamddt(i)) * dz
2092 factor = 1. + tem - tem1
2093 hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*
2094 & (heo(i,k)+heo(i,k+1)))/factor
2095 dbyo(i,k) = hcdo(i,k) - heso(i,k)
2097 tem = 0.5 * cm * tem
2101 ucdo(i,k) = ((1.-tem)*ucdo(i,k+1)+ptem*uo(i,k+1)
2102 & +ptem1*uo(i,k))/factor
2103 vcdo(i,k) = ((1.-tem)*vcdo(i,k+1)+ptem*vo(i,k+1)
2104 & +ptem1*vo(i,k))/factor
2108 if(.not.hwrf_samfdeep)
then
2112 if (cnvflg(i) .and. k < jmin(i))
then
2113 dz = zi(i,k+1) - zi(i,k)
2114 tem = 0.5 * xlamdet(i) * dz
2117 ecdo(i,k,n) = ((1.-tem)*ecdo(i,k+1,n)+tem*
2118 & (ctro(i,k,n)+ctro(i,k+1,n)))/factor
2128 if (cnvflg(i) .and. k < jmin(i))
then
2129 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
2130 qrcdo(i,k) = qeso(i,k)+
2131 & (1./hvap)*(gamma/(1.+gamma))*dbyo(i,k)
2134 dz = zi(i,k+1) - zi(i,k)
2135 tem = 0.5 * xlamdet(i) * dz
2138 qcdo(i,k) = ((1.-tem)*qrcdo(i,k+1)+tem*
2139 & (qo(i,k)+qo(i,k+1)))/factor
2146 pwdo(i,k) = etad(i,k) * (qcdo(i,k) - qrcdo(i,k))
2147 pwevo(i) = pwevo(i) + pwdo(i,k)
2152c--- final downdraft strength dependent on precip
2153c--- efficiency(edt), normalized condensate(pwav), and
2159 if(islimsk(i) == 0) edtmax = edtmaxs
2161 if(pwevo(i) < 0.)
then
2162 edto(i) = -edto(i) * pwavo(i) / pwevo(i)
2163 edto(i) = min(edto(i),edtmax)
2170c--- downdraft cloudwork functions
2175 if (cnvflg(i) .and. k < jmin(i))
then
2176 gamma = el2orc * qeso(i,k) / to(i,k)**2
2181 dz = zo(i,k) - zo(i,k+1)
2183 aa1(i) = aa1(i)+edto(i)*dz
2184 & *(grav/(cp*dt))*((dhh-dh)/(1.+dg))
2185 & *(1.+fv*cp*dg*dt/hvap)
2188 aa1(i) = aa1(i)+edto(i)*dz
2189 & *grav*fv*max(val,(qeso(i,k)-qo(i,k)))
2195 if(cnvflg(i) .and. aa1(i) <= 0.)
then
2202 totflg = totflg .and. (.not. cnvflg(i))
2207c--- what would the change be, that a cloud with unit mass
2208c--- will
do to the environment?
2213 if(cnvflg(i) .and. k <= kmax(i))
then
2221 if (.not.hwrf_samfdeep)
then
2225 if(cnvflg(i) .and. k <= kmax(i))
then
2234 dp = 1000. * del(i,1)
2235 tem = edto(i) * etad(i,1) * grav / dp
2236 dellah(i,1) = tem * (hcdo(i,1) - heo(i,1))
2237 dellaq(i,1) = tem * qrcdo(i,1)
2238 dellau(i,1) = tem * (ucdo(i,1) - uo(i,1))
2239 dellav(i,1) = tem * (vcdo(i,1) - vo(i,1))
2242 if (.not.hwrf_samfdeep)
then
2246 dp = 1000. * del(i,1)
2247 dellae(i,1,n) = edto(i) * etad(i,1) * ecdo(i,1,n)
2254c--- changed due to subsidence and entrainment
2258 if (cnvflg(i) .and. k < ktcon(i))
then
2260 if(k <= kb(i)) aup = 0.
2262 if(k > jmin(i)) adw = 0.
2263 dp = 1000. * del(i,k)
2264 dz = zi(i,k) - zi(i,k-1)
2267 dv2h = .5 * (heo(i,k) + heo(i,k-1))
2270 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1))
2271 tem1 = 0.5 * (xlamud(i,k)+xlamud(i,k-1))
2273 if(k <= kd94(i))
then
2275 ptem1 = xlamd(i)+xlamddt(i)
2283 dellah(i,k) = dellah(i,k) +
2284 & ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1h
2285 & - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3h
2286 & - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2h*dz
2287 & + aup*tem1*eta(i,k-1)*.5*(hcko(i,k)+hcko(i,k-1))*dz
2288 & + adw*edto(i)*ptem1*etad(i,k)*.5*(hcdo(i,k)+hcdo(i,k-1))*dz
2291 tem1 = -eta(i,k) * qrcko(i,k)
2292 tem2 = -eta(i,k-1) * qcko(i,k-1)
2293 ptem1 = -etad(i,k) * qrcdo(i,k)
2294 ptem2 = -etad(i,k-1) * qcdo(i,k-1)
2295 dellaq(i,k) = dellaq(i,k) +
2296 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*factor
2298 tem1=eta(i,k)*(uo(i,k)-ucko(i,k))
2299 tem2=eta(i,k-1)*(uo(i,k-1)-ucko(i,k-1))
2300 ptem1=etad(i,k)*(uo(i,k)-ucdo(i,k))
2301 ptem2=etad(i,k-1)*(uo(i,k-1)-ucdo(i,k-1))
2302 dellau(i,k) = dellau(i,k) +
2303 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*factor
2305 tem1=eta(i,k)*(vo(i,k)-vcko(i,k))
2306 tem2=eta(i,k-1)*(vo(i,k-1)-vcko(i,k-1))
2307 ptem1=etad(i,k)*(vo(i,k)-vcdo(i,k))
2308 ptem2=etad(i,k-1)*(vo(i,k-1)-vcdo(i,k-1))
2309 dellav(i,k) = dellav(i,k) +
2310 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*factor
2315 if (.not.hwrf_samfdeep)
then
2319 if (cnvflg(i) .and. k < ktcon(i))
then
2321 if(k <= kb(i)) aup = 0.
2323 if(k > jmin(i)) adw = 0.
2324 dp = 1000. * del(i,k)
2326 tem1 = -eta(i,k) * ercko(i,k,n)
2327 tem2 = -eta(i,k-1) * ecko(i,k-1,n)
2328 ptem1 = -etad(i,k) * ecdo(i,k,n)
2329 ptem2 = -etad(i,k-1) * ecdo(i,k-1,n)
2330 dellae(i,k,n) = dellae(i,k,n) +
2331 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*grav/dp
2344 dp = 1000. * del(i,indx)
2345 tem = eta(i,indx-1) * grav / dp
2346 dellah(i,indx) = tem * (hcko(i,indx-1) - heo(i,indx-1))
2347 dellaq(i,indx) = tem * qcko(i,indx-1)
2348 dellau(i,indx) = tem * (ucko(i,indx-1) - uo(i,indx-1))
2349 dellav(i,indx) = tem * (vcko(i,indx-1) - vo(i,indx-1))
2353 dellal(i,indx) = tem * qlko_ktcon(i)
2356 if (.not.hwrf_samfdeep)
then
2361 dp = 1000. * del(i,indx)
2362 dellae(i,indx,n) = eta(i,indx-1) *
2363 & ecko(i,indx-1,n) * grav / dp
2376 if(cnvflg(i) .and. k <= ktcon(i))
then
2377 q_diff(i,k) = q1(i,k) - q1(i,k+1)
2383 if(q1(i,1) >= 0.)
then
2384 q_diff(i,0) = max(0.,2.*q1(i,1)-q1(i,2))-
2387 q_diff(i,0) = min(0.,2.*q1(i,1)-q1(i,2))-
2396 if(cnvflg(i) .and. k < ktcon(i))
then
2398 if(k >= kb(i)) tem = eta(i,k)
2399 if(k <= jmin(i))
then
2400 tem = tem - edto(i) * etad(i,k)
2404 if(abs(q_diff(i,k)) > 1.e-22)
2405 & rrkp = q_diff(i,k+1) / q_diff(i,k)
2406 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2408 & phkp*(qo(i,k)-q1(i,k+1))
2409 flxtvd(i,k) = tem * tem1
2410 elseif(tem < 0.)
then
2412 if(abs(q_diff(i,k)) > 1.e-22)
2413 & rrkp = q_diff(i,k-1) / q_diff(i,k)
2414 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2416 & phkp*(qo(i,k)-q1(i,k))
2417 flxtvd(i,k) = tem * tem1
2425 if(k == jmin(i))
then
2426 dp = 1000. * del(i,k+1)
2427 dellaq(i,k+1) = dellaq(i,k+1) -
2428 & edto(i) * etad(i,k) * tem1 * grav/dp
2431 dp = 1000. * del(i,k)
2432 dellaq(i,k) = dellaq(i,k) -
2433 & eta(i,k) * tem1 * grav/dp
2442 if(cnvflg(i) .and. k <= ktcon(i))
then
2443 dp = 1000. * del(i,k)
2444 dellaq(i,k) = dellaq(i,k) +
2445 & (flxtvd(i,k) - flxtvd(i,k-1)) * grav/dp
2452 if (.not.hwrf_samfdeep)
then
2457 if(cnvflg(i) .and. k <= ktcon(i))
then
2458 e_diff(i,k,n) = ctr(i,k,n) - ctr(i,k+1,n)
2464 if(ctr(i,1,n) >= 0.)
then
2465 e_diff(i,0,n) = max(0.,2.*ctr(i,1,n)-ctr(i,2,n))-
2468 e_diff(i,0,n) = min(0.,2.*ctr(i,1,n)-ctr(i,2,n))-
2480 if(cnvflg(i) .and. k < ktcon(i))
then
2482 if(k >= kb(i)) tem = eta(i,k)
2483 if(k <= jmin(i))
then
2484 tem = tem - edto(i) * etad(i,k)
2488 if(abs(e_diff(i,k,n)) > 1.e-22)
2489 & rrkp = e_diff(i,k+1,n) / e_diff(i,k,n)
2490 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2491 tem1 = ctr(i,k+1,n) +
2492 & phkp*(ctro(i,k,n)-ctr(i,k+1,n))
2493 flxtvd(i,k) = tem * tem1
2494 elseif(tem < 0.)
then
2496 if(abs(e_diff(i,k,n)) > 1.e-22)
2497 & rrkp = e_diff(i,k-1,n) / e_diff(i,k,n)
2498 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2500 & phkp*(ctro(i,k,n)-ctr(i,k,n))
2501 flxtvd(i,k) = tem * tem1
2509 if(k == jmin(i))
then
2510 dp = 1000. * del(i,k+1)
2511 dellae(i,k+1,n) = dellae(i,k+1,n) -
2512 & edto(i)*etad(i,k) * tem1 * grav/dp
2515 dp = 1000. * del(i,k)
2516 dellae(i,k,n) = dellae(i,k,n) -
2517 & eta(i,k) * tem1 * grav/dp
2526 if(cnvflg(i) .and. k <= ktcon(i))
then
2527 dp = 1000. * del(i,k)
2528 dellae(i,k,n) = dellae(i,k,n) +
2529 & (flxtvd(i,k) - flxtvd(i,k-1)) * grav/dp
2538c------- final changed variable per unit mass flux
2552 asqecflg(i) = cnvflg(i)
2553 if(asqecflg(i) .and. gdx(i) < dxcrtas)
then
2554 asqecflg(i) = .false.
2562 if (asqecflg(i) .and. k <= kmax(i))
then
2563 if(k > ktcon(i))
then
2567 if(k <= ktcon(i))
then
2568 qo(i,k) = dellaq(i,k) * mbdt(i) + q1(i,k)
2569 dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
2570 to(i,k) = dellat * mbdt(i) + t1(i,k)
2572 qo(i,k) = max(qo(i,k), val )
2579c--- the above changed environment is now used to calulate the
2580c--- effect the arbitrary cloud(with unit mass flux)
2581c--- would have on the stability,
2582c--- which
then is used to calculate the real mass flux,
2583c--- necessary to keep this change in balance with the large-scale
2584c--- destabilization.
2586c--- environmental conditions again, first heights
2593 if(asqecflg(i) .and. k <= kmax(i))
then
2594 qeso(i,k) = 0.01 * fpvs(to(i,k))
2595 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k)+epsm1*qeso(i,k))
2597 qeso(i,k) = max(qeso(i,k), val )
2608 if(asqecflg(i) .and. k <= kmax(i)-1)
then
2609 dz = .5 * (zo(i,k+1) - zo(i,k))
2610 dp = .5 * (pfld(i,k+1) - pfld(i,k))
2611 es = 0.01 * fpvs(to(i,k+1))
2612 pprime = pfld(i,k+1) + epsm1 * es
2613 qs = eps * es / pprime
2614 dqsdp = - qs / pprime
2615 desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
2616 dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
2617 gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
2618 dt = (grav * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
2619 dq = dqsdt * dt + dqsdp * dp
2620 to(i,k) = to(i,k+1) + dt
2621 qo(i,k) = qo(i,k+1) + dq
2622 po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
2628 if(asqecflg(i) .and. k <= kmax(i)-1)
then
2629 qeso(i,k) = 0.01 * fpvs(to(i,k))
2630 qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1 * qeso(i,k))
2632 qeso(i,k) = max(qeso(i,k), val1)
2634 qo(i,k) = max(qo(i,k), val2 )
2636 heo(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
2637 & cp * to(i,k) + hvap * qo(i,k)
2638 heso(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
2639 & cp * to(i,k) + hvap * qeso(i,k)
2644 if(asqecflg(i))
then
2646 heo(i,k) = grav * zo(i,k) + cp * to(i,k) + hvap * qo(i,k)
2647 heso(i,k) = grav * zo(i,k) + cp * to(i,k) + hvap * qeso(i,k)
2648c heo(i,k) = min(heo(i,k),heso(i,k))
2652c**************************** static control
2654c------- moisture and cloud work functions
2658 if(asqecflg(i))
then
2665 if(asqecflg(i))
then
2667 hcko(i,indx) = heo(i,indx)
2668 qcko(i,indx) = qo(i,indx)
2673 if (asqecflg(i))
then
2674 if(k > kb(i) .and. k <= ktcon(i))
then
2675 dz = zi(i,k) - zi(i,k-1)
2676 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
2677 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
2678 factor = 1. + tem - tem1
2679 hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*
2680 & (heo(i,k)+heo(i,k-1)))/factor
2687 if (asqecflg(i))
then
2688 if(k > kb(i) .and. k < ktcon(i))
then
2689 dz = zi(i,k) - zi(i,k-1)
2690 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
2691 xdby = hcko(i,k) - heso(i,k)
2693 & + gamma * xdby / (hvap * (1. + gamma))
2695 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
2698 qcko(i,k) = ((1.-tem)*qcko(i,k-1)+tem*
2699 & (qo(i,k)+qo(i,k-1)))/factor
2701 dq = eta(i,k) * (qcko(i,k) - xqrch)
2703 if(k >= kbcon(i) .and. dq > 0.)
then
2704 etah = .5 * (eta(i,k) + eta(i,k-1))
2705 if(ncloud > 0 .and. k > jmin(i))
then
2706 ptem = c0t(i,k) + c1
2707 qlk = dq / (eta(i,k) + etah * ptem * dz)
2709 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
2711 if(k < ktcon1(i))
then
2713 xaa0(i) = xaa0(i) - dz * grav * qlk
2715 qcko(i,k) = qlk + xqrch
2716 xpw = etah * c0t(i,k) * dz * qlk
2717 xpwav(i) = xpwav(i) + xpw
2720 if(k >= kbcon(i) .and. k < ktcon1(i))
then
2721 dz1 = zo(i,k+1) - zo(i,k)
2722 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
2723 rfact = 1. + fv * cp * gamma
2727 & + dz1 * (grav / (cp * to(i,k)))
2728 & * xdby / (1. + gamma)
2734 & max(val,(qeso(i,k) - qo(i,k)))
2740c------- downdraft calculations
2742c--- downdraft moisture properties
2746 if(asqecflg(i))
then
2748 hcdo(i,jmn) = heo(i,jmn)
2749 qcdo(i,jmn) = qo(i,jmn)
2750 qrcd(i,jmn) = qo(i,jmn)
2757 if (asqecflg(i) .and. k < jmin(i))
then
2758 dz = zi(i,k+1) - zi(i,k)
2759 if(k >= kd94(i))
then
2760 tem = xlamdet(i) * dz
2761 tem1 = 0.5 * xlamddt(i) * dz
2763 tem = xlamdet(i) * dz
2764 tem1 = 0.5 * (xlamd(i)+xlamddt(i)) * dz
2766 factor = 1. + tem - tem1
2767 hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*
2768 & (heo(i,k)+heo(i,k+1)))/factor
2775 if (asqecflg(i) .and. k < jmin(i))
then
2778 gamma = el2orc * dq / dt**2
2779 dh = hcdo(i,k) - heso(i,k)
2780 qrcd(i,k)=dq+(1./hvap)*(gamma/(1.+gamma))*dh
2783 dz = zi(i,k+1) - zi(i,k)
2784 tem = 0.5 * xlamdet(i) * dz
2787 qcdo(i,k) = ((1.-tem)*qrcd(i,k+1)+tem*
2788 & (qo(i,k)+qo(i,k+1)))/factor
2795 xpwd = etad(i,k) * (qcdo(i,k) - qrcd(i,k))
2796 xpwev(i) = xpwev(i) + xpwd
2803 if(islimsk(i) == 0) edtmax = edtmaxs
2804 if(asqecflg(i))
then
2805 if(xpwev(i) >= 0.)
then
2808 edtx(i) = -edtx(i) * xpwav(i) / xpwev(i)
2809 edtx(i) = min(edtx(i),edtmax)
2815c--- downdraft cloudwork functions
2820 if (asqecflg(i) .and. k < jmin(i))
then
2821 gamma = el2orc * qeso(i,k) / to(i,k)**2
2826 dz = zo(i,k) - zo(i,k+1)
2828 xaa0(i) = xaa0(i)+edtx(i)*dz
2829 & *(grav/(cp*dt))*((dhh-dh)/(1.+dg))
2830 & *(1.+fv*cp*dg*dt/hvap)
2833 xaa0(i) = xaa0(i)+edtx(i)*dz
2834 & *grav*fv*max(val,(qeso(i,k)-qo(i,k)))
2839c calculate critical cloud work function
2871c modify critical cloud workfunction by cloud base vertical velocity
2886c modify acrtfct(i) by colume mean rh
if rhbar(i) is greater than 80 percent
2888c
if(rhbar(i) >= .8)
then
2889c acrtfct(i) = acrtfct(i) * (.9 - min(rhbar(i),.9)) * 10.
2892c modify adjustment time scale by cloud base vertical velocity
2896c dtconv(i) = max(dtconv(i), dt2)
2897c dtconv(i) = 1800. * (pdot(i) - w2) / (w1 - w2)
2908 if(hwrf_samfdeep)
then
2911 tem = zi(i,ktcon1(i)) - zi(i,kbcon1(i))
2912 dtconv(i) = tem / wc(i)
2913 dtconv(i) = max(dtconv(i),dtmin)
2914 dtconv(i) = min(dtconv(i),dtmax)
2920 tem = zi(i,ktcon1(i)) - zi(i,kbcon1(i))
2921 dtconv(i) = tem / wc(i)
2922 tfac = 1. + gdx(i) / 75000.
2923 dtconv(i) = tfac * dtconv(i)
2924 dtconv(i) = max(dtconv(i),dtmin)
2925 dtconv(i) = min(dtconv(i),dtmax)
2940 if(k >= kbcon1(i) .and. k < ktcon1(i))
then
2941 dz = zi(i,k) - zi(i,k-1)
2942 tem = sqrt(u1(i,k)*u1(i,k)+v1(i,k)*v1(i,k))
2943 umean(i) = umean(i) + tem * dz
2944 sumx(i) = sumx(i) + dz
2951 umean(i) = umean(i) / sumx(i)
2952 umean(i) = max(umean(i), 1.)
2953 tauadv = gdx(i) / umean(i)
2954 advfac(i) = tauadv / dtconv(i)
2955 advfac(i) = min(advfac(i), 1.)
2962 if(first_time_step .and. (.not.restart
2963 & .or. sigmab_coldstart))
then
2972 qadv(i,k)=(q(i,k) - prevsq(i,k))*invdelt
2979 tmfq(i,k)=tmf(i,k,1)
2983 flag_shallow = .false.
2985 call progsigma_calc(im,km,first_time_step,restart,flag_shallow,
2986 & flag_mid,del,tmfq,qmicro,dbyo1,zdqca,omega_u,zeta,hvap,
2987 & delt,qadv,kb,kbcon1,ktcon,cnvflg,betascu,betamcu,betadcu,
2988 & sigmind,sigminm,sigmins,sigmain,sigmaout,sigmab)
2995 if(cnvflg(i) .and. .not.asqecflg(i))
then
2997 rho = po(i,k)*100. / (rd*to(i,k))
2999 xmb(i) = advfac(i)*sigmab(i)*((-1.0*omegac(i))*gravinv)
3001 xmb(i) = advfac(i)*betaw*rho*wc(i)
3011 if(asqecflg(i))
then
3013 fld(i)=aa1(i)/dtconv(i)
3014 if(fld(i) <= 0.)
then
3015 asqecflg(i) = .false.
3024 if(asqecflg(i))
then
3025c xaa0(i) = max(xaa0(i),0.)
3026 xk(i) = (xaa0(i) - aa1(i)) / mbdt(i)
3027 if(xk(i) >= 0.)
then
3028 asqecflg(i) = .false.
3033c--- kernel, cloud base mass flux
3041 if(asqecflg(i))
then
3042 xmb(i) = -advfac(i) * fld(i) / xk(i)
3050 totflg = totflg .and. (.not. cnvflg(i))
3058 tem = min(max(xlamue(i,kbcon(i)), 7.e-5), 3.e-4)
3060 tem1 = 3.14 * tem * tem
3061 sigmagfm(i) = tem1 / garea(i)
3062 sigmagfm(i) = max(sigmagfm(i), 0.001)
3063 sigmagfm(i) = min(sigmagfm(i), 0.999)
3070 if (gdx(i) < dxcrtuf)
then
3072 scaldfunc(i)=(1.-sigmab(i))*(1.-sigmab(i))
3074 scaldfunc(i) = (1.-sigmagfm(i)) * (1.-sigmagfm(i))
3076 scaldfunc(i) = max(min(scaldfunc(i), 1.0), 0.)
3080 xmb(i) = xmb(i) * scaldfunc(i)
3081 xmb(i) = min(xmb(i),xmbmax(i))
3094c restore to,qo,uo,vo to t1,q1,u1,v1 in
case convection stops
3098 if (cnvflg(i) .and. k <= kmax(i))
then
3103 qeso(i,k) = 0.01 * fpvs(t1(i,k))
3104 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
3106 qeso(i,k) = max(qeso(i,k), val )
3110 if (.not.hwrf_samfdeep)
then
3115 if (cnvflg(i) .and. k <= kmax(i))
then
3116 ctro(i,k,n) = qtr(i,k,kk)
3124c--- feedback: simply the changes from the cloud with unit mass flux
3125c--- multiplied by the mass flux necessary to keep the
3126c--- equilibrium with the larger-scale.
3140 if (.not.hwrf_samfdeep)
then
3149 if (cnvflg(i) .and. k <= kmax(i))
then
3150 if(k <= ktcon(i))
then
3152 dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
3153 t1(i,k) = t1(i,k) + tem2 * dellat
3154 q1(i,k) = q1(i,k) + tem2 * dellaq(i,k)
3158 u1(i,k) = u1(i,k) + tem2 * dellau(i,k)
3159 v1(i,k) = v1(i,k) + tem2 * dellav(i,k)
3160 dp = 1000. * del(i,k)
3161 tem = xmb(i) * dp / grav
3162 delhbar(i) = delhbar(i) + tem * dellah(i,k)
3163 delqbar(i) = delqbar(i) + tem * dellaq(i,k)
3164 deltbar(i) = deltbar(i) + tem * dellat
3165 delubar(i) = delubar(i) + tem * dellau(i,k)
3166 delvbar(i) = delvbar(i) + tem * dellav(i,k)
3182 if(cnvflg(i) .and. k <= ktcon(i))
then
3183 tem = q1(i,k) * delp(i,k) / grav
3184 if(q1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
3185 if(q1(i,k) > 0.) tsump(i) = tsump(i) + tem
3191 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
3192 if(tsump(i) > abs(tsumn(i)))
then
3193 rtnp(i) = tsumn(i) / tsump(i)
3195 rtnp(i) = tsump(i) / tsumn(i)
3202 if(cnvflg(i) .and. k <= ktcon(i))
then
3203 if(rtnp(i) < 0.)
then
3204 if(tsump(i) > abs(tsumn(i)))
then
3205 if(q1(i,k) < 0.) q1(i,k) = 0.
3206 if(q1(i,k) > 0.) q1(i,k) = (1.+rtnp(i))*q1(i,k)
3208 if(q1(i,k) < 0.) q1(i,k) = (1.+rtnp(i))*q1(i,k)
3209 if(q1(i,k) > 0.) q1(i,k) = 0.
3216 if (.not.hwrf_samfdeep)
then
3222 if (cnvflg(i) .and. k <= kmax(i))
then
3223 if(k <= ktcon(i))
then
3224 ctr(i,k,n) = ctr(i,k,n)+dellae(i,k,n)*xmb(i)*dt2
3225 dp = 1000. * del(i,k)
3226 delebar(i,n)=delebar(i,n)+dellae(i,k,n)*xmb(i)*dp/grav
3242 if(cnvflg(i) .and. k <= ktcon(i))
then
3245 dz = zi(i,k) - zi(i,k-1)
3249 tem = ctr(i,k,n) * dz
3251 tem = ctr(i,k,n) * delp(i,k) / grav
3253 if(ctr(i,k,n) < 0.) tsumn(i) = tsumn(i) + tem
3254 if(ctr(i,k,n) > 0.) tsump(i) = tsump(i) + tem
3260 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
3261 if(tsump(i) > abs(tsumn(i)))
then
3262 rtnp(i) = tsumn(i) / tsump(i)
3264 rtnp(i) = tsump(i) / tsumn(i)
3271 if(cnvflg(i) .and. k <= ktcon(i))
then
3272 if(rtnp(i) < 0.)
then
3273 if(tsump(i) > abs(tsumn(i)))
then
3274 if(ctr(i,k,n)<0.) ctr(i,k,n)=0.
3275 if(ctr(i,k,n)>0.) ctr(i,k,n)=(1.+rtnp(i))*ctr(i,k,n)
3277 if(ctr(i,k,n)<0.) ctr(i,k,n)=(1.+rtnp(i))*ctr(i,k,n)
3278 if(ctr(i,k,n)>0.) ctr(i,k,n)=0.
3288 if(cnvflg(i) .and. k <= ktcon(i))
then
3289 qtr(i,k,kk) = ctr(i,k,n)
3296 if (do_aerosols)
then
3304 if(k > kb(i) .and. k < ktcon(i))
then
3305 dp = 1000. * del(i,k)
3306 wet_dep(i,k,n) = chem_pw(i,k,n)*grav/dp
3307 wet_dep(i,k,n) = wet_dep(i,k,n)*xmb(i)*dt2*dp
3317 if(k > kb(i) .and. k < ktcon(i))
then
3318 dp = 1000. * del(i,k)
3319 if (qtr(i,k,kk) < 0.)
then
3321 tem = -qtr(i,k,kk)*dp
3322 if(wet_dep(i,k,n) >= tem)
then
3323 wet_dep(i,k,n) = wet_dep(i,k,n) - tem
3327 qtr(i,k,kk) = qtr(i,k,kk)+wet_dep(i,k,n)/dp
3344 if (cnvflg(i) .and. k <= kmax(i))
then
3345 if(k <= ktcon(i))
then
3346 qeso(i,k) = 0.01 * fpvs(t1(i,k))
3347 qeso(i,k) = eps * qeso(i,k)/(pfld(i,k) + epsm1*qeso(i,k))
3349 qeso(i,k) = max(qeso(i,k), val )
3364 if (cnvflg(i) .and. k <= kmax(i))
then
3365 if(k < ktcon(i))
then
3367 if(k <= kb(i)) aup = 0.
3369 if(k >= jmin(i)) adw = 0.
3370 rain = aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
3371 rntot(i) = rntot(i) + rain * xmb(i) * .001 * dt2
3381 if (k <= kmax(i))
then
3385 if(cnvflg(i) .and. k < ktcon(i))
then
3387 if(k <= kb(i)) aup = 0.
3389 if(k >= jmin(i)) adw = 0.
3390 rain = aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
3391 rn(i) = rn(i) + rain * xmb(i) * .001 * dt2
3393 if(flg(i) .and. k < ktcon(i))
then
3397 qcond(i) = evef * (q1(i,k) - qeso(i,k))
3398 & / (1. + el2orc * qeso(i,k) / t1(i,k)**2)
3399 dp = 1000. * del(i,k)
3402 if(rn(i) > 0. .and. qcond(i) < 0.)
then
3403 qevap(i) = -qcond(i) * (1.-exp(-.32*sqrt(dt2*rn(i))))
3404 qevap(i) = min(qevap(i), rn(i)*1000.*tem)
3405 delq2(i) = delqev(i) + .001 * qevap(i) * tem1
3407 if(rn(i) > 0. .and. qcond(i) < 0. .and.
3408 & delq2(i) > rntot(i))
then
3409 qevap(i) = 1000.* tem * (rntot(i) - delqev(i))
3412 if(rn(i) > 0. .and. qevap(i) > 0.)
then
3413 q1(i,k) = q1(i,k) + qevap(i)
3414 t1(i,k) = t1(i,k) - elocp * qevap(i)
3415 rn(i) = rn(i) - .001 * qevap(i) * tem1
3416 deltv(i) = - elocp*qevap(i)/dt2
3417 delq(i) = + qevap(i)/dt2
3418 delqev(i) = delqev(i) + .001 * qevap(i) * tem1
3420 delqbar(i) = delqbar(i) + delq(i) * tem1
3421 deltbar(i) = deltbar(i) + deltv(i) * tem1
3430 rainevap(i)=delqev(i)
3448c precipitation rate converted to actual precip
3449c in unit of m instead of kg
3454c in the event of upper level rain evaporation and lower level downdraft
3455c moistening, rn can become negative, in this
case, we back out of the
3456c heating and the moistening
3458 if(rn(i) < 0. .and. .not.flg(i)) rn(i) = 0.
3459 if(rn(i) <= 0.)
then
3473 if (cnvflg(i) .and. rn(i) > 0.)
then
3474 if (k >= kbcon(i) .and. k < ktcon(i))
then
3475 cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
3477 cnvw(i,k) = cnvw(i,k) * cscale
3479 cnvw(i,k) = cnvw(i,k) * cscale
3486c convective cloud cover
3491 if (cnvflg(i) .and. rn(i) > 0.)
then
3492 if (k >= kbcon(i) .and. k < ktcon(i))
then
3493 cnvc(i,k) = 0.04 * log(1. + 675. * eta(i,k) * xmb(i))
3494 cnvc(i,k) = min(cnvc(i,k), 0.6)
3495 cnvc(i,k) = max(cnvc(i,k), 0.0)
3504 if (ncloud > 0)
then
3508 if (cnvflg(i) .and. rn(i) > 0.)
then
3510 if (k >= kbcon(i) .and. k <= ktcon(i))
then
3511 tem = dellal(i,k) * xmb(i) * dt2
3512 tem1 = max(0.0, min(1.0, (tcr-t1(i,k))*tcrf))
3513 if (qtr(i,k,2) > -999.0)
then
3514 qtr(i,k,1) = qtr(i,k,1) + tem * tem1
3515 qtr(i,k,2) = qtr(i,k,2) + tem *(1.0-tem1)
3517 qtr(i,k,1) = qtr(i,k,1) + tem
3529 if(cnvflg(i) .and. rn(i) <= 0.)
then
3530 if (k <= kmax(i))
then
3539 if (.not.hwrf_samfdeep)
then
3544 if(cnvflg(i) .and. rn(i) <= 0.)
then
3545 if (k <= kmax(i))
then
3546 qtr(i,k,kk)= ctro(i,k,n)
3552 if (do_aerosols)
then
3556 if(cnvflg(i) .and. rn(i) <= 0.)
then
3557 if (k <= ktcon(i))
then
3587 if(cnvflg(i) .and. rn(i) > 0.)
then
3588 if(k >= kb(i) .and. k < ktop(i))
then
3589 ud_mf(i,k) = eta(i,k) * xmb(i) * dt2
3596 if(cnvflg(i) .and. rn(i) > 0.)
then
3598 dt_mf(i,k) = ud_mf(i,k)
3604 if(cnvflg(i) .and. rn(i) > 0.)
then
3605 if(k >= 1 .and. k <= jmin(i))
then
3606 dd_mf(i,k) = edto(i) * etad(i,k) * xmb(i) * dt2
3614 if (.not.hwrf_samfdeep)
then
3619 if(cnvflg(i) .and. rn(i) > 0.)
then
3620 if(k > kb(i) .and. k < ktop(i))
then
3621 tem = 0.5 * (eta(i,k-1) + eta(i,k)) * xmb(i)
3622 tem1 = pfld(i,k) * 100. / (rd * t1(i,k))
3626 tem2 = max(sigmagfm(i), betaw)
3628 ptem = tem / (tem2 * tem1)
3629 qtr(i,k,ntk)=qtr(i,k,ntk)+0.5*tem2*ptem*ptem
3637 if(cnvflg(i) .and. rn(i) > 0.)
then
3638 if(k > 1 .and. k <= jmin(i))
then
3639 tem = 0.5*edto(i)*(etad(i,k-1)+etad(i,k))*xmb(i)
3640 tem1 = pfld(i,k) * 100. / (rd * t1(i,k))
3644 tem2 = max(sigmagfm(i), betaw)
3646 ptem = tem / (tem2 * tem1)
3647 qtr(i,k,ntk)=qtr(i,k,ntk)+0.5*tem2*ptem*ptem
3655 if(mp_phys == mp_phys_mg)
then
3658 qlcn(i,k) = qtr(i,k,2) - qlcn(i,k)
3659 qicn(i,k) = qtr(i,k,1) - qicn(i,k)
3660 cf_upi(i,k) = cnvc(i,k)
3661 w_upi(i,k) = ud_mf(i,k)*t1(i,k)*rd /
3662 & (dt2*max(sigmagfm(i),1.e-12)*prslp(i,k))
3663 cnv_mfd(i,k) = ud_mf(i,k)/dt2
3664 clcn(i,k) = cnvc(i,k)
3665 cnv_fice(i,k) = qicn(i,k)
3666 & / max(1.e-10,qlcn(i,k)+qicn(i,k))