11 subroutine mfscu(im,ix,km,kmscu,ntcw,ntrac1,delt, &
12 & cnvflg,zl,zm,q1,t1,u1,v1,plyr,pix, &
13 & thlx,thvx,thlvx,gdx,thetae,radj, &
14 & krad,mrad,radmin,buo,xmfd, &
15 & tcdo,qcdo,ucdo,vcdo,xlamde)
17 use machine ,
only : kind_phys
18 use funcphys ,
only : fpvs
19 use physcons, grav => con_g, cp => con_cp &
20 &, rv => con_rv, hvap => con_hvap &
22 &, eps => con_eps, epsm1 => con_epsm1
26 integer im, ix, km, kmscu, ntcw, ntrac1
28 integer krad(im), mrad(im)
31 real(kind=kind_phys) delt
32 real(kind=kind_phys) q1(ix,km,ntrac1),t1(ix,km), &
33 & u1(ix,km), v1(ix,km), &
34 & plyr(im,km), pix(im,km), &
36 & thvx(im,km), thlvx(im,km), &
37 & gdx(im), radj(im), &
38 & zl(im,km), zm(im,km), &
39 & thetae(im,km), radmin(im), &
40 & buo(im,km), xmfd(im,km), &
41 & tcdo(im,km), qcdo(im,km,ntrac1), &
42 & ucdo(im,km), vcdo(im,km), &
48 integer i,j,indx, k, n, kk, ndc
49 integer krad1(im), mradx(im), mrady(im)
51 real(kind=kind_phys) dt2, dz, ce0, cm,
52 & gocp, factor, g, tau,
57 & xmmx, tem, tem1, tem2,
60 real(kind=kind_phys) elocp, el2orc, qs, es,
61 & tld, gamma, qld, thdn,
64 real(kind=kind_phys) wd2(im,km), thld(im,km),
65 & qtx(im,km), qtd(im,km),
66 & thlvd(im), hrad(im),
67 & xlamdem(im,km-1), ra1(im), ra2(im)
69 real(kind=kind_phys) xlamavg(im), sigma(im),
70 & scaldfunc(im), sumx(im)
72 logical totflg, flg(im)
74 real(kind=kind_phys) actei, cldtime
79 parameter(elocp=hvap/cp,el2orc=hvap*hvap/(rv*cp))
80 parameter(ce0=0.4,cm=1.0,pgcon=0.55)
81 parameter(qmin=1.e-8,qlmin=1.e-12)
82 parameter(b1=0.45,f1=0.15)
83 parameter(a1=0.12,a2=0.5)
84 parameter(a11=0.2,a22=1.0)
85 parameter(cldtime=500.)
86 parameter(actei = 0.7)
93 totflg = totflg .and. (.not. cnvflg(i))
104 qtx(i,k) = q1(i,k,1) + q1(i,k,ntcw)
111 hrad(i) = zm(i,krad(i))
119 tem = zm(i,k+1)-zm(i,k)
120 tem1 = cldtime*radmin(i)/tem
121 tem1 = max(tem1, -3.0)
122 thld(i,k)= thlx(i,k) + tem1
124 thlvd(i) = thlvx(i,k) + tem1
125 buo(i,k) = - g * tem1 / thvx(i,k)
144 tem = thetae(i,k) - thetae(i,k+1)
145 tem1 = qtx(i,k) - qtx(i,k+1)
146 if (tem > 0. .and. tem1 > 0.)
then
147 cteit= cp*tem/(hvap*tem1)
148 if(cteit > actei)
then
160 radj(i) = -ra2(i) * radmin(i)
172 if(flg(i) .and. k < krad(i))
then
173 if(thlvd(i) <= thlvx(i,k))
then
184 if(kk < 1) cnvflg(i)=.false.
190 totflg = totflg .and. (.not. cnvflg(i))
200 dz = zl(i,k+1) - zl(i,k)
201 if(k >= mrad(i) .and. k < krad(i))
then
202 if(mrad(i) == 1)
then
203 ptem = 1./(zm(i,k)+dz)
205 ptem = 1./(zm(i,k)-zm(i,mrad(i)-1)+dz)
207 tem = max((hrad(i)-zm(i,k)+dz) ,dz)
209 xlamde(i,k) = ce0 * (ptem+ptem1)
211 xlamde(i,k) = ce0 / dz
213 xlamdem(i,k) = cm * xlamde(i,k)
222 if(cnvflg(i) .and. k < krad(i))
then
223 dz = zl(i,k+1) - zl(i,k)
224 tem = 0.5 * xlamde(i,k) * dz
227 thld(i,k) = ((1.-tem)*thld(i,k+1)+tem*
228 & (thlx(i,k)+thlx(i,k+1)))/factor
229 qtd(i,k) = ((1.-tem)*qtd(i,k+1)+tem*
230 & (qtx(i,k)+qtx(i,k+1)))/factor
232 tld = thld(i,k) / pix(i,k)
233 es = 0.01 * fpvs(tld)
234 qs = max(qmin, eps * es / (plyr(i,k)+epsm1*es))
238 gamma = el2orc * qs / (tld**2)
239 qld = dq / (1. + gamma)
241 tem1 = 1. + fv * qs - qld
242 thdn = thld(i,k) + pix(i,k) * elocp * qld
245 tem1 = 1. + fv * qtd(i,k)
246 thvd = thld(i,k) * tem1
248 buo(i,k) = g * (1. - thvd / thvx(i,k))
274 dz = zm(i,k+1) - zm(i,k)
276 tem = 0.5*bb1*xlamde(i,k)*dz
277 tem1 = bb2 * buo(i,k+1) * dz
279 wd2(i,k) = tem1 / ptem1
284 if(cnvflg(i) .and. k < krad1(i))
then
285 dz = zm(i,k+1) - zm(i,k)
286 tem = 0.25*bb1*(xlamde(i,k)+xlamde(i,k+1))*dz
287 tem1 = bb2 * buo(i,k+1) * dz
288 ptem = (1. - tem) * wd2(i,k+1)
290 wd2(i,k) = (ptem + tem1) / ptem1
298 if(flg(i)) mradx(i) = krad(i)
302 if(flg(i) .and. k < krad(i))
then
303 if(wd2(i,k) > 0.)
then
314 if(mrad(i) < mradx(i))
then
323 if(kk < 1) cnvflg(i)=.false.
329 totflg = totflg .and. (.not. cnvflg(i))
338 if(cnvflg(i) .and. mrady(i) < mradx(i))
then
339 dz = zl(i,k+1) - zl(i,k)
340 if(k >= mrad(i) .and. k < krad(i))
then
341 if(mrad(i) == 1)
then
342 ptem = 1./(zm(i,k)+dz)
344 ptem = 1./(zm(i,k)-zm(i,mrad(i)-1)+dz)
346 tem = max((hrad(i)-zm(i,k)+dz) ,dz)
348 xlamde(i,k) = ce0 * (ptem+ptem1)
350 xlamde(i,k) = ce0 / dz
352 xlamdem(i,k) = cm * xlamde(i,k)
366 & (k >= mrad(i) .and. k < krad(i)))
then
367 dz = zl(i,k+1) - zl(i,k)
368 xlamavg(i) = xlamavg(i) + xlamde(i,k) * dz
369 sumx(i) = sumx(i) + dz
375 xlamavg(i) = xlamavg(i) / sumx(i)
384 & (k >= mrad(i) .and. k < krad(i)))
then
385 if(wd2(i,k) > 0.)
then
390 xmfd(i,k) = ra1(i) * tem
400 tem = 0.2 / xlamavg(i)
401 tem1 = 3.14 * tem * tem
402 sigma(i) = tem1 / (gdx(i) * gdx(i))
403 sigma(i) = max(sigma(i), 0.001)
404 sigma(i) = min(sigma(i), 0.999)
413 if (sigma(i) > ra1(i))
then
414 scaldfunc(i) = (1.-sigma(i)) * (1.-sigma(i))
415 scaldfunc(i) = max(min(scaldfunc(i), 1.0), 0.)
427 & (k >= mrad(i) .and. k < krad(i)))
then
428 xmfd(i,k) = scaldfunc(i) * xmfd(i,k)
429 dz = zl(i,k+1) - zl(i,k)
431 xmfd(i,k) = min(xmfd(i,k),xmmx)
460 & (k >= mrad(i) .and. k < krad(i)))
then
461 dz = zl(i,k+1) - zl(i,k)
462 tem = 0.5 * xlamde(i,k) * dz
465 thld(i,k) = ((1.-tem)*thld(i,k+1)+tem*
466 & (thlx(i,k)+thlx(i,k+1)))/factor
467 qtd(i,k) = ((1.-tem)*qtd(i,k+1)+tem*
468 & (qtx(i,k)+qtx(i,k+1)))/factor
470 tld = thld(i,k) / pix(i,k)
471 es = 0.01 * fpvs(tld)
472 qs = max(qmin, eps * es / (plyr(i,k)+epsm1*es))
476 gamma = el2orc * qs / (tld**2)
477 qld = dq / (1. + gamma)
481 tcdo(i,k) = tld + elocp * qld
483 qcdo(i,k,1) = qtd(i,k)
494 if (cnvflg(i) .and. k < krad(i))
then
495 if(k >= mrad(i))
then
496 dz = zl(i,k+1) - zl(i,k)
497 tem = 0.5 * xlamdem(i,k) * dz
502 ucdo(i,k) = ((1.-tem)*ucdo(i,k+1)+ptem*u1(i,k+1)
503 & +ptem1*u1(i,k))/factor
504 vcdo(i,k) = ((1.-tem)*vcdo(i,k+1)+ptem*v1(i,k+1)
505 & +ptem1*v1(i,k))/factor
516 if (cnvflg(i) .and. k < krad(i))
then
517 if(k >= mrad(i))
then
518 dz = zl(i,k+1) - zl(i,k)
519 tem = 0.5 * xlamde(i,k) * dz
522 qcdo(i,k,n) = ((1.-tem)*qcdo(i,k+1,n)+tem*
523 & (q1(i,k,n)+q1(i,k+1,n)))/factor
536 do n = ntcw+1, ntrac1
539 if (cnvflg(i) .and. k < krad(i))
then
540 if(k >= mrad(i))
then
541 dz = zl(i,k+1) - zl(i,k)
542 tem = 0.5 * xlamde(i,k) * dz
545 qcdo(i,k,n) = ((1.-tem)*qcdo(i,k+1,n)+tem*
546 & (q1(i,k,n)+q1(i,k+1,n)))/factor