61 subroutine samfshalcnv(im,ix,km,delt,delp,prslp,psp,phil,ql,
62 & q1,t1,u1,v1,rn,kbot,ktop,kcnv,islimsk,garea,
63 & dot,ncloud,hpbl,ud_mf,dt_mf,cnvw,cnvc,
64 ! & dot,ncloud,hpbl,ud_mf,dt_mf,cnvw,cnvc,me)
65 & clam,c0s,c1,pgcon,asolfac)
67 use machine
, only : kind_phys
68 use funcphys
, only : fpvs
69 use physcons, grav => con_g, cp => con_cp, hvap => con_hvap
70 &, rv => con_rv, fv => con_fvirt, t0c => con_t0c
71 &, rd => con_rd, cvap => con_cvap, cliq => con_cliq
72 &, eps => con_eps, epsm1 => con_epsm1
75 integer im, ix, km, ncloud,
76 & kbot(im), ktop(im), kcnv(im)
78 real(kind=kind_phys) delt
79 real(kind=kind_phys) psp(im), delp(ix,km), prslp(ix,km)
80 real(kind=kind_phys) ps(im), del(ix,km), prsl(ix,km),
81 & ql(ix,km,2),q1(ix,km), t1(ix,km),
82 & u1(ix,km), v1(ix,km),
85 & dot(ix,km), phil(ix,km), hpbl(im),
86 & cnvw(ix,km),cnvc(ix,km)
88 &, ud_mf(im,km),dt_mf(im,km)
90 integer i,j,indx, k, kk, km1, n
92 integer,
dimension(im),
intent(in) :: islimsk
94 real(kind=kind_phys) dellat, delta,
98 & dq, dqsdp, dqsdt, dt,
99 & dt2, dtmax, dtmin, dxcrt,
103 & el2orc, elocp, aafac, cm,
105 & evef, evfact, evfactl, fact1,
106 & fact2, factor, dthk,
107 & g, gamma, pprime, betaw,
109 & rfact, shear, tfac,
114 & rho, tem, tem1, tem2,
118 integer kb(im), kbcon(im), kbcon1(im),
119 & ktcon(im), ktcon1(im), ktconn(im),
122 real(kind=kind_phys) aa1(im), cina(im),
123 & umean(im), tauadv(im), gdx(im),
124 & delhbar(im), delq(im), delq2(im),
125 & delqbar(im), delqev(im), deltbar(im),
126 & deltv(im), dtconv(im), edt(im),
127 & pdot(im), po(im,km),
128 & qcond(im), qevap(im), hmax(im),
129 & rntot(im), vshear(im),
130 & xlamud(im), xmb(im), xmbmax(im),
131 & delubar(im), delvbar(im)
133 real(kind=kind_phys) c0(im)
135 real(kind=kind_phys) crtlamd
137 real(kind=kind_phys) cinpcr, cinpcrmx, cinpcrmn,
138 & cinacr, cinacrmx, cinacrmn
141 real(kind=kind_phys) bet1, cd1, f1, gam1,
145 c physical parameters
148 parameter(elocp=hvap/cp,
149 & el2orc=hvap*hvap/(rv*cp))
161 parameter(cm=1.0,delta=fv)
162 parameter(fact1=(cvap-cliq)/rv,fact2=hvap/rv-fact1*t0c)
164 parameter(cinpcrmx=180.,cinpcrmn=120.)
166 parameter(cinacrmx=-120.,cinacrmn=-80.)
167 parameter(crtlamd=3.e-4)
168 parameter(dtmax=10800.,dtmin=600.)
169 parameter(bet1=1.875,cd1=.506,f1=2.0,gam1=.5)
170 parameter(betaw=.03,dxcrt=15.e3)
171 parameter(h1=0.33333333)
172 c local variables and arrays
173 real(kind=kind_phys) pfld(im,km), to(im,km), qo(im,km),
174 & uo(im,km), vo(im,km), qeso(im,km)
176 real(kind=kind_phys) wu2(im,km), buo(im,km), drag(im,km)
177 real(kind=kind_phys) wc(im), scaldfunc(im), sigmagfm(im)
181 real(kind=kind_phys) qlko_ktcon(im), dellal(im,km),
182 & dbyo(im,km), zo(im,km), xlamue(im,km),
183 & heo(im,km), heso(im,km),
184 & dellah(im,km), dellaq(im,km),
185 & dellau(im,km), dellav(im,km), hcko(im,km),
186 & ucko(im,km), vcko(im,km), qcko(im,km),
187 & qrcko(im,km), eta(im,km),
188 & zi(im,km), pwo(im,km), c0t(im,km),
189 & sumx(im), tx1(im), cnvwt(im,km)
191 logical totflg, cnvflg(im), flg(im)
193 real(kind=kind_phys) tf, tcr, tcrf
194 parameter(tf=233.16, tcr=263.16, tcrf=1.0/(tcr-tf))
196 c-----------------------------------------------------------------------
214 if(kcnv(i) == 1) cnvflg(i) = .false.
230 gdx(i) = sqrt(garea(i))
236 totflg = totflg .and. (.not. cnvflg(i))
242 if(islimsk(i) == 1)
then 252 if(t1(i,k) > 273.16)
then 255 tem = d0 * (t1(i,k) - 273.16)
257 c0t(i,k) = c0(i) * tem1
280 c model tunable parameters are all here
298 c define top layer for search of the downdraft originating layer
299 c and the maximum thetae for updraft
310 if (prsl(i,k)*tx1(i) > 0.70) kbm(i) = k + 1
311 if (prsl(i,k)*tx1(i) > 0.60) kmax(i) = k + 1
315 kbm(i) = min(kbm(i),kmax(i))
318 c hydrostatic height assume zero terr and compute
319 c updraft entrainment rate as an inverse
function of height
324 zo(i,k) = phil(i,k) / g
330 zi(i,k) = 0.5*(zo(i,k)+zo(i,k+1))
331 xlamue(i,k) = clam / zi(i,k)
335 xlamue(i,km) = xlamue(i,km1)
347 if (flg(i) .and. zo(i,k) <= hpbl(i))
then 355 kpbl(i)= min(kpbl(i),kbm(i))
359 c convert surface pressure to mb from cb
364 if (cnvflg(i) .and. k <= kmax(i))
then 365 pfld(i,k) = prsl(i,k) * 10.0
391 if (cnvflg(i) .and. k <= kmax(i))
then 392 qeso(i,k) = 0.01 * fpvs(to(i,k))
393 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
395 qeso(i,k) = max(qeso(i,k), val1)
397 qo(i,k) = max(qo(i,k), val2 )
404 c compute moist static energy
409 if (cnvflg(i) .and. k <= kmax(i))
then 411 tem = phil(i,k) + cp * to(i,k)
412 heo(i,k) = tem + hvap * qo(i,k)
413 heso(i,k) = tem + hvap * qeso(i,k)
414 c heo(i,k) = min(heo(i,k),heso(i,k))
419 c determine level with largest moist static energy within pbl
420 c this is the level
where updraft starts
432 if (cnvflg(i) .and. k <= kpbl(i))
then 433 if(heo(i,k) > hmax(i))
then 444 if (cnvflg(i) .and. k <= kmax(i)-1)
then 445 dz = .5 * (zo(i,k+1) - zo(i,k))
446 dp = .5 * (pfld(i,k+1) - pfld(i,k))
447 es = 0.01 * fpvs(to(i,k+1))
448 pprime = pfld(i,k+1) + epsm1 * es
449 qs = eps * es / pprime
450 dqsdp = - qs / pprime
451 desdt = es * (fact1 / to(i,k+1) + fact2 / (to(i,k+1)**2))
452 dqsdt = qs * pfld(i,k+1) * desdt / (es * pprime)
453 gamma = el2orc * qeso(i,k+1) / (to(i,k+1)**2)
454 dt = (g * dz + hvap * dqsdp * dp) / (cp * (1. + gamma))
455 dq = dqsdt * dt + dqsdp * dp
456 to(i,k) = to(i,k+1) + dt
457 qo(i,k) = qo(i,k+1) + dq
458 po(i,k) = .5 * (pfld(i,k) + pfld(i,k+1))
466 if (cnvflg(i) .and. k <= kmax(i)-1)
then 467 qeso(i,k) = 0.01 * fpvs(to(i,k))
468 qeso(i,k) = eps * qeso(i,k) / (po(i,k) + epsm1*qeso(i,k))
470 qeso(i,k) = max(qeso(i,k), val1)
472 qo(i,k) = max(qo(i,k), val2 )
474 heo(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +
475 & cp * to(i,k) + hvap * qo(i,k)
476 heso(i,k) = .5 * g * (zo(i,k) + zo(i,k+1)) +
477 & cp * to(i,k) + hvap * qeso(i,k)
478 uo(i,k) = .5 * (uo(i,k) + uo(i,k+1))
479 vo(i,k) = .5 * (vo(i,k) + vo(i,k+1))
484 c look for the level of free convection as cloud base
489 if(flg(i)) kbcon(i) = kmax(i)
493 if (flg(i) .and. k < kbm(i))
then 494 if(k > kb(i) .and. heo(i,kb(i)) > heso(i,k))
then 504 if(kbcon(i) == kmax(i)) cnvflg(i) = .false.
511 totflg = totflg .and. (.not. cnvflg(i))
519 pdot(i) = 0.01 * dot(i,kbcon(i))
523 c turn off convection
if pressure depth between parcel source level
524 c and cloud base is larger than a critical
value, cinpcr
528 if(islimsk(i) == 1)
then 539 if(pdot(i) <= w4)
then 540 tem = (pdot(i) - w4) / (w3 - w4)
541 elseif(pdot(i) >= -w4)
then 542 tem = - (pdot(i) + w4) / (w4 - w3)
551 ptem1= .5*(cinpcrmx-cinpcrmn)
552 cinpcr = cinpcrmx - ptem * ptem1
553 tem1 = pfld(i,kb(i)) - pfld(i,kbcon(i))
554 if(tem1 > cinpcr)
then 562 totflg = totflg .and. (.not. cnvflg(i))
567 c specify the detrainment rate for the updrafts
572 xlamud(i) = xlamue(i,kbcon(i))
577 c determine updraft mass flux for the subcloud layers
587 if(k < kbcon(i) .and. k >= kb(i))
then 588 dz = zi(i,k+1) - zi(i,k)
589 ptem = 0.5*(xlamue(i,k)+xlamue(i,k+1))-xlamud(i)
590 eta(i,k) = eta(i,k+1) / (1. + ptem * dz)
596 c compute mass flux above cloud base
604 if(k > kbcon(i) .and. k < kmax(i))
then 605 dz = zi(i,k) - zi(i,k-1)
606 ptem = 0.5*(xlamue(i,k)+xlamue(i,k-1))-xlamud(i)
607 eta(i,k) = eta(i,k-1) * (1 + ptem * dz)
608 if(eta(i,k) <= 0.)
then 611 kbm(i) = min(kbm(i),kmax(i))
619 c compute updraft cloud property
625 hcko(i,indx) = heo(i,indx)
626 ucko(i,indx) = uo(i,indx)
627 vcko(i,indx) = vo(i,indx)
637 if(k > kb(i) .and. k < kmax(i))
then 638 dz = zi(i,k) - zi(i,k-1)
639 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
640 tem1 = 0.5 * xlamud(i) * dz
641 factor = 1. + tem - tem1
642 hcko(i,k) = ((1.-tem1)*hcko(i,k-1)+tem*0.5*
643 & (heo(i,k)+heo(i,k-1)))/factor
644 dbyo(i,k) = hcko(i,k) - heso(i,k)
650 ucko(i,k) = ((1.-tem)*ucko(i,k-1)+ptem*uo(i,k)
651 & +ptem1*uo(i,k-1))/factor
652 vcko(i,k) = ((1.-tem)*vcko(i,k-1)+ptem*vo(i,k)
653 & +ptem1*vo(i,k-1))/factor
659 c taking account into convection inhibition due to existence of
660 c dry layers below cloud base
669 if (flg(i) .and. k < kbm(i))
then 670 if(k >= kbcon(i) .and. dbyo(i,k) > 0.)
then 679 if(kbcon1(i) == kmax(i)) cnvflg(i) = .false.
684 tem = pfld(i,kbcon(i)) - pfld(i,kbcon1(i))
693 totflg = totflg .and. (.not. cnvflg(i))
698 c calculate convective inhibition
704 if(k > kb(i) .and. k < kbcon1(i))
then 705 dz1 = zo(i,k+1) - zo(i,k)
706 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
707 rfact = 1. + delta * cp * gamma
711 & dz1 * (g / (cp * to(i,k)))
712 & * dbyo(i,k) / (1. + gamma)
718 & max(val,(qeso(i,k) - qo(i,k)))
727 if(islimsk(i) == 1)
then 738 if(pdot(i) <= w4)
then 739 tem = (pdot(i) - w4) / (w3 - w4)
740 elseif(pdot(i) >= -w4)
then 741 tem = - (pdot(i) + w4) / (w4 - w3)
751 tem1= .5*(cinacrmx-cinacrmn)
752 cinacr = cinacrmx - tem * tem1
755 if(cina(i) < cinacr) cnvflg(i) = .false.
761 totflg = totflg .and. (.not. cnvflg(i))
766 c determine first guess cloud top as the level of zero buoyancy
767 c limited to the level of p/ps=0.7
772 if(flg(i)) ktcon(i) = kbm(i)
776 if (flg(i) .and. k < kbm(i))
then 777 if(k > kbcon1(i) .and. dbyo(i,k) < 0.)
then 785 c specify upper limit of mass flux at cloud base
793 dp = 1000. * del(i,k)
794 xmbmax(i) = dp / (g * dt2)
801 c compute cloud moisture property and precipitation
807 qcko(i,kb(i)) = qo(i,kb(i))
808 qrcko(i,kb(i)) = qo(i,kb(i))
815 if(k > kb(i) .and. k < ktcon(i))
then 816 dz = zi(i,k) - zi(i,k-1)
817 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
819 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
821 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
822 tem1 = 0.5 * xlamud(i) * dz
823 factor = 1. + tem - tem1
824 qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*
825 & (qo(i,k)+qo(i,k-1)))/factor
826 qrcko(i,k) = qcko(i,k)
828 dq = eta(i,k) * (qcko(i,k) - qrch)
832 c below lfc check
if there is excess moisture to release latent heat
834 if(k >= kbcon(i) .and. dq > 0.)
then 835 etah = .5 * (eta(i,k) + eta(i,k-1))
836 dp = 1000. * del(i,k)
839 qlk = dq / (eta(i,k) + etah * ptem * dz)
840 dellal(i,k) = etah * c1 * dz * qlk * g / dp
842 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
844 buo(i,k) = buo(i,k) - g * qlk
845 qcko(i,k)= qlk + qrch
846 pwo(i,k) = etah * c0t(i,k) * dz * qlk
847 cnvwt(i,k) = etah * qlk * g / dp
852 if(k >= kbcon(i))
then 853 rfact = 1. + delta * cp * gamma
855 buo(i,k) = buo(i,k) + (g / (cp * to(i,k)))
856 & * dbyo(i,k) / (1. + gamma)
859 buo(i,k) = buo(i,k) + g * delta *
860 & max(val,(qeso(i,k) - qo(i,k)))
861 drag(i,k) = max(xlamue(i,k),xlamud(i))
869 c calculate cloud work function
912 if(k >= kbcon(i) .and. k < ktcon(i))
then 913 dz1 = zo(i,k+1) - zo(i,k)
914 aa1(i) = aa1(i) + buo(i,k) * dz1
920 if(cnvflg(i) .and. aa1(i) <= 0.) cnvflg(i) = .false.
926 totflg = totflg .and. (.not. cnvflg(i))
931 c estimate the onvective overshooting as the level
932 c
where the [aafac * cloud work function] becomes zero,
933 c which is the final cloud top
934 c limited to the level of p/ps=0.7
939 aa1(i) = aafac * aa1(i)
950 if(k >= ktcon(i) .and. k < kbm(i))
then 951 dz1 = zo(i,k+1) - zo(i,k)
952 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
953 rfact = 1. + delta * cp * gamma
957 & dz1 * (g / (cp * to(i,k)))
958 & * dbyo(i,k) / (1. + gamma)
974 c compute cloud moisture property, detraining cloud water
975 c and precipitation in overshooting layers
981 if(k >= ktcon(i) .and. k < ktcon1(i))
then 982 dz = zi(i,k) - zi(i,k-1)
983 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
985 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
987 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1)) * dz
988 tem1 = 0.5 * xlamud(i) * dz
989 factor = 1. + tem - tem1
990 qcko(i,k) = ((1.-tem1)*qcko(i,k-1)+tem*0.5*
991 & (qo(i,k)+qo(i,k-1)))/factor
992 qrcko(i,k) = qcko(i,k)
994 dq = eta(i,k) * (qcko(i,k) - qrch)
996 c check
if there is excess moisture to release latent heat
999 etah = .5 * (eta(i,k) + eta(i,k-1))
1000 dp = 1000. * del(i,k)
1002 ptem = c0t(i,k) + c1
1003 qlk = dq / (eta(i,k) + etah * ptem * dz)
1004 dellal(i,k) = etah * c1 * dz * qlk * g / dp
1006 qlk = dq / (eta(i,k) + etah * c0t(i,k) * dz)
1008 qcko(i,k) = qlk + qrch
1009 pwo(i,k) = etah * c0t(i,k) * dz * qlk
1010 cnvwt(i,k) = etah * qlk * g / dp
1047 if(k > kbcon1(i) .and. k < ktcon(i))
then 1048 dz = zi(i,k) - zi(i,k-1)
1049 tem = 0.25 * bb1 * (drag(i,k)+drag(i,k-1)) * dz
1050 tem1 = 0.5 * bb2 * (buo(i,k)+buo(i,k-1)) * dz
1051 ptem = (1. - tem) * wu2(i,k-1)
1053 wu2(i,k) = (ptem + tem1) / ptem1
1054 wu2(i,k) = max(wu2(i,k), 0.)
1070 if(k > kbcon1(i) .and. k < ktcon(i))
then 1071 dz = zi(i,k) - zi(i,k-1)
1072 tem = 0.5 * (sqrt(wu2(i,k)) + sqrt(wu2(i,k-1)))
1073 wc(i) = wc(i) + tem * dz
1074 sumx(i) = sumx(i) + dz
1081 if(sumx(i) == 0.)
then 1084 wc(i) = wc(i) / sumx(i)
1087 if (wc(i) < val) cnvflg(i)=.false.
1091 c exchange ktcon with ktcon1
1096 ktcon(i) = ktcon1(i)
1101 c this section is ready for cloud water
1105 c compute liquid and vapor separation at cloud top
1111 gamma = el2orc * qeso(i,k) / (to(i,k)**2)
1113 & + gamma * dbyo(i,k) / (hvap * (1. + gamma))
1114 dq = qcko(i,k) - qrch
1116 c check
if there is excess moisture to release latent heat
1126 c--- compute precipitation efficiency in terms of windshear
1141 if(k > kb(i) .and. k <= ktcon(i))
then 1142 shear= sqrt((uo(i,k)-uo(i,k-1)) ** 2
1143 & + (vo(i,k)-vo(i,k-1)) ** 2)
1144 vshear(i) = vshear(i) + shear
1151 vshear(i) = 1.e3 * vshear(i) / (zi(i,ktcon(i))-zi(i,kb(i)))
1152 e1=1.591-.639*vshear(i)
1153 & +.0953*(vshear(i)**2)-.00496*(vshear(i)**3)
1156 edt(i) = min(edt(i),val)
1158 edt(i) = max(edt(i),val)
1162 c--- what would the change be, that a cloud with unit mass
1163 c--- will
do to the environment?
1169 if(cnvflg(i) .and. k <= kmax(i))
then 1178 c--- changed due to subsidence and entrainment
1183 if(k > kb(i) .and. k < ktcon(i))
then 1184 dp = 1000. * del(i,k)
1185 dz = zi(i,k) - zi(i,k-1)
1188 dv2h = .5 * (heo(i,k) + heo(i,k-1))
1191 dv2q = .5 * (qo(i,k) + qo(i,k-1))
1194 tem = 0.5 * (xlamue(i,k)+xlamue(i,k-1))
1197 dellah(i,k) = dellah(i,k) +
1198 & ( eta(i,k)*dv1h - eta(i,k-1)*dv3h
1199 & - tem*eta(i,k-1)*dv2h*dz
1200 & + tem1*eta(i,k-1)*.5*(hcko(i,k)+hcko(i,k-1))*dz
1203 dellaq(i,k) = dellaq(i,k) +
1204 & ( eta(i,k)*dv1q - eta(i,k-1)*dv3q
1205 & - tem*eta(i,k-1)*dv2q*dz
1206 & + tem1*eta(i,k-1)*.5*(qrcko(i,k)+qcko(i,k-1))*dz
1209 tem1=eta(i,k)*(uo(i,k)-ucko(i,k))
1210 tem2=eta(i,k-1)*(uo(i,k-1)-ucko(i,k-1))
1211 dellau(i,k) = dellau(i,k) + (tem1-tem2) * g/dp
1213 tem1=eta(i,k)*(vo(i,k)-vcko(i,k))
1214 tem2=eta(i,k-1)*(vo(i,k-1)-vcko(i,k-1))
1215 dellav(i,k) = dellav(i,k) + (tem1-tem2) * g/dp
1227 dp = 1000. * del(i,indx)
1228 dv1h = heo(i,indx-1)
1229 dellah(i,indx) = eta(i,indx-1) *
1230 & (hcko(i,indx-1) - dv1h) * g / dp
1232 dellaq(i,indx) = eta(i,indx-1) *
1233 & (qcko(i,indx-1) - dv1q) * g / dp
1234 dellau(i,indx) = eta(i,indx-1) *
1235 & (ucko(i,indx-1) - uo(i,indx-1)) * g / dp
1236 dellav(i,indx) = eta(i,indx-1) *
1237 & (vcko(i,indx-1) - vo(i,indx-1)) * g / dp
1241 dellal(i,indx) = eta(i,indx-1) *
1242 & qlko_ktcon(i) * g / dp
1252 tem = zi(i,ktcon1(i)) - zi(i,kbcon1(i))
1253 dtconv(i) = tem / wc(i)
1254 tfac = 1. + gdx(i) / 75000.
1255 dtconv(i) = tfac * dtconv(i)
1256 dtconv(i) = max(dtconv(i),dtmin)
1257 dtconv(i) = max(dtconv(i),dt2)
1258 dtconv(i) = min(dtconv(i),dtmax)
1272 if(k >= kbcon1(i) .and. k < ktcon1(i))
then 1273 dz = zi(i,k) - zi(i,k-1)
1274 tem = sqrt(u1(i,k)*u1(i,k)+v1(i,k)*v1(i,k))
1275 umean(i) = umean(i) + tem * dz
1276 sumx(i) = sumx(i) + dz
1283 umean(i) = umean(i) / sumx(i)
1284 umean(i) = max(umean(i), 1.)
1285 tauadv(i) = gdx(i) / umean(i)
1289 c compute cloud base mass flux as a
function of the mean
1297 rho = po(i,k)*100. / (rd*to(i,k))
1298 tfac = tauadv(i) / dtconv(i)
1299 tfac = min(tfac, 1.)
1300 xmb(i) = tfac*betaw*rho*wc(i)
1307 tem = min(max(xlamue(i,kbcon(i)), 2.e-4), 6.e-4)
1309 tem1 = 3.14 * tem * tem
1310 sigmagfm(i) = tem1 / garea(i)
1311 sigmagfm(i) = max(sigmagfm(i), 0.001)
1312 sigmagfm(i) = min(sigmagfm(i), 0.999)
1319 if (gdx(i) < dxcrt)
then 1320 scaldfunc(i) = (1.-sigmagfm(i)) * (1.-sigmagfm(i))
1321 scaldfunc(i) = max(min(scaldfunc(i), 1.0), 0.)
1325 xmb(i) = xmb(i) * scaldfunc(i)
1326 xmb(i) = min(xmb(i),xmbmax(i))
1336 if (cnvflg(i) .and. k <= kmax(i))
then 1337 qeso(i,k) = 0.01 * fpvs(t1(i,k))
1338 qeso(i,k) = eps * qeso(i,k) / (pfld(i,k) + epsm1*qeso(i,k))
1340 qeso(i,k) = max(qeso(i,k), val )
1360 if(k > kb(i) .and. k <= ktcon(i))
then 1361 dellat = (dellah(i,k) - hvap * dellaq(i,k)) / cp
1362 t1(i,k) = t1(i,k) + dellat * xmb(i) * dt2
1363 q1(i,k) = q1(i,k) + dellaq(i,k) * xmb(i) * dt2
1367 u1(i,k) = u1(i,k) + dellau(i,k) * xmb(i) * dt2
1368 v1(i,k) = v1(i,k) + dellav(i,k) * xmb(i) * dt2
1369 dp = 1000. * del(i,k)
1370 delhbar(i) = delhbar(i) + dellah(i,k)*xmb(i)*dp/g
1371 delqbar(i) = delqbar(i) + dellaq(i,k)*xmb(i)*dp/g
1372 deltbar(i) = deltbar(i) + dellat*xmb(i)*dp/g
1373 delubar(i) = delubar(i) + dellau(i,k)*xmb(i)*dp/g
1374 delvbar(i) = delvbar(i) + dellav(i,k)*xmb(i)*dp/g
1384 if(k > kb(i) .and. k <= ktcon(i))
then 1385 qeso(i,k) = 0.01 * fpvs(t1(i,k))
1386 qeso(i,k) = eps * qeso(i,k)/(pfld(i,k) + epsm1*qeso(i,k))
1388 qeso(i,k) = max(qeso(i,k), val )
1404 if(k < ktcon(i) .and. k > kb(i))
then 1405 rntot(i) = rntot(i) + pwo(i,k) * xmb(i) * .001 * dt2
1418 if (k <= kmax(i))
then 1423 if(k < ktcon(i) .and. k > kb(i))
then 1424 rn(i) = rn(i) + pwo(i,k) * xmb(i) * .001 * dt2
1427 if(flg(i) .and. k < ktcon(i))
then 1428 evef = edt(i) * evfact
1429 if(islimsk(i) == 1) evef=edt(i) * evfactl
1431 c
if(islimsk(i) == 1) evef = 0.
1432 qcond(i) = evef * (q1(i,k) - qeso(i,k))
1433 & / (1. + el2orc * qeso(i,k) / t1(i,k)**2)
1434 dp = 1000. * del(i,k)
1435 if(rn(i) > 0. .and. qcond(i) < 0.)
then 1436 qevap(i) = -qcond(i) * (1.-exp(-.32*sqrt(dt2*rn(i))))
1437 qevap(i) = min(qevap(i), rn(i)*1000.*g/dp)
1438 delq2(i) = delqev(i) + .001 * qevap(i) * dp / g
1440 if(rn(i) > 0. .and. qcond(i) < 0. .and.
1441 & delq2(i) > rntot(i))
then 1442 qevap(i) = 1000.* g * (rntot(i) - delqev(i)) / dp
1445 if(rn(i) > 0. .and. qevap(i) > 0.)
then 1447 tem1 = qevap(i) * tem
1448 if(tem1 > rn(i))
then 1449 qevap(i) = rn(i) / tem
1452 rn(i) = rn(i) - tem1
1454 q1(i,k) = q1(i,k) + qevap(i)
1455 t1(i,k) = t1(i,k) - elocp * qevap(i)
1456 deltv(i) = - elocp*qevap(i)/dt2
1457 delq(i) = + qevap(i)/dt2
1458 delqev(i) = delqev(i) + .001*dp*qevap(i)/g
1460 delqbar(i) = delqbar(i) + delq(i)*dp/g
1461 deltbar(i) = deltbar(i) + deltv(i)*dp/g
1480 if(rn(i) < 0. .or. .not.flg(i)) rn(i) = 0.
1487 c convective cloud water
1493 if (k >= kbcon(i) .and. k < ktcon(i))
then 1494 cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
1501 c convective cloud cover
1507 if (k >= kbcon(i) .and. k < ktcon(i))
then 1508 cnvc(i,k) = 0.04 * log(1. + 675. * eta(i,k) * xmb(i))
1509 cnvc(i,k) = min(cnvc(i,k), 0.2)
1510 cnvc(i,k) = max(cnvc(i,k), 0.0)
1519 if (ncloud > 0)
then 1525 if (k >= kbcon(i) .and. k <= ktcon(i))
then 1526 tem = dellal(i,k) * xmb(i) * dt2
1527 tem1 = max(0.0, min(1.0, (tcr-t1(i,k))*tcrf))
1528 if (ql(i,k,2) > -999.0)
then 1529 ql(i,k,1) = ql(i,k,1) + tem * tem1
1530 ql(i,k,2) = ql(i,k,2) + tem *(1.0-tem1)
1532 ql(i,k,1) = ql(i,k,1) + tem
1549 if(k >= kb(i) .and. k < ktop(i))
then 1550 ud_mf(i,k) = eta(i,k) * xmb(i) * dt2
1559 dt_mf(i,k) = ud_mf(i,k)
subroutine samfshalcnv(im, ix, km, delt, delp, prslp, psp, phil, ql,
This subroutine contains the entirety of the SAMF shallow convection scheme.