77 & tmf,qmicro,itc,ntc,cliq,cp,cvap, &
78 & eps,epsm1,fv,grav,hvap,rd,rv, &
79 & t0c,delt,ntk,ntr,delp, ten_t, ten_u, ten_v, ten_q, &
80 & prslp,psp,phil,tkeh,qtr,dqtr,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,lbb1,lbb2,lbb3,dt_decay,maxMF,do_mynnedmf, &
89 & sigmab_coldstart,cat_adj_deep, &
93 use machine ,
only : kind_phys
94 use funcphys ,
only : fpvs
98 integer,
intent(in) :: im, km, nn, itc, ntc, ntk, ntr, ncloud
99 integer,
intent(in) :: islimsk(:)
100 real(kind=kind_phys),
intent(in) :: cliq, cp, cvap, eps, epsm1, &
101 & fv, grav, hvap, rd, rv, t0c
102 real(kind=kind_phys),
intent(in) :: delt, cscale
103 real(kind=kind_phys),
intent(in) :: psp(:), delp(:,:), &
104 & prslp(:,:), garea(:), hpbl(:), dot(:,:), phil(:,:)
105 real(kind=kind_phys),
dimension(:),
intent(in) :: fscav
106 logical,
intent(in) :: first_time_step,restart,hwrf_samfdeep, &
107 & progsigma,progomega,do_mynnedmf,sigmab_coldstart
108 real(kind=kind_phys),
intent(in) :: nthresh,betadcu,betamcu, &
109 & betascu,lbb1,lbb2,lbb3,dt_decay
110 real(kind=kind_phys),
intent(in),
optional :: ca_deep(:)
111 real(kind=kind_phys),
intent(in),
optional :: sigmain(:,:), &
112 & qmicro(:,:), prevsq(:,:), omegain(:,:)
113 real(kind=kind_phys),
intent(in) :: tmf(:,:,:),q(:,:)
114 real(kind=kind_phys),
dimension (:),
intent(in),
optional :: maxmf
115 real(kind=kind_phys),
intent(out) :: rainevap(:)
116 real(kind=kind_phys),
intent(inout),
optional :: sigmaout(:,:), &
118 logical,
intent(in) :: do_ca,ca_closure,ca_entr,ca_trigger
119 integer,
intent(inout) :: kcnv(:)
121 real(kind=kind_phys),
intent(inout) :: cnvw(:,:), cnvc(:,:), &
124 real(kind=kind_phys),
intent(in) :: qtr(:,:,:), q1(:,:)
125 real(kind=kind_phys),
intent(in) :: t1(:,:), u1(:,:), v1(:,:)
127 integer,
intent(out) :: kbot(:), ktop(:)
128 real(kind=kind_phys),
intent(out) :: cldwrk(:), &
130 & dd_mf(:,:), dt_mf(:,:)
131 real(kind=kind_phys),
intent(out) :: ud_mf(:,:)
132 real(kind=kind_phys),
dimension(:,:),
intent(inout),
optional :: &
133 & qlcn, qicn, w_upi, cnv_mfd, cnv_dqldt, clcn &
134 &, 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 real(kind_phys),
intent(in) :: cat_adj_deep
141 character(len=*),
intent(out) :: errmsg
142 integer,
intent(out) :: errflg
145 integer i, indx, jmn, k, kk, km1, n
148 real(kind=kind_phys) clamd, tkemx, tkemn, dtke,
155 real(kind=kind_phys) adw, aup, aafac, d0,
158 & dq, dqsdp, dqsdt, dt,
162 & dz, dz1, e1, edtmax,
163 & edtmaxl, edtmaxs, el2orc, elocp,
167 & fact1, fact2, factor,
168 & gamma, pprime, cm, cq,
170 & rain, rfact, shear, tfac,
175 & rho, betaw, tauadv,
178 & xqrch, tem, tem1, tem2,
181 integer kb(im), kb1(im), kbcon(im), kbcon1(im),
182 & ktcon(im), ktcon1(im), ktconn(im),
183 & jmin(im), lmin(im), kbmax(im),
184 & kbm(im), kmax(im), kd94(im)
187 real(kind=kind_phys) aa1(im), tkemean(im),clamt(im),
188 & ps(im), del(im,km), prsl(im,km),
189 & umean(im), advfac(im), gdx(im),
190 & delhbar(im), delq(im), delq2(im),
191 & delqbar(im), delqev(im), deltbar(im),
192 & deltv(im), dtconv(im), edt(im),
193 & edto(im), edtx(im), fld(im),
194 & hcdo(im,km), hmax(im), hmin(im),
195 & ucdo(im,km), vcdo(im,km),aa2(im),
197 & pdot(im), po(im,km),
198 & pwavo(im), pwevo(im), mbdt(im),
199 & qcdo(im,km), qcond(im), qevap(im),
200 & rntot(im), vshear(im), xaa0(im),
201 & xlamd(im), xlamdet(im),xlamddt(im),
202 & cxlamet(im), cxlamdt(im),
204 & xmb(im), xmbmax(im), xpwav(im),
205 & xpwev(im), xlamx(im), delebar(im,ntr),
207 & delubar(im), delvbar(im)
209 real(kind=kind_phys) c0(im), sfcpbl(im)
211 real(kind=kind_phys) cinpcr, cinpcrmx, cinpcrmn,
212 & cinacr, cinacrmx, cinacrmn,
218 real(kind=kind_phys) bb1, bb2, csmf, wucb
221 real(kind=kind_phys) omega_u(im,km),zdqca(im,km),tmfq(im,km),
222 & omegac(im),zeta(im,km),dbyo1(im,km),sigmab(im),qadv(im,km)
223 real(kind=kind_phys) gravinv,invdelt,sigmind,sigminm,sigmins,
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))
315 real(kind=kind_phys),
intent(out) :: ten_t(:,:), ten_u(:,:), &
316 & ten_v(:,:), ten_q(:,:,:), dqtr(:,:,:)
318 real(kind=kind_phys) :: new_t1(im,km),new_u1(im,km),new_v1(im,km),&
319 & new_q1(im,km),new_qtr(im,km,nn)
341 el2orc = hvap*hvap/(rv*cp)
343 fact1 = (cvap-cliq)/rv
344 fact2 = hvap/rv-fact1*t0c
345c-----------------------------------------------------------------------
347 if(hwrf_samfdeep)
then
348 do_aerosols = .false.
350 do_aerosols = (itc > 0) .and. (ntc > 0) .and. (ntr > 0)
351 if (do_aerosols) do_aerosols = (ntr >= itc + ntc - 3)
354c-----------------------------------------------------------------------
393 if(maxmf(i).gt.0.)cnvflg(i)=.false.
395 sfcpbl(i) = sfclfac * hpbl(i)
427 gdx(i) = sqrt(garea(i))
437 if (hwrf_samfdeep)
then
447 if(islimsk(i) == 1)
then
457 if(t1(i,k) > 273.16)
then
460 tem = d0 * (t1(i,k) - 273.16)
462 c0t(i,k) = c0(i) * tem1
482 if(mp_phys == mp_phys_mg)
then
485 qlcn(i,k) = qtr(i,k,2)
486 qicn(i,k) = qtr(i,k,1)
507 dtmin = max(dt2, val )
510 dtmax = max(dt2, val )
517 if (hwrf_samfdeep)
then
540c define top layer for search of the downdraft originating layer
541c and the maximum thetae for updraft
554 if (prsl(i,k)*tx1(i) > 0.04) kmax(i) = k + 1
555 if (prsl(i,k)*tx1(i) > 0.45) kbmax(i) = k + 1
556 if (prsl(i,k)*tx1(i) > 0.70) kbm(i) = k + 1
557 if (prsl(i,k)*tx1(i) > 0.94) kd94(i) = k + 1
561 kmax(i) = min(km,kmax(i))
562 kbmax(i) = min(kbmax(i),kmax(i))
563 kbm(i) = min(kbm(i),kmax(i))
564 kd94(i) = min(kd94(i),kmax(i))
567c hydrostatic height assume zero terr and initially assume
568c updraft entrainment rate as an inverse
function of height
573 zo(i,k) = phil(i,k) / grav
579 zi(i,k) = 0.5*(zo(i,k)+zo(i,k+1))
582 if (hwrf_samfdeep)
then
585 xlamue(i,k) = clam / zi(i,k)
591c convert surface pressure to mb from cb
596 if (k <= kmax(i))
then
597 pfld(i,k) = prsl(i,k) * 10.0
646 if(.not.hwrf_samfdeep)
then
651 if (k <= kmax(i))
then
652 ctr(i,k,kk) = qtr(i,k,n)
653 ctro(i,k,kk) = qtr(i,k,n)
666 if (k <= kmax(i))
then
667 qeso(i,k) = 0.01 * fpvs(to(i,k))
668 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
670 qeso(i,k) = max(qeso(i,k), val1)
672 qo(i,k) = max(qo(i,k), val2 )
679c compute moist static energy
684 if (k <= kmax(i))
then
686 tem = phil(i,k) + cp * to(i,k)
687 heo(i,k) = tem + hvap * qo(i,k)
688 heso(i,k) = tem + hvap * qeso(i,k)
689c heo(i,k) = min(heo(i,k),heso(i,k))
694c determine level with largest moist static energy
695c this is the level
where updraft starts
705 if (flg(i) .and. zo(i,k) <= sfcpbl(i))
then
713 kb1(i) = min(kb1(i),kbm(i))
718 hmax(i) = heo(i,kb1(i))
723 if (k > kb1(i) .and. k <= kbm(i))
then
724 if(heo(i,k) > hmax(i))
then
735 if (k <= kmax(i)-1)
then
736 dz = .5 * (zo(i,k+1) - zo(i,k))
737 dp = .5 * (pfld(i,k+1) - pfld(i,k))
738 es = 0.01 * fpvs(to(i,k+1))
739 pprime = pfld(i,k+1) + epsm1 * es
740 qs = eps * es / pprime
741 dqsdp = - qs / pprime
742 desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
743 dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
744 gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
745 dt = (grav*dz + hvap*dqsdp*dp) / (cp * (1. + gamma))
746 dq = dqsdt * dt + dqsdp * dp
747 to(i,k) = to(i,k+1) + dt
748 qo(i,k) = qo(i,k+1) + dq
749 po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
757 if (k <= kmax(i)-1)
then
758 qeso(i,k) = 0.01 * fpvs(to(i,k))
759 qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1*qeso(i,k))
761 qeso(i,k) = max(qeso(i,k), val1)
763 qo(i,k) = max(qo(i,k), val2 )
765 rh(i,k) = min(qo(i,k)/qeso(i,k), 1.)
766 frh(i,k) = 1. - rh(i,k)
767 heo(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
768 & cp * to(i,k) + hvap * qo(i,k)
769 heso(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
770 & cp * to(i,k) + hvap * qeso(i,k)
771 uo(i,k) = .5 * (uo(i,k) + uo(i,k+1))
772 vo(i,k) = .5 * (vo(i,k) + vo(i,k+1))
776 if (.not.hwrf_samfdeep)
then
780 if (k <= kmax(i)-1)
then
781 ctro(i,k,n) = .5 * (ctro(i,k,n) + ctro(i,k+1,n))
788c look for the level of free convection as cloud base
797 if (flg(i) .and. k <= kbmax(i))
then
798 if(k > kb(i) .and. heo(i,kb(i)) > heso(i,k))
then
808 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
814 totflg = totflg .and. (.not. cnvflg(i))
823 pdot(i) = 0.01 * dot(i,kbcon(i))
827c turn off convection
if pressure depth between parcel source level
828c and cloud base is larger than a critical
value, cinpcr
832 if(islimsk(i) == 1)
then
843 if(pdot(i) <= w4)
then
844 tem = (pdot(i) - w4) / (w3 - w4)
845 elseif(pdot(i) >= -w4)
then
846 tem = - (pdot(i) + w4) / (w4 - w3)
855 ptem1= .5*(cinpcrmx-cinpcrmn)
856 cinpcr = cinpcrmx - ptem * ptem1
857 tem1 = pfld(i,kb(i)) - pfld(i,kbcon(i))
858 if(tem1 > cinpcr .and.
859 & zi(i,kbcon(i)) > hpbl(i))
then
865 if(do_ca .and. ca_trigger)
then
867 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
868 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
875 totflg = totflg .and. (.not. cnvflg(i))
891 if (cnvflg(i) .and. k <= kbm(i))
then
892 if(heo(i,k) > hmax(i))
then
902 if(flg(i)) kbcon(i) = kmax(i)
906 if (flg(i) .and. k <= kbmax(i))
then
907 if(k > kb(i) .and. heo(i,kb(i)) > heso(i,k))
then
916 if(cnvflg(i) .and. kbcon(i) == kmax(i))
then
921 if(do_ca .and. ca_trigger)
then
923 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
924 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
931 totflg = totflg .and. (.not. cnvflg(i))
939 pdot(i) = 0.01 * dot(i,kbcon(i))
952 if(k >= kb(i) .and. k < kbcon(i))
then
953 dz = zo(i,k+1) - zo(i,k)
954 rhbar(i) = rhbar(i) + rh(i,k) * dz
955 sumx(i) = sumx(i) + dz
962 rhbar(i) = rhbar(i) / sumx(i)
963 if(rhbar(i) < rhcrt)
then
969 if(do_ca .and. ca_trigger)
then
971 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
972 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
979 totflg = totflg .and. (.not. cnvflg(i))
988 if(.not. hwrf_samfdeep .and. ntk > 0)
then
999 if(k >= kb(i) .and. k < kbcon(i))
then
1000 dz = zo(i,k+1) - zo(i,k)
1001 tkemean(i) = tkemean(i) + tkeh(i,k) * dz
1002 sumx(i) = sumx(i) + dz
1010 tkemean(i) = tkemean(i) / sumx(i)
1011 if(tkemean(i) > tkemx)
then
1012 clamt(i) = clam + clamd
1013 else if(tkemean(i) < tkemn)
then
1014 clamt(i) = clam - clamd
1016 tem = tkemx - tkemean(i)
1017 tem1 = 1. - 2. * tem / dtke
1018 clamt(i) = clam + clamd * tem1
1023 if(do_ca .and. ca_entr)
then
1026 if(ca_deep(i) > nthresh)
then
1027 clamt(i) = clam - clamca
1041 if(tkemean(i) > tkcrt)
then
1042 tem = 1. + tkemean(i)/tkcrt
1043 tem1 = min(tem, cmxfac)
1044 clamt(i) = tem1 * clam
1045 xlamdet(i) = tem1 * xlamdet(i)
1046 xlamddt(i) = tem1 * xlamddt(i)
1047 cxlamet(i) = tem1 * cxlamet(i)
1048 cxlamdt(i) = tem1 * cxlamdt(i)
1055 if(do_ca .and. ca_entr)
then
1058 if(ca_deep(i) > nthresh)
then
1059 clamt(i) = clam - clamca
1090 dz =zo(i,k+1) - zo(i,k)
1091 xlamue(i,k) = clamt(i) / (zi(i,k) + dz)
1092 xlamue(i,k) = max(xlamue(i,k), crtlame)
1097c assume that updraft entrainment rate above cloud base is
1098c same as that at cloud base
1105 if (hwrf_samfdeep)
then
1108 xlamx(i) = xlamue(i,kbcon(i))
1114 & (k > kbcon(i) .and. k < kmax(i)))
then
1115 xlamue(i,k) = xlamx(i)
1121c specify detrainment rate for the updrafts
1126 if (hwrf_samfdeep)
then
1129 if(cnvflg(i) .and. k < kmax(i))
then
1130 xlamud(i,k) = xlamx(i)
1137 if(cnvflg(i) .and. k < kmax(i))
then
1139 xlamud(i,k) = 0.001 * clamt(i)
1145c entrainment functions decreasing with height(fent),
1146c mimicking a cloud ensemble
1147c(bechtold et al., 2008)
1152 & (k > kbcon(i) .and. k < kmax(i)))
then
1153 tem = qeso(i,k)/qeso(i,kbcon(i))
1154 fent1(i,k) = min(tem**2, 3.0)
1155 fent2(i,k) = min(tem**3, 5.2)
1160c final entrainment and detrainment rates as the sum of turbulent part and
1161c organized one depending on the environmental relative humidity
1162c(bechtold et al., 2008; derbyshire et al., 2011)
1164 if (hwrf_samfdeep)
then
1168 & (k > kbcon(i) .and. k < kmax(i)))
then
1169 tem = cxlamet(i) * frh(i,k) * fent2(i,k)
1170 xlamue(i,k) = xlamue(i,k)*fent1(i,k) + tem
1178 & (k > kbcon(i) .and. k < kmax(i)))
then
1179 tem = cxlamet(i) * frh(i,k) * fent2(i,k)
1180 xlamue(i,k) = xlamue(i,k)*fent1(i,k) + tem
1181 tem1 = cxlamdt(i) * frh(i,k)
1182 xlamud(i,k) = xlamud(i,k) + tem1
1190c determine updraft mass flux for the subcloud layers
1200 if(k < kbcon(i) .and. k >= kb(i))
then
1201 dz = zi(i,k+1) - zi(i,k)
1202 tem = 0.5*(xlamud(i,k)+xlamud(i,k+1))
1203 ptem = 0.5*(xlamue(i,k)+xlamue(i,k+1))-tem
1204 eta(i,k) = eta(i,k+1) / (1. + ptem * dz)
1210c compute mass flux above cloud base
1218 if(k > kbcon(i) .and. k < kmax(i))
then
1219 dz = zi(i,k) - zi(i,k-1)
1220 tem = 0.5*(xlamud(i,k)+xlamud(i,k-1))
1221 ptem = 0.5*(xlamue(i,k)+xlamue(i,k-1))-tem
1222 eta(i,k) = eta(i,k-1) * (1 + ptem * dz)
1223 if(eta(i,k) <= 0.)
then
1233c compute updraft cloud properties
1239 hcko(i,indx) = heo(i,indx)
1240 ucko(i,indx) = uo(i,indx)
1241 vcko(i,indx) = vo(i,indx)
1245 if (.not.hwrf_samfdeep)
then
1251 ecko(i,indx,n) = ctro(i,indx,n)
1252 ercko(i,indx,n) = ctro(i,indx,n)
1258c cloud property is modified by the entrainment process
1266 if(k > kb(i) .and. k < kmax(i))
then
1267 dz = zi(i,k) - zi(i,k-1)
1268 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1269 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
1270 factor = 1. + tem - tem1
1271 hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*
1272 & (heo(i,k)+heo(i,k-1)))/factor
1273 dbyo(i,k) = hcko(i,k) - heso(i,k)
1275 tem = 0.5 * cm * tem
1279 ucko(i,k) = ((1.-tem)*ucko(i,k-1)+ptem*uo(i,k)
1280 & +ptem1*uo(i,k-1))/factor
1281 vcko(i,k) = ((1.-tem)*vcko(i,k-1)+ptem*vo(i,k)
1282 & +ptem1*vo(i,k-1))/factor
1287 if (.not.hwrf_samfdeep)
then
1288 if (do_aerosols)
then
1297 if(k > kb(i) .and. k < kmax(i))
then
1298 dz = zi(i,k) - zi(i,k-1)
1299 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1302 ecko(i,k,n) = ((1.-tem)*ecko(i,k-1,n)+tem*
1303 & (ctro(i,k,n)+ctro(i,k-1,n)))/factor
1304 ercko(i,k,n) = ecko(i,k,n)
1310 if (do_aerosols)
then
1316 if(k > kb(i) .and. k < kmax(i))
then
1317 dz = zi(i,k) - zi(i,k-1)
1318 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1321 ecko(i,k,kk) = ((1. - tem) * ecko(i,k-1,kk) + tem *
1322 & (ctro(i,k,kk) + ctro(i,k-1,kk))) / factor
1323 ercko(i,k,kk) = ecko(i,k,kk)
1324 chem_c(i,k,n) = fscav(n) * ecko(i,k,kk)
1325 tem = chem_c(i,k,n) / (1. + c0t(i,k) * dz)
1326 chem_pw(i,k,n) = c0t(i,k) * dz * tem * eta(i,k-1)
1327 ecko(i,k,kk) = tem + ecko(i,k,kk) - chem_c(i,k,n)
1338 if(k > kb(i) .and. k < kmax(i))
then
1339 dz = zi(i,k) - zi(i,k-1)
1340 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1343 ecko(i,k,kk) = ((1. - tem) * ecko(i,k-1,kk) + tem *
1344 & (ctro(i,k,kk) + ctro(i,k-1,kk))) / factor
1345 ercko(i,k,kk) = ecko(i,k,kk)
1354c taking account into convection inhibition due to existence of
1355c dry layers below cloud base
1364 if (flg(i) .and. k < kmax(i))
then
1365 if(k >= kbcon(i) .and. dbyo(i,k) > 0.)
then
1374 if(kbcon1(i) == kmax(i)) cnvflg(i) = .false.
1379 tem = pfld(i,kbcon(i)) - pfld(i,kbcon1(i))
1387 if(do_ca .and. ca_trigger)
then
1389 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
1390 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
1397 totflg = totflg .and. (.not. cnvflg(i))
1403c calculate convective inhibition
1409 if(k > kb(i) .and. k < kbcon1(i))
then
1410 dz1 = zo(i,k+1) - zo(i,k)
1411 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1412 rfact = 1. + fv * cp * gamma
1416 & dz1 * (grav / (cp * to(i,k)))
1417 & * dbyo(i,k) / (1. + gamma)
1423 & max(val,(qeso(i,k) - qo(i,k)))
1429 if(hwrf_samfdeep)
then
1433 if(cina(i) < cinacr) cnvflg(i) = .false.
1439 if(islimsk(i) == 1)
then
1450 if(pdot(i) <= w4)
then
1451 tem = (pdot(i) - w4) / (w3 - w4)
1452 elseif(pdot(i) >= -w4)
then
1453 tem = - (pdot(i) + w4) / (w4 - w3)
1463 tem1= .5*(cinacrmx-cinacrmn)
1464 cinacr = cinacrmx - tem * tem1
1465 if(cina(i) < cinacr) cnvflg(i) = .false.
1470 if(do_ca .and. ca_trigger)
then
1472 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
1473 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
1480 totflg = totflg .and. (.not. cnvflg(i))
1486c determine first guess cloud top as the level of zero buoyancy
1495 if (flg(i) .and. k < kmax(i))
then
1496 if(k > kbcon1(i) .and. dbyo(i,k) < 0.)
then
1506 if(ktcon(i) == 1 .and. ktconn(i) > 1)
then
1507 ktcon(i) = ktconn(i)
1509 tem = pfld(i,kbcon(i))-pfld(i,ktcon(i))
1510 if(tem < cthk) cnvflg(i) = .false.
1515 if(do_ca .and. ca_trigger)
then
1517 if(ca_deep(i) > nthresh) cnvflg(i) = .true.
1518 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
1525 totflg = totflg .and. (.not. cnvflg(i))
1532c search for downdraft originating level above theta-e minimum
1537 hmin(i) = heo(i,kbcon1(i))
1544 if (cnvflg(i) .and. k <= kbmax(i))
then
1545 if(k > kbcon1(i) .and. heo(i,k) < hmin(i))
then
1553c make sure that jmin is within the cloud
1557 jmin(i) = min(lmin(i),ktcon(i)-1)
1558 jmin(i) = max(jmin(i),kbcon1(i)+1)
1559 if(jmin(i) >= ktcon(i)) cnvflg(i) = .false.
1563c specify upper limit of mass flux at cloud base
1569 dp = 1000. * del(i,k)
1570 xmbmax(i) = dp / (grav * dt2)
1574c compute cloud moisture property and precipitation
1580 qcko(i,kb(i)) = qo(i,kb(i))
1581 qrcko(i,kb(i)) = qo(i,kb(i))
1589 if(k > kb(i) .and. k < ktcon(i))
then
1590 dz = zi(i,k) - zi(i,k-1)
1591 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1593 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1595 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1598 qcko(i,k) = ((1.-tem)*qcko(i,k-1)+tem*
1599 & (qo(i,k)+qo(i,k-1)))/factor
1600 qrcko(i,k) = qcko(i,k)
1602 dq = eta(i,k) * (qcko(i,k) - qrch)
1606c check
if there is excess moisture to release latent heat
1608 if(k >= kbcon(i) .and. dq > 0.)
then
1609 etah = .5 * (eta(i,k) + eta(i,k-1))
1610 dp = 1000. * del(i,k)
1611 if(ncloud > 0 .and. k > jmin(i))
then
1612 ptem = c0t(i,k) + c1
1613 qlk = dq / (eta(i,k) + etah * ptem * dz)
1614 dellal(i,k) = etah * c1 * dz * qlk * grav / dp
1616 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1620 buo(i,k) = buo(i,k) - grav * qlk
1621 qcko(i,k) = qlk + qrch
1622 pwo(i,k) = etah * c0t(i,k) * dz * qlk
1623 pwavo(i) = pwavo(i) + pwo(i,k)
1625 cnvwt(i,k) = etah * qlk * grav / dp
1626 zdqca(i,k)=dq/eta(i,k)
1631 if(k >= kbcon(i))
then
1632 rfact = 1. + fv * cp * gamma
1634 buo(i,k) = buo(i,k) + (grav / (cp * to(i,k)))
1635 & * dbyo(i,k) / (1. + gamma)
1638 buo(i,k) = buo(i,k) + grav * fv *
1639 & max(val,(qeso(i,k) - qo(i,k)))
1640 drag(i,k) = max(xlamue(i,k),xlamud(i,k))
1642 tem = ((uo(i,k)-uo(i,k-1))/dz)**2
1643 tem = tem+((vo(i,k)-vo(i,k-1))/dz)**2
1644 wush(i,k) = csmf * sqrt(tem)
1660c calculate cloud work function
1700 if(k >= kbcon(i) .and. k < ktcon(i))
then
1701 dz1 = zo(i,k+1) - zo(i,k)
1703 aa1(i) = aa1(i) + buo(i,k) * dz1
1704 dbyo1(i,k) = hcko(i,k) - heso(i,k)
1712 if(cnvflg(i) .and. aa1(i) <= 0.) cnvflg(i) = .false.
1718 totflg = totflg .and. (.not. cnvflg(i))
1724c estimate the convective overshooting as the level
1725c
where the [aafac * cloud work function] becomes zero,
1726c which is the final cloud top.
1731 aa2(i) = aafac * aa1(i)
1737 ktcon1(i) = ktcon(i)
1742 if(k >= ktcon(i) .and. k < kmax(i))
then
1743 dz1 = zo(i,k+1) - zo(i,k)
1744 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1745 rfact = 1. + fv * cp * gamma
1749 & dz1 * (grav / (cp * to(i,k)))
1750 & * dbyo(i,k) / (1. + gamma)
1758 tem = 0.5 * (zi(i,ktcon(i))-zi(i,kbcon(i)))
1759 tem1 = zi(i,k)-zi(i,ktcon(i))
1760 if(aa2(i) < 0. .or. tem1 >= tem)
then
1769c compute cloud moisture property, detraining cloud water
1770c and precipitation in overshooting layers
1776 if(k >= ktcon(i) .and. k < ktcon1(i))
then
1777 dz = zi(i,k) - zi(i,k-1)
1778 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1780 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1782 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
1785 qcko(i,k) = ((1.-tem)*qcko(i,k-1)+tem*
1786 & (qo(i,k)+qo(i,k-1)))/factor
1787 qrcko(i,k) = qcko(i,k)
1789 dq = eta(i,k) * (qcko(i,k) - qrch)
1791c check
if there is excess moisture to release latent heat
1794 etah = .5 * (eta(i,k) + eta(i,k-1))
1795 dp = 1000. * del(i,k)
1797 ptem = c0t(i,k) + c1
1798 qlk = dq / (eta(i,k) + etah * ptem * dz)
1799 dellal(i,k) = etah * c1 * dz * qlk * grav / dp
1801 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1803 qcko(i,k) = qlk + qrch
1804 pwo(i,k) = etah * c0t(i,k) * dz * qlk
1805 pwavo(i) = pwavo(i) + pwo(i,k)
1807 cnvwt(i,k) = etah * qlk * grav / dp
1808 zdqca(i,k)=dq/eta(i,k)
1819 if (hwrf_samfdeep)
then
1823 tem = po(i,k) / (rd * to(i,k))
1824 wucb = -0.01 * dot(i,k) / (tem * grav)
1826 wu2(i,k) = wucb * wucb
1835 call progomega_calc(first_time_step,restart,im,km,
1836 & kbcon1,ktcon,omegain,delt,del,zi,cnvflg,omegaout,
1837 & grav,buo,drag,wush,lbb1,lbb2,lbb3,dt_decay)
1841 if(k >= kbcon1(i) .and. k < ktcon(i))
then
1842 omega_u(i,k)=omegaout(i,k)
1843 omega_u(i,k)=max(omega_u(i,k),-80.)
1845 rho = po(i,k)*100. / (rd * to(i,k))
1846 tem = (-omega_u(i,k)) / ((rho * grav))
1848 wu2(i,k) = max(wu2(i,k), 0.)
1858 if(k > kbcon1(i) .and. k < ktcon(i))
then
1859 dz = zi(i,k) - zi(i,k-1)
1860 tem = 0.25 * bb1 * (drag(i,k-1)+drag(i,k)) * dz
1861 tem1 = 0.5 * bb2 * (buo(i,k-1)+buo(i,k))
1862 tem2 = wush(i,k) * sqrt(wu2(i,k-1))
1863 tem2 = (tem1 - tem2) * dz
1864 ptem = (1. - tem) * wu2(i,k-1)
1866 wu2(i,k) = (ptem + tem2) / ptem1
1867 wu2(i,k) = max(wu2(i,k), 0.)
1876 if(k > kbcon1(i) .and. k < ktcon(i))
then
1877 rho = po(i,k)*100. / (rd * to(i,k))
1878 omega_u(i,k)=-1.0*sqrt(wu2(i,k))*rho*grav
1879 omega_u(i,k)=max(omega_u(i,k),-80.)
1897 if(k > kbcon1(i) .and. k < ktcon(i))
then
1898 dz = zi(i,k) - zi(i,k-1)
1899 tem = 0.5 * (sqrt(wu2(i,k)) + sqrt(wu2(i,k-1)))
1900 wc(i) = wc(i) + tem * dz
1901 sumx(i) = sumx(i) + dz
1908 if(sumx(i) == 0.)
then
1911 wc(i) = wc(i) / sumx(i)
1914 if (wc(i) < val) cnvflg(i)=.false.
1927 if(k >= kbcon1(i) .and. k < ktcon(i))
then
1928 dp = 1000. * del(i,k)
1929 tem = 0.5 * (omega_u(i,k) + omega_u(i,k-1))
1930 omegac(i) = omegac(i) + tem * dp
1931 sumx(i) = sumx(i) + dp
1938 if(sumx(i) == 0.)
then
1941 omegac(i) = omegac(i) / sumx(i)
1944 if (omegac(i) > val) cnvflg(i)=.false.
1952 if(k >= kbcon1(i) .and. k < ktcon(i))
then
1953 if(omega_u(i,k) .ne. 0.)
then
1954 zeta(i,k)=eta(i,k)*(omegac(i)/omega_u(i,k))
1958 zeta(i,k)=max(0.,zeta(i,k))
1959 zeta(i,k)=min(1.,zeta(i,k))
1968c exchange ktcon with ktcon1
1974 ktcon(i) = ktcon1(i)
1979c this section is ready for cloud water
1984c compute liquid and vapor separation at cloud top
1989 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1991 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1992 dq = qcko(i,k) - qrch
1994c check
if there is excess moisture to release latent heat
2006ccccc
if(lat.==.latd.and.lon.==.lond.and.cnvflg(i))
then
2007ccccc print *,
' aa1(i) before dwndrft =', aa1(i)
2010c------- downdraft calculations
2012c--- compute precipitation efficiency in terms of windshear
2028 if(k > kb(i) .and. k <= ktcon(i))
then
2029 shear = sqrt((uo(i,k)-uo(i,k-1)) ** 2
2030 & + (vo(i,k)-vo(i,k-1)) ** 2)
2031 vshear(i) = vshear(i) + shear
2038 vshear(i) = 1.e3 * vshear(i) / (zi(i,ktcon(i))-zi(i,kb(i)))
2039 e1=1.591-.639*vshear(i)
2040 & +.0953*(vshear(i)**2)-.00496*(vshear(i)**3)
2043 edt(i) = min(edt(i),val)
2045 edt(i) = max(edt(i),val)
2051c determine detrainment rate between 1 and kbcon
2066 if(k >= 1 .and. k < kd94(i))
then
2067 dz = zi(i,k+1) - zi(i,k)
2068 sumx(i) = sumx(i) + dz
2075 if(islimsk(i) == 1) beta = betal
2077 dz = (sumx(i)+zi(i,1))/float(kd94(i))
2078 tem = 1./float(kd94(i))
2079 xlamd(i) = (1.-beta**tem)/dz
2083c determine downdraft mass flux
2088 if (cnvflg(i) .and. k <= kmax(i)-1)
then
2089 if(k < jmin(i) .and. k >= kd94(i))
then
2090 dz = zi(i,k+1) - zi(i,k)
2091 ptem = xlamddt(i) - xlamdet(i)
2092 etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
2093 else if(k < kd94(i))
then
2094 dz = zi(i,k+1) - zi(i,k)
2095 ptem = xlamd(i) + xlamddt(i) - xlamdet(i)
2096 etad(i,k) = etad(i,k+1) * (1. - ptem * dz)
2102c--- downdraft moisture properties
2108 hcdo(i,jmn) = heo(i,jmn)
2109 qcdo(i,jmn) = qo(i,jmn)
2110 qrcdo(i,jmn)= qo(i,jmn)
2111 ucdo(i,jmn) = uo(i,jmn)
2112 vcdo(i,jmn) = vo(i,jmn)
2117 if (.not.hwrf_samfdeep)
then
2122 ecdo(i,jmn,n) = ctro(i,jmn,n)
2131 if (cnvflg(i) .and. k < jmin(i))
then
2132 dz = zi(i,k+1) - zi(i,k)
2133 if(k >= kd94(i))
then
2134 tem = xlamdet(i) * dz
2135 tem1 = 0.5 * xlamddt(i) * dz
2137 tem = xlamdet(i) * dz
2138 tem1 = 0.5 * (xlamd(i)+xlamddt(i)) * dz
2140 factor = 1. + tem - tem1
2141 hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*
2142 & (heo(i,k)+heo(i,k+1)))/factor
2143 dbyo(i,k) = hcdo(i,k) - heso(i,k)
2145 tem = 0.5 * cm * tem
2149 ucdo(i,k) = ((1.-tem)*ucdo(i,k+1)+ptem*uo(i,k+1)
2150 & +ptem1*uo(i,k))/factor
2151 vcdo(i,k) = ((1.-tem)*vcdo(i,k+1)+ptem*vo(i,k+1)
2152 & +ptem1*vo(i,k))/factor
2156 if(.not.hwrf_samfdeep)
then
2160 if (cnvflg(i) .and. k < jmin(i))
then
2161 dz = zi(i,k+1) - zi(i,k)
2162 tem = 0.5 * xlamdet(i) * dz
2165 ecdo(i,k,n) = ((1.-tem)*ecdo(i,k+1,n)+tem*
2166 & (ctro(i,k,n)+ctro(i,k+1,n)))/factor
2176 if (cnvflg(i) .and. k < jmin(i))
then
2177 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
2178 qrcdo(i,k) = qeso(i,k)+
2179 & (1./hvap)*(gamma/(1.+gamma))*dbyo(i,k)
2182 dz = zi(i,k+1) - zi(i,k)
2183 tem = 0.5 * xlamdet(i) * dz
2186 qcdo(i,k) = ((1.-tem)*qrcdo(i,k+1)+tem*
2187 & (qo(i,k)+qo(i,k+1)))/factor
2194 pwdo(i,k) = etad(i,k) * (qcdo(i,k) - qrcdo(i,k))
2195 pwevo(i) = pwevo(i) + pwdo(i,k)
2200c--- final downdraft strength dependent on precip
2201c--- efficiency(edt), normalized condensate(pwav), and
2207 if(islimsk(i) == 0) edtmax = edtmaxs
2209 if(pwevo(i) < 0.)
then
2210 edto(i) = -edto(i) * pwavo(i) / pwevo(i)
2211 edto(i) = min(edto(i),edtmax)
2218c--- downdraft cloudwork functions
2223 if (cnvflg(i) .and. k < jmin(i))
then
2224 gamma = el2orc * qeso(i,k) / to(i,k)**2
2229 dz = zo(i,k) - zo(i,k+1)
2231 aa1(i) = aa1(i)+edto(i)*dz
2232 & *(grav/(cp*dt))*((dhh-dh)/(1.+dg))
2233 & *(1.+fv*cp*dg*dt/hvap)
2236 aa1(i) = aa1(i)+edto(i)*dz
2237 & *grav*fv*max(val,(qeso(i,k)-qo(i,k)))
2243 if(cnvflg(i) .and. aa1(i) <= 0.)
then
2251 totflg = totflg .and. (.not. cnvflg(i))
2257c--- what would the change be, that a cloud with unit mass
2258c--- will
do to the environment?
2263 if(cnvflg(i) .and. k <= kmax(i))
then
2271 if (.not.hwrf_samfdeep)
then
2275 if(cnvflg(i) .and. k <= kmax(i))
then
2284 dp = 1000. * del(i,1)
2285 tem = edto(i) * etad(i,1) * grav / dp
2286 dellah(i,1) = tem * (hcdo(i,1) - heo(i,1))
2287 dellaq(i,1) = tem * qrcdo(i,1)
2288 dellau(i,1) = tem * (ucdo(i,1) - uo(i,1))
2289 dellav(i,1) = tem * (vcdo(i,1) - vo(i,1))
2292 if (.not.hwrf_samfdeep)
then
2296 dp = 1000. * del(i,1)
2297 dellae(i,1,n) = edto(i) * etad(i,1) * ecdo(i,1,n)
2304c--- changed due to subsidence and entrainment
2308 if (cnvflg(i) .and. k < ktcon(i))
then
2310 if(k <= kb(i)) aup = 0.
2312 if(k > jmin(i)) adw = 0.
2313 dp = 1000. * del(i,k)
2314 dz = zi(i,k) - zi(i,k-1)
2317 dv2h = .5 * (heo(i,k) + heo(i,k-1))
2320 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1))
2321 tem1 = 0.5 * (xlamud(i,k)+xlamud(i,k-1))
2323 if(k <= kd94(i))
then
2325 ptem1 = xlamd(i)+xlamddt(i)
2333 dellah(i,k) = dellah(i,k) +
2334 & ((aup*eta(i,k)-adw*edto(i)*etad(i,k))*dv1h
2335 & - (aup*eta(i,k-1)-adw*edto(i)*etad(i,k-1))*dv3h
2336 & - (aup*tem*eta(i,k-1)+adw*edto(i)*ptem*etad(i,k))*dv2h*dz
2337 & + aup*tem1*eta(i,k-1)*.5*(hcko(i,k)+hcko(i,k-1))*dz
2338 & + adw*edto(i)*ptem1*etad(i,k)*.5*(hcdo(i,k)+hcdo(i,k-1))*dz
2341 tem1 = -eta(i,k) * qrcko(i,k)
2342 tem2 = -eta(i,k-1) * qcko(i,k-1)
2343 ptem1 = -etad(i,k) * qrcdo(i,k)
2344 ptem2 = -etad(i,k-1) * qcdo(i,k-1)
2345 dellaq(i,k) = dellaq(i,k) +
2346 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*factor
2348 tem1=eta(i,k)*(uo(i,k)-ucko(i,k))
2349 tem2=eta(i,k-1)*(uo(i,k-1)-ucko(i,k-1))
2350 ptem1=etad(i,k)*(uo(i,k)-ucdo(i,k))
2351 ptem2=etad(i,k-1)*(uo(i,k-1)-ucdo(i,k-1))
2352 dellau(i,k) = dellau(i,k) +
2353 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*factor
2355 tem1=eta(i,k)*(vo(i,k)-vcko(i,k))
2356 tem2=eta(i,k-1)*(vo(i,k-1)-vcko(i,k-1))
2357 ptem1=etad(i,k)*(vo(i,k)-vcdo(i,k))
2358 ptem2=etad(i,k-1)*(vo(i,k-1)-vcdo(i,k-1))
2359 dellav(i,k) = dellav(i,k) +
2360 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*factor
2365 if (.not.hwrf_samfdeep)
then
2369 if (cnvflg(i) .and. k < ktcon(i))
then
2371 if(k <= kb(i)) aup = 0.
2373 if(k > jmin(i)) adw = 0.
2374 dp = 1000. * del(i,k)
2376 tem1 = -eta(i,k) * ercko(i,k,n)
2377 tem2 = -eta(i,k-1) * ecko(i,k-1,n)
2378 ptem1 = -etad(i,k) * ecdo(i,k,n)
2379 ptem2 = -etad(i,k-1) * ecdo(i,k-1,n)
2380 dellae(i,k,n) = dellae(i,k,n) +
2381 & (aup*(tem1-tem2)-adw*edto(i)*(ptem1-ptem2))*grav/dp
2394 dp = 1000. * del(i,indx)
2395 tem = eta(i,indx-1) * grav / dp
2396 dellah(i,indx) = tem * (hcko(i,indx-1) - heo(i,indx-1))
2397 dellaq(i,indx) = tem * qcko(i,indx-1)
2398 dellau(i,indx) = tem * (ucko(i,indx-1) - uo(i,indx-1))
2399 dellav(i,indx) = tem * (vcko(i,indx-1) - vo(i,indx-1))
2403 dellal(i,indx) = tem * qlko_ktcon(i)
2406 if (.not.hwrf_samfdeep)
then
2411 dp = 1000. * del(i,indx)
2412 dellae(i,indx,n) = eta(i,indx-1) *
2413 & ecko(i,indx-1,n) * grav / dp
2426 if(cnvflg(i) .and. k <= ktcon(i))
then
2427 q_diff(i,k) = q1(i,k) - q1(i,k+1)
2433 if(q1(i,1) >= 0.)
then
2434 q_diff(i,0) = max(0.,2.*q1(i,1)-q1(i,2))-
2437 q_diff(i,0) = min(0.,2.*q1(i,1)-q1(i,2))-
2446 if(cnvflg(i) .and. k < ktcon(i))
then
2448 if(k >= kb(i)) tem = eta(i,k)
2449 if(k <= jmin(i))
then
2450 tem = tem - edto(i) * etad(i,k)
2454 if(abs(q_diff(i,k)) > 1.e-22)
2455 & rrkp = q_diff(i,k+1) / q_diff(i,k)
2456 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2458 & phkp*(qo(i,k)-q1(i,k+1))
2459 flxtvd(i,k) = tem * tem1
2460 elseif(tem < 0.)
then
2462 if(abs(q_diff(i,k)) > 1.e-22)
2463 & rrkp = q_diff(i,k-1) / q_diff(i,k)
2464 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2466 & phkp*(qo(i,k)-q1(i,k))
2467 flxtvd(i,k) = tem * tem1
2475 if(k == jmin(i))
then
2476 dp = 1000. * del(i,k+1)
2477 dellaq(i,k+1) = dellaq(i,k+1) -
2478 & edto(i) * etad(i,k) * tem1 * grav/dp
2481 dp = 1000. * del(i,k)
2482 dellaq(i,k) = dellaq(i,k) -
2483 & eta(i,k) * tem1 * grav/dp
2492 if(cnvflg(i) .and. k <= ktcon(i))
then
2493 dp = 1000. * del(i,k)
2494 dellaq(i,k) = dellaq(i,k) +
2495 & (flxtvd(i,k) - flxtvd(i,k-1)) * grav/dp
2502 if (.not.hwrf_samfdeep)
then
2507 if(cnvflg(i) .and. k <= ktcon(i))
then
2508 e_diff(i,k,n) = ctr(i,k,n) - ctr(i,k+1,n)
2514 if(ctr(i,1,n) >= 0.)
then
2515 e_diff(i,0,n) = max(0.,2.*ctr(i,1,n)-ctr(i,2,n))-
2518 e_diff(i,0,n) = min(0.,2.*ctr(i,1,n)-ctr(i,2,n))-
2530 if(cnvflg(i) .and. k < ktcon(i))
then
2532 if(k >= kb(i)) tem = eta(i,k)
2533 if(k <= jmin(i))
then
2534 tem = tem - edto(i) * etad(i,k)
2538 if(abs(e_diff(i,k,n)) > 1.e-22)
2539 & rrkp = e_diff(i,k+1,n) / e_diff(i,k,n)
2540 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2541 tem1 = ctr(i,k+1,n) +
2542 & phkp*(ctro(i,k,n)-ctr(i,k+1,n))
2543 flxtvd(i,k) = tem * tem1
2544 elseif(tem < 0.)
then
2546 if(abs(e_diff(i,k,n)) > 1.e-22)
2547 & rrkp = e_diff(i,k-1,n) / e_diff(i,k,n)
2548 phkp = (rrkp+abs(rrkp)) / (1.+abs(rrkp))
2550 & phkp*(ctro(i,k,n)-ctr(i,k,n))
2551 flxtvd(i,k) = tem * tem1
2559 if(k == jmin(i))
then
2560 dp = 1000. * del(i,k+1)
2561 dellae(i,k+1,n) = dellae(i,k+1,n) -
2562 & edto(i)*etad(i,k) * tem1 * grav/dp
2565 dp = 1000. * del(i,k)
2566 dellae(i,k,n) = dellae(i,k,n) -
2567 & eta(i,k) * tem1 * grav/dp
2576 if(cnvflg(i) .and. k <= ktcon(i))
then
2577 dp = 1000. * del(i,k)
2578 dellae(i,k,n) = dellae(i,k,n) +
2579 & (flxtvd(i,k) - flxtvd(i,k-1)) * grav/dp
2588c------- final changed variable per unit mass flux
2602 asqecflg(i) = cnvflg(i)
2603 if(asqecflg(i) .and. gdx(i) < dxcrtas)
then
2604 asqecflg(i) = .false.
2612 if (asqecflg(i) .and. k <= kmax(i))
then
2613 if(k > ktcon(i))
then
2617 if(k <= ktcon(i))
then
2618 qo(i,k) = dellaq(i,k) * mbdt(i) + q1(i,k)
2619 dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
2620 to(i,k) = dellat * mbdt(i) + t1(i,k)
2622 qo(i,k) = max(qo(i,k), val )
2629c--- the above changed environment is now used to calulate the
2630c--- effect the arbitrary cloud(with unit mass flux)
2631c--- would have on the stability,
2632c--- which
then is used to calculate the real mass flux,
2633c--- necessary to keep this change in balance with the large-scale
2634c--- destabilization.
2636c--- environmental conditions again, first heights
2643 if(asqecflg(i) .and. k <= kmax(i))
then
2644 qeso(i,k) = 0.01 * fpvs(to(i,k))
2645 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k)+epsm1*qeso(i,k))
2647 qeso(i,k) = max(qeso(i,k), val )
2653c--- moist static energy
2658 if(asqecflg(i) .and. k <= kmax(i)-1)
then
2659 dz = .5 * (zo(i,k+1) - zo(i,k))
2660 dp = .5 * (pfld(i,k+1) - pfld(i,k))
2661 es = 0.01 * fpvs(to(i,k+1))
2662 pprime = pfld(i,k+1) + epsm1 * es
2663 qs = eps * es / pprime
2664 dqsdp = - qs / pprime
2665 desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
2666 dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
2667 gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
2668 dt = (grav * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
2669 dq = dqsdt * dt + dqsdp * dp
2670 to(i,k) = to(i,k+1) + dt
2671 qo(i,k) = qo(i,k+1) + dq
2672 po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
2678 if(asqecflg(i) .and. k <= kmax(i)-1)
then
2679 qeso(i,k) = 0.01 * fpvs(to(i,k))
2680 qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1 * qeso(i,k))
2682 qeso(i,k) = max(qeso(i,k), val1)
2684 qo(i,k) = max(qo(i,k), val2 )
2686 heo(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
2687 & cp * to(i,k) + hvap * qo(i,k)
2688 heso(i,k) = .5 * grav * (zo(i,k) + zo(i,k+1)) +
2689 & cp * to(i,k) + hvap * qeso(i,k)
2694 if(asqecflg(i))
then
2696 heo(i,k) = grav * zo(i,k) + cp * to(i,k) + hvap * qo(i,k)
2697 heso(i,k) = grav * zo(i,k) + cp * to(i,k) + hvap * qeso(i,k)
2698c heo(i,k) = min(heo(i,k),heso(i,k))
2702c**************************** static control
2704c------- moisture and cloud work functions
2708 if(asqecflg(i))
then
2715 if(asqecflg(i))
then
2717 hcko(i,indx) = heo(i,indx)
2718 qcko(i,indx) = qo(i,indx)
2723 if (asqecflg(i))
then
2724 if(k > kb(i) .and. k <= ktcon(i))
then
2725 dz = zi(i,k) - zi(i,k-1)
2726 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
2727 tem1 = 0.25 * (xlamud(i,k)+xlamud(i,k-1)) * dz
2728 factor = 1. + tem - tem1
2729 hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*
2730 & (heo(i,k)+heo(i,k-1)))/factor
2737 if (asqecflg(i))
then
2738 if(k > kb(i) .and. k < ktcon(i))
then
2739 dz = zi(i,k) - zi(i,k-1)
2740 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
2741 xdby = hcko(i,k) - heso(i,k)
2743 & + gamma * xdby / (hvap * (1. + gamma))
2745 tem = 0.25 * (xlamue(i,k)+xlamue(i,k-1)) * dz
2748 qcko(i,k) = ((1.-tem)*qcko(i,k-1)+tem*
2749 & (qo(i,k)+qo(i,k-1)))/factor
2751 dq = eta(i,k) * (qcko(i,k) - xqrch)
2753 if(k >= kbcon(i) .and. dq > 0.)
then
2754 etah = .5 * (eta(i,k) + eta(i,k-1))
2755 if(ncloud > 0 .and. k > jmin(i))
then
2756 ptem = c0t(i,k) + c1
2757 qlk = dq / (eta(i,k) + etah * ptem * dz)
2759 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
2761 if(k < ktcon1(i))
then
2763 xaa0(i) = xaa0(i) - dz * grav * qlk
2765 qcko(i,k) = qlk + xqrch
2766 xpw = etah * c0t(i,k) * dz * qlk
2767 xpwav(i) = xpwav(i) + xpw
2770 if(k >= kbcon(i) .and. k < ktcon1(i))
then
2771 dz1 = zo(i,k+1) - zo(i,k)
2772 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
2773 rfact = 1. + fv * cp * gamma
2777 & + dz1 * (grav / (cp * to(i,k)))
2778 & * xdby / (1. + gamma)
2784 & max(val,(qeso(i,k) - qo(i,k)))
2790c------- downdraft calculations
2792c--- downdraft moisture properties
2796 if(asqecflg(i))
then
2798 hcdo(i,jmn) = heo(i,jmn)
2799 qcdo(i,jmn) = qo(i,jmn)
2800 qrcd(i,jmn) = qo(i,jmn)
2807 if (asqecflg(i) .and. k < jmin(i))
then
2808 dz = zi(i,k+1) - zi(i,k)
2809 if(k >= kd94(i))
then
2810 tem = xlamdet(i) * dz
2811 tem1 = 0.5 * xlamddt(i) * dz
2813 tem = xlamdet(i) * dz
2814 tem1 = 0.5 * (xlamd(i)+xlamddt(i)) * dz
2816 factor = 1. + tem - tem1
2817 hcdo(i,k) = ((1.-tem1)*hcdo(i,k+1)+tem*0.5*
2818 & (heo(i,k)+heo(i,k+1)))/factor
2825 if (asqecflg(i) .and. k < jmin(i))
then
2828 gamma = el2orc * dq / dt**2
2829 dh = hcdo(i,k) - heso(i,k)
2830 qrcd(i,k)=dq+(1./hvap)*(gamma/(1.+gamma))*dh
2833 dz = zi(i,k+1) - zi(i,k)
2834 tem = 0.5 * xlamdet(i) * dz
2837 qcdo(i,k) = ((1.-tem)*qrcd(i,k+1)+tem*
2838 & (qo(i,k)+qo(i,k+1)))/factor
2845 xpwd = etad(i,k) * (qcdo(i,k) - qrcd(i,k))
2846 xpwev(i) = xpwev(i) + xpwd
2853 if(islimsk(i) == 0) edtmax = edtmaxs
2854 if(asqecflg(i))
then
2855 if(xpwev(i) >= 0.)
then
2858 edtx(i) = -edtx(i) * xpwav(i) / xpwev(i)
2859 edtx(i) = min(edtx(i),edtmax)
2865c--- downdraft cloudwork functions
2870 if (asqecflg(i) .and. k < jmin(i))
then
2871 gamma = el2orc * qeso(i,k) / to(i,k)**2
2876 dz = zo(i,k) - zo(i,k+1)
2878 xaa0(i) = xaa0(i)+edtx(i)*dz
2879 & *(grav/(cp*dt))*((dhh-dh)/(1.+dg))
2880 & *(1.+fv*cp*dg*dt/hvap)
2883 xaa0(i) = xaa0(i)+edtx(i)*dz
2884 & *grav*fv*max(val,(qeso(i,k)-qo(i,k)))
2889c calculate critical cloud work function
2921c modify critical cloud workfunction by cloud base vertical velocity
2936c modify acrtfct(i) by colume mean rh
if rhbar(i) is greater than 80 percent
2938c
if(rhbar(i) >= .8)
then
2939c acrtfct(i) = acrtfct(i) * (.9 - min(rhbar(i),.9)) * 10.
2942c modify adjustment time scale by cloud base vertical velocity
2946c dtconv(i) = max(dtconv(i), dt2)
2947c dtconv(i) = 1800. * (pdot(i) - w2) / (w1 - w2)
2960 tem = zi(i,ktcon1(i)) - zi(i,kbcon1(i))
2962 wc_eff = max(wc(i), wc_min)
2963 dtconv(i) = tem / wc_eff
2965 dtconv(i) = tem / wc(i)
2968 if (.not. hwrf_samfdeep)
then
2969 tfac = 1. + gdx(i) / 75000.
2970 dtconv(i) = tfac * dtconv(i)
2973 dtconv(i) = max(dtconv(i), dtmin)
2974 dtconv(i) = min(dtconv(i), dtmax)
2988 if(k >= kbcon1(i) .and. k < ktcon1(i))
then
2989 dz = zi(i,k) - zi(i,k-1)
2990 tem = sqrt(u1(i,k)*u1(i,k)+v1(i,k)*v1(i,k))
2991 umean(i) = umean(i) + tem * dz
2992 sumx(i) = sumx(i) + dz
2999 umean(i) = umean(i) / sumx(i)
3000 umean(i) = max(umean(i), 1.)
3001 tauadv = gdx(i) / umean(i)
3002 advfac(i) = tauadv / dtconv(i)
3003 advfac(i) = min(cat_adj_deep*advfac(i), 1.)
3010 if(first_time_step .and. (.not.restart
3011 & .or. sigmab_coldstart))
then
3020 qadv(i,k)=(q(i,k) - prevsq(i,k))*invdelt
3027 tmfq(i,k)=tmf(i,k,1)
3031 flag_shallow = .false.
3033 call progsigma_calc(im,km,first_time_step,restart,flag_shallow,
3034 & flag_mid,del,tmfq,qmicro,dbyo1,zdqca,omega_u,zeta,hvap,
3035 & delt,qadv,kb,kbcon1,ktcon,cnvflg,betascu,betamcu,betadcu,
3036 & sigmind,sigminm,sigmins,sigmain,sigmaout,sigmab)
3043 if(cnvflg(i) .and. .not.asqecflg(i))
then
3045 rho = po(i,k)*100. / (rd*to(i,k))
3047 xmb(i) = advfac(i)*sigmab(i)*((-1.0*omegac(i))*gravinv)
3049 xmb(i) = advfac(i)*betaw*rho*wc(i)
3059 if(asqecflg(i))
then
3061 fld(i)=aa1(i)/dtconv(i)
3062 if(fld(i) <= 0.)
then
3063 asqecflg(i) = .false.
3072 if(asqecflg(i))
then
3073c xaa0(i) = max(xaa0(i),0.)
3074 xk(i) = (xaa0(i) - aa1(i)) / mbdt(i)
3075 if(xk(i) >= 0.)
then
3076 asqecflg(i) = .false.
3081c--- kernel, cloud base mass flux
3089 if(asqecflg(i))
then
3090 xmb(i) = -advfac(i) * fld(i) / xk(i)
3098 totflg = totflg .and. (.not. cnvflg(i))
3106 tem = min(max(xlamue(i,kbcon(i)), 7.e-5), 3.e-4)
3108 tem1 = 3.14 * tem * tem
3109 sigmagfm(i) = tem1 / garea(i)
3110 sigmagfm(i) = max(sigmagfm(i), 0.001)
3111 sigmagfm(i) = min(sigmagfm(i), 0.999)
3118 if (gdx(i) < dxcrtuf)
then
3120 scaldfunc(i)=(1.-sigmab(i))*(1.-sigmab(i))
3122 scaldfunc(i) = (1.-sigmagfm(i)) * (1.-sigmagfm(i))
3124 scaldfunc(i) = max(min(scaldfunc(i), 1.0), 0.)
3128 xmb(i) = xmb(i) * scaldfunc(i)
3129 xmb(i) = min(xmb(i),xmbmax(i))
3142c restore to,qo,uo,vo to t1,q1,u1,v1 in
case convection stops
3146 if (cnvflg(i) .and. k <= kmax(i))
then
3151 qeso(i,k) = 0.01 * fpvs(t1(i,k))
3152 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
3154 qeso(i,k) = max(qeso(i,k), val )
3158 if (.not.hwrf_samfdeep)
then
3163 if (cnvflg(i) .and. k <= kmax(i))
then
3164 ctro(i,k,n) = qtr(i,k,kk)
3172c--- feedback: simply the changes from the cloud with unit mass flux
3173c--- multiplied by the mass flux necessary to keep the
3174c--- equilibrium with the larger-scale.
3188 if (.not.hwrf_samfdeep)
then
3197 if (cnvflg(i) .and. k <= kmax(i))
then
3198 if(k <= ktcon(i))
then
3200 dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
3201 new_t1(i,k) = t1(i,k) + tem2 * dellat
3202 new_q1(i,k) = q1(i,k) + tem2 * dellaq(i,k)
3206 new_u1(i,k) = u1(i,k) + tem2 * dellau(i,k)
3207 new_v1(i,k) = v1(i,k) + tem2 * dellav(i,k)
3208 dp = 1000. * del(i,k)
3209 tem = xmb(i) * dp / grav
3210 delhbar(i) = delhbar(i) + tem * dellah(i,k)
3211 delqbar(i) = delqbar(i) + tem * dellaq(i,k)
3212 deltbar(i) = deltbar(i) + tem * dellat
3213 delubar(i) = delubar(i) + tem * dellau(i,k)
3214 delvbar(i) = delvbar(i) + tem * dellav(i,k)
3230 if(cnvflg(i) .and. k <= ktcon(i))
then
3231 tem = new_q1(i,k) * delp(i,k) / grav
3232 if(new_q1(i,k) < 0.) tsumn(i) = tsumn(i) + tem
3233 if(new_q1(i,k) > 0.) tsump(i) = tsump(i) + tem
3239 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
3240 if(tsump(i) > abs(tsumn(i)))
then
3241 rtnp(i) = tsumn(i) / tsump(i)
3243 rtnp(i) = tsump(i) / tsumn(i)
3250 if(cnvflg(i) .and. k <= ktcon(i))
then
3251 if(rtnp(i) < 0.)
then
3252 if(tsump(i) > abs(tsumn(i)))
then
3253 if(new_q1(i,k) < 0.) new_q1(i,k) = 0.
3254 if(new_q1(i,k) > 0.) new_q1(i,k) = &
3255 & (1.+rtnp(i))*new_q1(i,k)
3257 if(new_q1(i,k) < 0.) new_q1(i,k) = &
3258 & (1.+rtnp(i))*new_q1(i,k)
3259 if(new_q1(i,k) > 0.) new_q1(i,k) = 0.
3266 if (.not.hwrf_samfdeep)
then
3272 if (cnvflg(i) .and. k <= kmax(i))
then
3273 if(k <= ktcon(i))
then
3274 ctr(i,k,n) = ctr(i,k,n)+dellae(i,k,n)*xmb(i)*dt2
3275 dp = 1000. * del(i,k)
3276 delebar(i,n)=delebar(i,n)+dellae(i,k,n)*xmb(i)*dp/grav
3292 if(cnvflg(i) .and. k <= ktcon(i))
then
3295 dz = zi(i,k) - zi(i,k-1)
3299 tem = ctr(i,k,n) * dz
3301 tem = ctr(i,k,n) * delp(i,k) / grav
3303 if(ctr(i,k,n) < 0.) tsumn(i) = tsumn(i) + tem
3304 if(ctr(i,k,n) > 0.) tsump(i) = tsump(i) + tem
3310 if(tsump(i) > 0. .and. tsumn(i) < 0.)
then
3311 if(tsump(i) > abs(tsumn(i)))
then
3312 rtnp(i) = tsumn(i) / tsump(i)
3314 rtnp(i) = tsump(i) / tsumn(i)
3321 if(cnvflg(i) .and. k <= ktcon(i))
then
3322 if(rtnp(i) < 0.)
then
3323 if(tsump(i) > abs(tsumn(i)))
then
3324 if(ctr(i,k,n)<0.) ctr(i,k,n)=0.
3325 if(ctr(i,k,n)>0.) ctr(i,k,n)=(1.+rtnp(i))*ctr(i,k,n)
3327 if(ctr(i,k,n)<0.) ctr(i,k,n)=(1.+rtnp(i))*ctr(i,k,n)
3328 if(ctr(i,k,n)>0.) ctr(i,k,n)=0.
3338 if(cnvflg(i) .and. k <= ktcon(i))
then
3339 new_qtr(i,k,kk) = ctr(i,k,n)
3346 if (do_aerosols)
then
3354 if(k > kb(i) .and. k < ktcon(i))
then
3355 dp = 1000. * del(i,k)
3356 wet_dep(i,k,n) = chem_pw(i,k,n)*grav/dp
3357 wet_dep(i,k,n) = wet_dep(i,k,n)*xmb(i)*dt2*dp
3367 if(k > kb(i) .and. k < ktcon(i))
then
3368 dp = 1000. * del(i,k)
3369 if (new_qtr(i,k,kk) < 0.)
then
3371 tem = -new_qtr(i,k,kk)*dp
3372 if(wet_dep(i,k,n) >= tem)
then
3373 wet_dep(i,k,n) = wet_dep(i,k,n) - tem
3374 new_qtr(i,k,kk) = 0.
3377 new_qtr(i,k,kk) = new_qtr(i,k,kk)+ &
3395 if (cnvflg(i) .and. k <= kmax(i))
then
3396 if(k <= ktcon(i))
then
3397 qeso(i,k) = 0.01 * fpvs(new_t1(i,k))
3398 qeso(i,k) = eps * qeso(i,k)/(pfld(i,k) + epsm1*qeso(i,k))
3400 qeso(i,k) = max(qeso(i,k), val )
3415 if (cnvflg(i) .and. k <= kmax(i))
then
3416 if(k < ktcon(i))
then
3418 if(k <= kb(i)) aup = 0.
3420 if(k >= jmin(i)) adw = 0.
3421 rain = aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
3422 rntot(i) = rntot(i) + rain * xmb(i) * .001 * dt2
3432 if (k <= kmax(i))
then
3436 if(cnvflg(i) .and. k < ktcon(i))
then
3438 if(k <= kb(i)) aup = 0.
3440 if(k >= jmin(i)) adw = 0.
3441 rain = aup * pwo(i,k) + adw * edto(i) * pwdo(i,k)
3442 rn(i) = rn(i) + rain * xmb(i) * .001 * dt2
3444 if(flg(i) .and. k < ktcon(i))
then
3448 qcond(i) = evef * (new_q1(i,k) - qeso(i,k))
3449 & / (1. + el2orc * qeso(i,k) / new_t1(i,k)**2)
3450 dp = 1000. * del(i,k)
3453 if(rn(i) > 0. .and. qcond(i) < 0.)
then
3454 qevap(i) = -qcond(i) * (1.-exp(-.32*sqrt(dt2*rn(i))))
3455 qevap(i) = min(qevap(i), rn(i)*1000.*tem)
3456 delq2(i) = delqev(i) + .001 * qevap(i) * tem1
3458 if(rn(i) > 0. .and. qcond(i) < 0. .and.
3459 & delq2(i) > rntot(i))
then
3460 qevap(i) = 1000.* tem * (rntot(i) - delqev(i))
3463 if(rn(i) > 0. .and. qevap(i) > 0.)
then
3464 new_q1(i,k) = new_q1(i,k) + qevap(i)
3465 new_t1(i,k) = new_t1(i,k) - elocp * qevap(i)
3466 rn(i) = rn(i) - .001 * qevap(i) * tem1
3467 deltv(i) = - elocp*qevap(i)/dt2
3468 delq(i) = + qevap(i)/dt2
3469 delqev(i) = delqev(i) + .001 * qevap(i) * tem1
3471 delqbar(i) = delqbar(i) + delq(i) * tem1
3472 deltbar(i) = deltbar(i) + deltv(i) * tem1
3481 rainevap(i)=delqev(i)
3499c precipitation rate converted to actual precip
3500c in unit of m instead of kg
3505c in the event of upper level rain evaporation and lower level downdraft
3506c moistening, rn can become negative, in this
case, we back out of the
3507c heating and the moistening
3509 if(rn(i) < 0. .and. .not.flg(i)) rn(i) = 0.
3510 if(rn(i) <= 0.)
then
3524 if (cnvflg(i) .and. rn(i) > 0.)
then
3525 if (k >= kbcon(i) .and. k < ktcon(i))
then
3526 cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
3528 cnvw(i,k) = cnvw(i,k) * cscale
3530 cnvw(i,k) = cnvw(i,k) * cscale
3537c convective cloud cover
3542 if (cnvflg(i) .and. rn(i) > 0.)
then
3543 if (k >= kbcon(i) .and. k < ktcon(i))
then
3544 cnvc(i,k) = 0.04 * log(1. + 675. * eta(i,k) * xmb(i))
3545 cnvc(i,k) = min(cnvc(i,k), 0.6)
3546 cnvc(i,k) = max(cnvc(i,k), 0.0)
3555 if (ncloud > 0)
then
3559 if (cnvflg(i) .and. rn(i) > 0.)
then
3561 if (k >= kbcon(i) .and. k <= ktcon(i))
then
3562 tem = dellal(i,k) * xmb(i) * dt2
3563 tem1 = max(0.0, min(1.0, (tcr-new_t1(i,k))*tcrf))
3564 if (new_qtr(i,k,2) > -999.0)
then
3565 new_qtr(i,k,1) = new_qtr(i,k,1) + tem * tem1
3566 new_qtr(i,k,2) = new_qtr(i,k,2) + tem *(1.0-tem1)
3568 new_qtr(i,k,1) = new_qtr(i,k,1) + tem
3580 if(cnvflg(i) .and. rn(i) <= 0.)
then
3581 if (k <= kmax(i))
then
3582 new_t1(i,k) = to(i,k)
3583 new_q1(i,k) = qo(i,k)
3584 new_u1(i,k) = uo(i,k)
3585 new_v1(i,k) = vo(i,k)
3590 if (.not.hwrf_samfdeep)
then
3595 if(cnvflg(i) .and. rn(i) <= 0.)
then
3596 if (k <= kmax(i))
then
3597 new_qtr(i,k,kk)= ctro(i,k,n)
3603 if (do_aerosols)
then
3607 if(cnvflg(i) .and. rn(i) <= 0.)
then
3608 if (k <= ktcon(i))
then
3638 if(cnvflg(i) .and. rn(i) > 0.)
then
3639 if(k >= kb(i) .and. k < ktop(i))
then
3640 ud_mf(i,k) = eta(i,k) * xmb(i) * dt2
3647 if(cnvflg(i) .and. rn(i) > 0.)
then
3649 dt_mf(i,k) = ud_mf(i,k)
3655 if(cnvflg(i) .and. rn(i) > 0.)
then
3656 if(k >= 1 .and. k <= jmin(i))
then
3657 dd_mf(i,k) = edto(i) * etad(i,k) * xmb(i) * dt2
3665 if (.not.hwrf_samfdeep)
then
3670 if(cnvflg(i) .and. rn(i) > 0.)
then
3671 if(k > kb(i) .and. k < ktop(i))
then
3672 tem = 0.5 * (eta(i,k-1) + eta(i,k)) * xmb(i)
3673 tem1 = pfld(i,k) * 100. / (rd * new_t1(i,k))
3677 tem2 = max(sigmagfm(i), betaw)
3679 ptem = tem / (tem2 * tem1)
3680 new_qtr(i,k,ntk)=new_qtr(i,k,ntk)+0.5*tem2*ptem*ptem
3688 if(cnvflg(i) .and. rn(i) > 0.)
then
3689 if(k > 1 .and. k <= jmin(i))
then
3690 tem = 0.5*edto(i)*(etad(i,k-1)+etad(i,k))*xmb(i)
3691 tem1 = pfld(i,k) * 100. / (rd * new_t1(i,k))
3695 tem2 = max(sigmagfm(i), betaw)
3697 ptem = tem / (tem2 * tem1)
3698 new_qtr(i,k,ntk)=new_qtr(i,k,ntk)+0.5*tem2*ptem*ptem
3706 if(mp_phys == mp_phys_mg)
then
3709 qlcn(i,k) = new_qtr(i,k,2) - qlcn(i,k)
3710 qicn(i,k) = new_qtr(i,k,1) - qicn(i,k)
3711 cf_upi(i,k) = cnvc(i,k)
3712 w_upi(i,k) = ud_mf(i,k)*new_t1(i,k)*rd /
3713 & (dt2*max(sigmagfm(i),1.e-12)*prslp(i,k))
3714 cnv_mfd(i,k) = ud_mf(i,k)/dt2
3715 clcn(i,k) = cnvc(i,k)
3716 cnv_fice(i,k) = qicn(i,k)
3717 & / max(1.e-10,qlcn(i,k)+qicn(i,k))
3723 ten_t = (new_t1 - t1)/delt
3724 ten_q(:,:,1) = (new_q1 - q1)/delt
3725 ten_u = (new_u1 - u1)/delt
3726 ten_v = (new_v1 - v1)/delt
3727 dqtr = (new_qtr - qtr)/delt