32 #include "cv30param.h"
86 : ,lv,cpn,tv,gz,h,hm,th)
97 real t(len,nd),
q(len,nd), p(len,nd), ph(len,ndp1)
100 real lv(len,nd), cpn(len,nd), tv(len,nd)
101 real gz(len,nd), h(len,nd), hm(len,nd)
110 #include "cvthermo.h"
111 #include "cv30param.h"
124 th(
i,
k)=t(
i,
k)*(1000.0/p(
i,
k))**rdcp
138 gz(
i,
k)=gz(
i,
k-1)+0.5*
rrd*(tvx+tvy)
139 & *(p(
i,
k-1)-p(
i,
k))/ph(
i,
k)
161 : ,nk,icb,icbmax,iflag,tnk,qnk,gznk,plcl)
178 #include "cv30param.h"
182 real t(len,nd),
q(len,nd), qs(len,nd), p(len,nd)
183 real hm(len,nd), gz(len,nd)
187 integer iflag(len), nk(len), icb(len), icbmax
188 real tnk(len), qnk(len), gznk(len), plcl(len)
194 real pnk(len), qsnk(len), rh(len), chi(len)
256 if( ( ( t(
i,nk(
i)).lt.250.0 )
257 & .or.(
q(
i,nk(
i)).le.0.0 ) )
260 & ( iflag(
i).eq.0) ) iflag(
i)=7
272 if (iflag(
i).ne.7)
then
283 chi(
i)=tnk(
i)/(a-b*rh(
i)-tnk(
i))
284 plcl(
i)=pnk(
i)*(rh(
i)**chi(
i))
285 if(((plcl(
i).lt.200.0).or.(plcl(
i).ge.2000.0))
286 & .and.(iflag(
i).eq.0))iflag(
i)=8
320 if( ph(
i,
k).lt.plcl(
i) ) icb(
i)=min(icb(
i),
k)
326 if((icb(
i).eq.
nlm).and.(iflag(
i).eq.0))iflag(
i)=9
338 if (iflag(
i).lt.7) icbmax=max(icbmax,icb(
i))
361 #include "cvthermo.h"
362 #include "cv30param.h"
366 integer nk(len), icb(len)
367 real t(len,nd),
q(len,nd), qs(len,nd), gz(len,nd)
372 real tp(len,nd), tvp(len,nd), clw(len,nd)
376 integer icb1(len), icbs(len), icbsmax2
377 real tg, qg, alv, s, ahg, tc, denom, es, rg
378 real ah0(len),
cpp(len)
379 real tnk(len), qnk(len), gznk(len), ticb(len), gzicb(len)
401 ah0(
i)=(
cpd*(1.-qnk(
i))+
cl*qnk(
i))*tnk(
i)
410 icb1(
i)=max(icb(
i),2)
411 icb1(
i)=min(icb(
i),
nl)
415 if (plcl(
i).lt.p(
i,icb1(
i)))
then
416 icbs(
i)=min(icbs(
i)+1,
nl)
422 gzicb(
i)=gz(
i,icbs(
i))
423 qsicb(
i)=qs(
i,icbs(
i))
431 icbsmax2=max(icbsmax2,icbs(
i))
448 tp(
i,
k)=tnk(
i)-(gz(
i,
k)-gznk(
i))*cpinv(
i)
466 : +alv*alv*qg/(
rrv*ticb(
i)*ticb(
i))
477 es=6.112*exp(17.67*tc/denom)
482 qg=
eps*es/(p(
i,icbs(
i))-es*(1.-
eps))
498 es=6.112*exp(17.67*tc/denom)
503 qg=
eps*es/(p(
i,icbs(
i))-es*(1.-
eps))
512 tp(
i,icbs(
i))=(ah0(
i)-gz(
i,icbs(
i))-alv*qg)
517 clw(
i,icbs(
i))=qnk(
i)-qg
518 clw(
i,icbs(
i))=max(0.0,clw(
i,icbs(
i)))
523 tvp(
i,icbs(
i))=tp(
i,icbs(
i))*(1.+qg/
eps-qnk(
i))
550 ticb(
i)=t(
i,icb(
i)+1)
551 gzicb(
i)=gz(
i,icb(
i)+1)
552 qsicb(
i)=qs(
i,icb(
i)+1)
565 : +alv*alv*qg/(
rrv*ticb(
i)*ticb(
i))
576 es=6.112*exp(17.67*tc/denom)
581 qg=
eps*es/(p(
i,icb(
i)+1)-es*(1.-
eps))
597 es=6.112*exp(17.67*tc/denom)
602 qg=
eps*es/(p(
i,icb(
i)+1)-es*(1.-
eps))
611 tp(
i,icb(
i)+1)=(ah0(
i)-gz(
i,icb(
i)+1)-alv*qg)
616 clw(
i,icb(
i)+1)=qnk(
i)-qg
617 clw(
i,icb(
i)+1)=max(0.0,clw(
i,icb(
i)+1))
622 tvp(
i,icb(
i)+1)=tp(
i,icb(
i)+1)*(1.+qg/
eps-qnk(
i))
630 o ,pbase,buoybase,iflag,sig,w0)
648 #include "cv30param.h"
653 real plcl(len), p(len,nd)
654 real th(len,nd), tv(len,nd), tvp(len,nd)
657 real pbase(len), buoybase(len)
661 real sig(len,nd), w0(len,nd)
665 real tvpbase, tvbase, tdif, ath, ath1
672 tvpbase = tvp(
i,icb(
i))*(pbase(
i)-p(
i,icb(
i)+1))
673 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
674 : + tvp(
i,icb(
i)+1)*(p(
i,icb(
i))-pbase(
i))
675 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
676 tvbase = tv(
i,icb(
i))*(pbase(
i)-p(
i,icb(
i)+1))
677 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
678 : + tv(
i,icb(
i)+1)*(p(
i,icb(
i))-pbase(
i))
679 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
680 buoybase(
i) = tvpbase - tvbase
719 if (tdif.lt.
dtcrit .or. ath.gt.ath1)
then
721 sig(
i,
k) = amax1(sig(
i,
k),0.0)
736 : ,iflag1,nk1,icb1,icbs1
737 : ,plcl1,tnk1,qnk1,gznk1,pbase1,buoybase1
738 : ,t1,q1,qs1,u1,v1,gz1,th1
740 : ,h1,lv1,cpn1,p1,ph1,tv1,tp1,tvp1,clw1
743 o ,plcl,tnk,qnk,gznk,pbase,buoybase
746 o ,h,lv,cpn,p,ph,tv,tp,tvp,clw
750 #include "cv30param.h"
754 integer len,ncum,nd,ntra,nloc
755 integer iflag1(len),nk1(len),icb1(len),icbs1(len)
756 real plcl1(len),tnk1(len),qnk1(len),gznk1(len)
757 real pbase1(len),buoybase1(len)
758 real t1(len,nd),q1(len,nd),qs1(len,nd),u1(len,nd),v1(len,nd)
759 real gz1(len,nd),h1(len,nd),lv1(len,nd),cpn1(len,nd)
760 real p1(len,nd),ph1(len,nd+1),tv1(len,nd),tp1(len,nd)
761 real tvp1(len,nd),clw1(len,nd)
763 real sig1(len,nd), w01(len,nd)
764 real tra1(len,nd,ntra)
768 integer iflag(nloc),nk(nloc),icb(nloc),icbs(nloc)
769 real plcl(nloc),tnk(nloc),qnk(nloc),gznk(nloc)
770 real pbase(nloc),buoybase(nloc)
771 real t(nloc,nd),
q(nloc,nd),qs(nloc,nd),
u(nloc,nd),
v(nloc,nd)
772 real gz(nloc,nd),h(nloc,nd),lv(nloc,nd),cpn(nloc,nd)
773 real p(nloc,nd),ph(nloc,nd+1),tv(nloc,nd),tp(nloc,nd)
774 real tvp(nloc,nd),clw(nloc,nd)
776 real sig(nloc,nd), w0(nloc,nd)
777 real tra(nloc,nd,ntra)
782 CHARACTER (LEN=20) :: modname=
'cv30_compress'
783 CHARACTER (LEN=80) :: abort_message
789 if(iflag1(
i).eq.0)
then
826 write(
lunout,*)
'strange! nn not equal to ncum: ',nn,ncum
833 if(iflag1(
i).eq.0)
then
836 buoybase(nn)=buoybase1(
i)
852 : ,tnk,qnk,gznk,t,
q,qs,gz
853 : ,p,h,tv,lv,pbase,buoybase,plcl
854 o ,inb,tp,tvp,clw,hp,ep,sigp,buoy)
875 #include "cvthermo.h"
876 #include "cv30param.h"
880 integer ncum, nd, nloc
881 integer icb(nloc), icbs(nloc), nk(nloc)
882 real t(nloc,nd),
q(nloc,nd), qs(nloc,nd), gz(nloc,nd)
884 real tnk(nloc), qnk(nloc), gznk(nloc)
885 real lv(nloc,nd), tv(nloc,nd), h(nloc,nd)
886 real pbase(nloc), buoybase(nloc), plcl(nloc)
890 real tp(nloc,nd), tvp(nloc,nd), clw(nloc,nd)
891 real ep(nloc,nd), sigp(nloc,nd), hp(nloc,nd)
896 real tg,qg,ahg,alv,s,tc,es,denom,rg,tca,elacrit
897 real by, defrac, pden
898 real ah0(nloc), cape(nloc), capem(nloc), byp(nloc)
923 ah0(
i)=(
cpd*(1.-qnk(
i))+
cl*qnk(
i))*tnk(
i)
935 if(
k.ge.(icbs(
i)+1))
then
945 : +alv*alv*qg/(
rrv*t(
i,
k)*t(
i,
k))
956 es=6.112*exp(17.67*tc/denom)
975 es=6.112*exp(17.67*tc/denom)
994 clw(
i,
k)=max(0.0,clw(
i,
k))
1014 ep(
i,
k)=amax1(ep(
i,
k),0.0)
1069 buoy(
i,
k)=tvp(
i,
k)-tv(
i,
k)
1078 if((
k.ge.icb(
i)).and.(
k.le.
nl).and.(p(
i,
k).ge.pbase(
i)))
then
1079 buoy(
i,
k)=buoybase(
i)
1083 buoy(
i,icb(
i))=buoybase(
i)
1101 if ((
k.ge.icb(
i)).and.(buoy(
i,
k).lt.
dtovsh))
then
1102 inb(
i)=min(inb(
i),
k)
1215 if((
k.ge.icb(
i)).and.(
k.le.inb(
i)))
then
1225 : ,pbase,p,ph,tv,buoy
1235 #include "cvthermo.h"
1236 #include "cv30param.h"
1239 integer ncum, nd, nloc
1240 integer icb(nloc), inb(nloc)
1242 real p(nloc,nd), ph(nloc,nd+1)
1243 real tv(nloc,nd), buoy(nloc,nd)
1246 real sig(nloc,nd), w0(nloc,nd)
1253 integer i,
j,
k, icbmax
1254 real deltap, fac, w, amu
1255 real dtmin(nloc,nd), sigold(nloc,nd)
1276 if ((inb(
i).lt.(
nl-1)).and.(
k.ge.(inb(
i)+1)))
then
1278 : +2.*
alpha*buoy(
i,inb(
i))*abs(buoy(
i,inb(
i)))
1279 sig(
i,
k)=amax1(sig(
i,
k),0.0)
1289 icbmax=max(icbmax,icb(
i))
1296 if (
k.le.icb(
i))
then
1298 sig(
i,
k)=amax1(sig(
i,
k),0.0)
1326 if (sig(
i,nd).lt.1.5.or.sig(
i,nd).gt.12.0)
then
1354 if ( (
k.ge.(icb(
i)+1)).and.(
k.le.inb(
i)).and.
1355 : (
j.ge.icb(
i)).and.(
j.le.(
k-1)) )
then
1356 dtmin(
i,
k)=amin1(dtmin(
i,
k),buoy(
i,
j))
1367 if ((
k.ge.(icb(
i)+1)).and.(
k.le.inb(
i)))
then
1369 deltap = min(pbase(
i),ph(
i,
k-1))-min(pbase(
i),ph(
i,
k))
1370 cape(
i)=cape(
i)+
rrd*buoy(
i,
k-1)*deltap/p(
i,
k-1)
1371 cape(
i)=amax1(0.0,cape(
i))
1372 sigold(
i,
k)=sig(
i,
k)
1380 sig(
i,
k)=amax1(sig(
i,
k),0.0)
1381 sig(
i,
k)=amin1(sig(
i,
k),0.01)
1384 amu=0.5*(sig(
i,
k)+sigold(
i,
k))*w
1385 m(
i,
k)=amu*0.007*p(
i,
k)*(ph(
i,
k)-ph(
i,
k+1))/tv(
i,
k)
1393 w0(
i,icb(
i))=0.5*w0(
i,icb(
i)+1)
1394 m(
i,icb(
i))=0.5*
m(
i,icb(
i)+1)
1395 : *(ph(
i,icb(
i))-ph(
i,icb(
i)+1))
1396 : /(ph(
i,icb(
i)+1)-ph(
i,icb(
i)+2))
1397 sig(
i,icb(
i))=sig(
i,icb(
i)+1)
1398 sig(
i,icb(
i)-1)=sig(
i,icb(
i))
1434 : ,ph,t,rr,rs,
u,
v,tra,h,lv,qnk
1435 : ,hp,tv,tvp,ep,clw,
m,sig
1436 : ,ment,qent,uent,vent,sij,elij,ments,qents,traent)
1445 #include "cvthermo.h"
1446 #include "cv30param.h"
1449 integer ncum, nd, na, ntra, nloc
1450 integer icb(nloc), inb(nloc), nk(nloc)
1454 real t(nloc,nd), rr(nloc,nd), rs(nloc,nd)
1455 real u(nloc,nd),
v(nloc,nd)
1456 real tra(nloc,nd,ntra)
1457 real lv(nloc,na), h(nloc,na), hp(nloc,na)
1458 real tv(nloc,na), tvp(nloc,na), ep(nloc,na), clw(nloc,na)
1462 real ment(nloc,na,na), qent(nloc,na,na)
1463 real uent(nloc,na,na), vent(nloc,na,na)
1464 real sij(nloc,na,na), elij(nloc,na,na)
1465 real traent(nloc,nd,nd,ntra)
1466 real ments(nloc,nd,nd), qents(nloc,nd,nd)
1467 real sigij(nloc,nd,nd)
1472 integer nent(nloc,na)
1473 real rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
1474 real alt, smid, sjmin, sjmax, delp, delm
1475 real asij(nloc), smax(nloc), scrit(nloc)
1476 real asum(nloc,nd),bsum(nloc,nd),csum(nloc,nd)
1510 ment(1:ncum,1:nd,1:nd)=0.0
1511 sij(1:ncum,1:nd,1:nd)=0.0
1534 if( (
i.ge.icb(il)).and.(
i.le.inb(il)).and.
1535 : (
j.ge.(icb(il)-1)).and.(
j.le.inb(il)))
then
1537 rti=rr(il,1)-ep(il,
i)*clw(il,
i)
1538 bf2=1.+lv(il,
j)*lv(il,
j)*rs(il,
j)/(
rrv*t(il,
j)*t(il,
j)*
cpd)
1539 anum=h(il,
j)-hp(il,
i)+(
cpv-
cpd)*t(il,
j)*(rti-rr(il,
j))
1540 denom=h(il,
i)-hp(il,
i)+(
cpd-
cpv)*(rr(il,
i)-rti)*t(il,
j)
1542 if(abs(dei).lt.0.01)dei=0.01
1543 sij(il,
i,
j)=anum/dei
1545 altem=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti-rs(il,
j)
1547 cwat=clw(il,
j)*(1.-ep(il,
j))
1549 if((stemp.lt.0.0.or.stemp.gt.1.0.or.altem.gt.cwat)
1551 anum=anum-lv(il,
j)*(rti-rs(il,
j)-cwat*bf2)
1552 denom=denom+lv(il,
j)*(rr(il,
i)-rti)
1553 if(abs(denom).lt.0.01)denom=0.01
1554 sij(il,
i,
j)=anum/denom
1555 altem=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti-rs(il,
j)
1556 altem=altem-(bf2-1.)*cwat
1558 if(sij(il,
i,
j).gt.0.0.and.sij(il,
i,
j).lt.0.95)
then
1559 qent(il,
i,
j)=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti
1560 uent(il,
i,
j)=sij(il,
i,
j)*
u(il,
i)+(1.-sij(il,
i,
j))*
u(il,nk(il))
1561 vent(il,
i,
j)=sij(il,
i,
j)*
v(il,
i)+(1.-sij(il,
i,
j))*
v(il,nk(il))
1567 elij(il,
i,
j)=amax1(0.0,elij(il,
i,
j))
1568 ment(il,
i,
j)=
m(il,
i)/(1.-sij(il,
i,
j))
1569 nent(il,
i)=nent(il,
i)+1
1571 sij(il,
i,
j)=amax1(0.0,sij(il,
i,
j))
1572 sij(il,
i,
j)=amin1(1.0,sij(il,
i,
j))
1597 if ((
i.ge.icb(il)).and.(
i.le.inb(il)).and.(nent(il,
i).eq.0))
then
1599 ment(il,
i,
i)=
m(il,
i)
1600 qent(il,
i,
i)=rr(il,nk(il))-ep(il,
i)*clw(il,
i)
1601 uent(il,
i,
i)=
u(il,nk(il))
1602 vent(il,
i,
i)=
v(il,nk(il))
1603 elij(il,
i,
i)=clw(il,
i)
1623 if ((
j.ge.(icb(il)-1)).and.(
j.le.inb(il))
1624 : .and.(
i.ge.icb(il)).and.(
i.le.inb(il)))
then
1625 sigij(il,
i,
j)=sij(il,
i,
j)
1642 call
zilch(asum,nloc*nd)
1643 call
zilch(csum,nloc*nd)
1644 call
zilch(csum,nloc*nd)
1654 if (
i.ge.icb(il) .and.
i.le.inb(il) ) num1=num1+1
1656 if (num1.le.0) goto 789
1660 if (
i.ge.icb(il) .and.
i.le.inb(il) )
then
1661 lwork(il)=(nent(il,
i).ne.0)
1662 qp=rr(il,1)-ep(il,
i)*clw(il,
i)
1663 anum=h(il,
i)-hp(il,
i)-lv(il,
i)*(qp-rs(il,
i))
1665 denom=h(il,
i)-hp(il,
i)+lv(il,
i)*(rr(il,
i)-qp)
1667 if(abs(denom).lt.0.01)denom=0.01
1668 scrit(il)=anum/denom
1669 alt=qp-rs(il,
i)+scrit(il)*(rr(il,
i)-qp)
1670 if(scrit(il).le.0.0.or.alt.le.0.0)scrit(il)=1.0
1680 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
1681 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
1682 : .and. lwork(il) ) num2=num2+1
1684 if (num2.le.0) goto 175
1687 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
1688 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
1689 : .and. lwork(il) )
then
1691 if(sij(il,
i,
j).gt.1.0e-16.and.sij(il,
i,
j).lt.0.95)
then
1694 sjmax=amax1(sij(il,
i,
j+1),smax(il))
1695 sjmax=amin1(sjmax,scrit(il))
1696 smax(il)=amax1(sij(il,
i,
j),smax(il))
1697 sjmin=amax1(sij(il,
i,
j-1),smax(il))
1698 sjmin=amin1(sjmin,scrit(il))
1699 if(sij(il,
i,
j).lt.(smax(il)-1.0e-16))wgh=0.0
1700 smid=amin1(sij(il,
i,
j),scrit(il))
1702 sjmax=amax1(sij(il,
i,
j+1),scrit(il))
1703 smid=amax1(sij(il,
i,
j),scrit(il))
1705 if(
j.gt.1)sjmin=sij(il,
i,
j-1)
1706 sjmin=amax1(sjmin,scrit(il))
1708 delp=abs(sjmax-smid)
1709 delm=abs(sjmin-smid)
1710 asij(il)=asij(il)+wgh*(delp+delm)
1711 ment(il,
i,
j)=ment(il,
i,
j)*(delp+delm)*wgh
1719 if (
i.ge.icb(il).and.
i.le.inb(il).and.lwork(il))
then
1720 asij(il)=amax1(1.0e-16,asij(il))
1721 asij(il)=1.0/asij(il)
1730 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1731 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1732 ment(il,
i,
j)=ment(il,
i,
j)*asij(il)
1739 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1740 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1741 asum(il,
i)=asum(il,
i)+ment(il,
i,
j)
1742 ment(il,
i,
j)=ment(il,
i,
j)*sig(il,
j)
1743 bsum(il,
i)=bsum(il,
i)+ment(il,
i,
j)
1749 if (
i.ge.icb(il).and.
i.le.inb(il).and.lwork(il))
then
1750 bsum(il,
i)=amax1(bsum(il,
i),1.0e-16)
1751 bsum(il,
i)=1.0/bsum(il,
i)
1757 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1758 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1759 ment(il,
i,
j)=ment(il,
i,
j)*asum(il,
i)*bsum(il,
i)
1766 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1767 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1768 csum(il,
i)=csum(il,
i)+ment(il,
i,
j)
1774 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1775 : .and. csum(il,
i).lt.
m(il,
i) )
then
1777 ment(il,
i,
i)=
m(il,
i)
1778 qent(il,
i,
i)=rr(il,1)-ep(il,
i)*clw(il,
i)
1779 uent(il,
i,
i)=
u(il,nk(il))
1780 vent(il,
i,
i)=
v(il,nk(il))
1781 elij(il,
i,
i)=clw(il,
i)
1809 if(zm(il,
im).ne.0.)
then
1830 : ,t,rr,rs,gz,
u,
v,tra,p,ph
1831 : ,th,tv,lv,cpn,ep,sigp,clw
1832 : ,
m,ment,elij,delt,plcl
1833 : ,mp,rp,up,vp,trap,wt,water,evap,b
1834 : ,wdtraina,wdtrainm)
1838 #include "cvthermo.h"
1839 #include "cv30param.h"
1843 integer ncum, nd, na, ntra, nloc
1844 integer icb(nloc), inb(nloc)
1845 real delt, plcl(nloc)
1846 real t(nloc,nd), rr(nloc,nd), rs(nloc,nd)
1847 real u(nloc,nd),
v(nloc,nd)
1848 real tra(nloc,nd,ntra)
1849 real p(nloc,nd), ph(nloc,nd+1)
1850 real th(nloc,na), gz(nloc,na)
1851 real lv(nloc,na), ep(nloc,na), sigp(nloc,na), clw(nloc,na)
1852 real cpn(nloc,na), tv(nloc,na)
1853 real m(nloc,na), ment(nloc,na,na), elij(nloc,na,na)
1856 real mp(nloc,na), rp(nloc,na), up(nloc,na), vp(nloc,na)
1857 real water(nloc,na), evap(nloc,na), wt(nloc,na)
1858 real trap(nloc,na,ntra)
1864 real wdtraina(nloc,na), wdtrainm(nloc,na)
1867 integer i,
j,
k,il,num1
1869 real awat, afac, afac1, afac2, bfac
1870 real pr1, pr2, sigt, b6, c6, revap, tevap, delth
1871 real amfac, amp2, xf, tf, fac2, ur, sru, fac, d, af, bf
1895 lvcp(il,
i)=lv(il,
i)/cpn(il,
i)
1921 if(ep(il,inb(il)).lt.0.0001)lwork(il)=.
false.
1924 call
zilch(wdtrain,ncum)
1930 if (
i.le.inb(il) .and. lwork(il) ) num1=num1+1
1932 if (num1.le.0) goto 400
1947 if (
i.le.inb(il) .and. lwork(il))
then
1948 if (cvflag_grav)
then
1949 wdtrain(il)=grav*ep(il,
i)*
m(il,
i)*clw(il,
i)
1950 wdtraina(il,
i) = wdtrain(il)/grav
1952 wdtrain(il)=10.0*ep(il,
i)*
m(il,
i)*clw(il,
i)
1953 wdtraina(il,
i) = wdtrain(il)/10.
1962 if (
i.le.inb(il) .and. lwork(il))
then
1963 awat=elij(il,
j,
i)-(1.-ep(il,
i))*clw(il,
i)
1964 awat=amax1(awat,0.0)
1965 if (cvflag_grav)
then
1966 wdtrain(il)=wdtrain(il)+grav*awat*ment(il,
j,
i)
1968 wdtrain(il)=wdtrain(il)+10.0*awat*ment(il,
j,
i)
1974 if (cvflag_grav)
then
1975 wdtrainm(il,
i) = wdtrain(il)/grav-wdtraina(il,
i)
1977 wdtrainm(il,
i) = wdtrain(il)/10.-wdtraina(il,
i)
1990 if (
i.le.inb(il) .and. lwork(il))
then
1994 if(
i.lt.inb(il))
then
1996 : +(
cpd*(t(il,
i+1)-t(il,
i))+gz(il,
i+1)-gz(il,
i))/lv(il,
i)
1997 rp(il,
i)=0.5*(rp(il,
i)+rr(il,
i))
1999 rp(il,
i)=amax1(rp(il,
i),0.0)
2000 rp(il,
i)=amin1(rp(il,
i),rs(il,
i))
2001 rp(il,inb(il))=rr(il,inb(il))
2004 afac=p(il,1)*(rs(il,1)-rp(il,1))/(1.0e4+2000.0*p(il,1)*rs(il,1))
2007 : +(
cpd*(t(il,
i)-t(il,
i-1))+gz(il,
i)-gz(il,
i-1))/lv(il,
i)
2008 rp(il,
i-1)=0.5*(rp(il,
i-1)+rr(il,
i-1))
2009 rp(il,
i-1)=amin1(rp(il,
i-1),rs(il,
i-1))
2010 rp(il,
i-1)=amax1(rp(il,
i-1),0.0)
2011 afac1=p(il,
i)*(rs(il,
i)-rp(il,
i))/(1.0e4+2000.0*p(il,
i)*rs(il,
i))
2012 afac2=p(il,
i-1)*(rs(il,
i-1)-rp(il,
i-1))
2013 : /(1.0e4+2000.0*p(il,
i-1)*rs(il,
i-1))
2014 afac=0.5*(afac1+afac2)
2016 if(
i.eq.inb(il))afac=0.0
2017 afac=amax1(afac,0.0)
2018 bfac=1./(
sigd*wt(il,
i))
2030 pr1=(plcl(il)-ph(il,
i+1))/(ph(il,
i)-ph(il,
i+1))
2031 pr1=max(0.,min(1.,pr1))
2032 pr2=(ph(il,
i)-plcl(il))/(ph(il,
i)-ph(il,
i+1))
2033 pr2=max(0.,min(1.,pr2))
2034 sigt=sigp(il,
i)*pr1+pr2
2037 b6=bfac*50.*
sigd*(ph(il,
i)-ph(il,
i+1))*sigt*afac
2038 c6=water(il,
i+1)+bfac*wdtrain(il)
2039 : -50.*
sigd*bfac*(ph(il,
i)-ph(il,
i+1))*evap(il,
i+1)
2041 revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
2042 evap(il,
i)=sigt*afac*revap
2043 water(il,
i)=revap*revap
2045 evap(il,
i)=-evap(il,
i+1)
2046 : +0.02*(wdtrain(il)+
sigd*wt(il,
i)*water(il,
i+1))
2047 : /(
sigd*(ph(il,
i)-ph(il,
i+1)))
2055 tevap=amax1(0.0,evap(il,
i))
2056 delth=amax1(0.001,(th(il,
i)-th(il,
i-1)))
2057 if (cvflag_grav)
then
2059 : *(p(il,
i-1)-p(il,
i))/delth
2061 mp(il,
i)=10.*lvcp(il,
i)*
sigd*tevap*(p(il,
i-1)-p(il,
i))/delth
2069 : *(th(il,
i)-th(il,
i-1))/(tv(il,
i)*th(il,
i))
2070 amp2=abs(mp(il,
i+1)*mp(il,
i+1)-mp(il,
i)*mp(il,
i))
2071 if(amp2.gt.(0.1*amfac))
then
2073 tf=b(il,
i)-5.0*(th(il,
i)-th(il,
i-1))*t(il,
i)
2074 : /(lvcp(il,
i)*
sigd*th(il,
i))
2075 af=xf*tf+mp(il,
i+1)*mp(il,
i+1)*tinv
2076 bf=2.*(tinv*mp(il,
i+1))**3+tinv*mp(il,
i+1)*xf*tf
2077 : +50.*(p(il,
i-1)-p(il,
i))*xf*tevap
2079 if(bf.lt.0.0)fac2=-1.0
2081 ur=0.25*bf*bf-af*af*af*tinv*tinv*tinv
2085 if((0.5*bf-sru).lt.0.0)fac=-1.0
2086 mp(il,
i)=mp(il,
i+1)*tinv+(0.5*bf+sru)**tinv
2087 : +fac*(abs(0.5*bf-sru))**tinv
2089 d=atan(2.*sqrt(-ur)/(bf+1.0e-28))
2090 if(fac2.lt.0.0)d=3.14159-d
2091 mp(il,
i)=mp(il,
i+1)*tinv+2.*sqrt(af*tinv)*cos(d*tinv)
2093 mp(il,
i)=amax1(0.0,mp(il,
i))
2095 if (cvflag_grav)
then
2099 b(il,
i-1)=b(il,
i)+100.0*(p(il,
i-1)-p(il,
i))*tevap
2100 2 /(mp(il,
i)+
sigd*0.1)
2101 3 -10.0*(th(il,
i)-th(il,
i-1))*t(il,
i)/(lvcp(il,
i)*
sigd*th(il,
i))
2103 b(il,
i-1)=b(il,
i)+100.0*(p(il,
i-1)-p(il,
i))*tevap
2104 2 /(mp(il,
i)+
sigd*0.1)
2105 3 -10.0*(th(il,
i)-th(il,
i-1))*t(il,
i)/(lvcp(il,
i)*
sigd*th(il,
i))
2107 b(il,
i-1)=amax1(b(il,
i-1),0.0)
2112 ampmax=2.0*(ph(il,
i)-ph(il,
i+1))*delti
2113 amp2=2.0*(ph(il,
i-1)-ph(il,
i))*delti
2114 ampmax=amin1(ampmax,amp2)
2115 mp(il,
i)=amin1(mp(il,
i),ampmax)
2120 if(p(il,
i).gt.p(il,icb(il)))
then
2121 mp(il,
i)=mp(il,icb(il))*(p(il,1)-p(il,
i))/(p(il,1)-p(il,icb(il)))
2130 if (
i.ne.inb(il))
then
2134 if(mp(il,
i).gt.mp(il,
i+1))
then
2136 if (cvflag_grav)
then
2137 rp(il,
i)=rp(il,
i+1)*mp(il,
i+1)+rr(il,
i)*(mp(il,
i)-mp(il,
i+1))
2139 : *(evap(il,
i+1)+evap(il,
i))
2141 rp(il,
i)=rp(il,
i+1)*mp(il,
i+1)+rr(il,
i)*(mp(il,
i)-mp(il,
i+1))
2142 : +5.*
sigd*(ph(il,
i)-ph(il,
i+1))
2143 : *(evap(il,
i+1)+evap(il,
i))
2145 rp(il,
i)=rp(il,
i)/mp(il,
i)
2146 up(il,
i)=up(il,
i+1)*mp(il,
i+1)+
u(il,
i)*(mp(il,
i)-mp(il,
i+1))
2147 up(il,
i)=up(il,
i)/mp(il,
i)
2148 vp(il,
i)=vp(il,
i+1)*mp(il,
i+1)+
v(il,
i)*(mp(il,
i)-mp(il,
i+1))
2149 vp(il,
i)=vp(il,
i)/mp(il,
i)
2160 if(mp(il,
i+1).gt.1.0e-16)
then
2161 if (cvflag_grav)
then
2164 : *(evap(il,
i+1)+evap(il,
i))/mp(il,
i+1)
2167 : +5.*
sigd*(ph(il,
i)-ph(il,
i+1))
2168 : *(evap(il,
i+1)+evap(il,
i))/mp(il,
i+1)
2179 rp(il,
i)=amin1(rp(il,
i),rs(il,
i))
2180 rp(il,
i)=amax1(rp(il,
i),0.0)
2193 : ,t,rr,
u,
v,tra,gz,p,ph,h,hp,lv,cpn,th
2194 : ,ep,clw,
m,tp,mp,rp,up,vp,trap
2196 : ,ment,qent,uent,vent,nent,elij,traent,sig
2198 : ,iflag,precip,vprecip,ft,fr,fu,fv,ftra
2199 : ,upwd,dnwd,dnwd0,ma,mike,tls,tps,qcondc,wd)
2202 #include "cvthermo.h"
2203 #include "cv30param.h"
2205 #include "conema3.h"
2208 integer ncum,nd,na,ntra,nloc
2209 integer icb(nloc), inb(nloc)
2211 real t(nloc,nd), rr(nloc,nd),
u(nloc,nd),
v(nloc,nd)
2212 real tra(nloc,nd,ntra), sig(nloc,nd)
2213 real gz(nloc,na), ph(nloc,nd+1), h(nloc,na), hp(nloc,na)
2214 real th(nloc,na), p(nloc,nd), tp(nloc,na)
2215 real lv(nloc,na), cpn(nloc,na), ep(nloc,na), clw(nloc,na)
2216 real m(nloc,na), mp(nloc,na), rp(nloc,na), up(nloc,na)
2217 real vp(nloc,na), wt(nloc,nd), trap(nloc,nd,ntra)
2218 real water(nloc,na), evap(nloc,na), b(nloc,na)
2219 real ment(nloc,na,na), qent(nloc,na,na), uent(nloc,na,na)
2221 real vent(nloc,na,na), elij(nloc,na,na)
2222 integer nent(nloc,na)
2223 real traent(nloc,na,na,ntra)
2224 real tv(nloc,nd), tvp(nloc,nd)
2231 real vprecip(nloc,nd+1)
2232 real ft(nloc,nd), fr(nloc,nd), fu(nloc,nd), fv(nloc,nd)
2233 real ftra(nloc,nd,ntra)
2234 real upwd(nloc,nd), dnwd(nloc,nd), ma(nloc,nd)
2235 real dnwd0(nloc,nd), mike(nloc,nd)
2236 real tls(nloc,nd), tps(nloc,nd)
2237 real qcondc(nloc,nd)
2241 integer i,
k,il,
n,
j,num1
2242 real rat, awat, delti
2243 real ax, bx, cx, dx, ex
2244 real cpinv, rdcp, dpinv
2245 real lvcp(nloc,na), mke(nloc,na)
2246 real am(nloc), work(nloc), ad(nloc), amp1(nloc)
2248 real up1(nloc,nd,nd), dn1(nloc,nd,nd)
2249 real asum(nloc), bsum(nloc), csum(nloc), dsum(nloc)
2250 real qcond(nloc,nd), nqcond(nloc,nd), wa(nloc,nd)
2251 real siga(nloc,nd), sax(nloc,nd), mac(nloc,nd)
2289 lvcp(il,
i)=lv(il,
i)/cpn(il,
i)
2298 if(ep(il,inb(il)).ge.0.0001)
then
2299 if (cvflag_grav)
then
2300 precip(il)=wt(il,1)*
sigd*water(il,1)*86400.*1000./(
rowl*grav)
2302 precip(il)=wt(il,1)*
sigd*water(il,1)*8640.
2312 if (
k.le.inb(il))
then
2313 if (cvflag_grav)
then
2314 vprecip(il,
k) = wt(il,
k)*
sigd*water(il,
k)/grav
2316 vprecip(il,
k) = wt(il,
k)*
sigd*water(il,
k)/10.
2336 work(il)=1.0/(ph(il,1)-ph(il,2))
2342 if (
k.le.inb(il))
then
2343 am(il)=am(il)+
m(il,
k)
2351 if (cvflag_grav)
then
2352 if((0.01*grav*work(il)*am(il)).ge.delti)iflag(il)=1
2353 ft(il,1)=0.01*grav*work(il)*am(il)*(t(il,2)-t(il,1)
2354 : +(gz(il,2)-gz(il,1))/cpn(il,1))
2356 if((0.1*work(il)*am(il)).ge.delti)iflag(il)=1
2357 ft(il,1)=0.1*work(il)*am(il)*(t(il,2)-t(il,1)
2358 : +(gz(il,2)-gz(il,1))/cpn(il,1))
2361 ft(il,1)=ft(il,1)-0.5*lvcp(il,1)*
sigd*(evap(il,1)+evap(il,2))
2363 if (cvflag_grav)
then
2364 ft(il,1)=ft(il,1)-0.009*grav*
sigd*mp(il,2)
2365 : *t(il,1)*b(il,1)*work(il)
2367 ft(il,1)=ft(il,1)-0.09*
sigd*mp(il,2)*t(il,1)*b(il,1)*work(il)
2370 ft(il,1)=ft(il,1)+0.01*
sigd*wt(il,1)*(
cl-
cpd)*water(il,2)*(t(il,2)
2371 :-t(il,1))*work(il)/cpn(il,1)
2373 if (cvflag_grav)
then
2376 fr(il,1)=0.01*grav*mp(il,2)*(rp(il,2)-rr(il,1))*work(il)
2377 : +
sigd*0.5*(evap(il,1)+evap(il,2))
2380 fr(il,1)=fr(il,1)+0.01*grav*am(il)*(rr(il,2)-rr(il,1))*work(il)
2382 fu(il,1)=fu(il,1)+0.01*grav*work(il)*(mp(il,2)*(up(il,2)-
u(il,1))
2383 : +am(il)*(
u(il,2)-
u(il,1)))
2384 fv(il,1)=fv(il,1)+0.01*grav*work(il)*(mp(il,2)*(vp(il,2)-
v(il,1))
2385 : +am(il)*(
v(il,2)-
v(il,1)))
2387 fr(il,1)=0.1*mp(il,2)*(rp(il,2)-rr(il,1))*work(il)
2388 : +
sigd*0.5*(evap(il,1)+evap(il,2))
2389 fr(il,1)=fr(il,1)+0.1*am(il)*(rr(il,2)-rr(il,1))*work(il)
2390 fu(il,1)=fu(il,1)+0.1*work(il)*(mp(il,2)*(up(il,2)-
u(il,1))
2391 : +am(il)*(
u(il,2)-
u(il,1)))
2392 fv(il,1)=fv(il,1)+0.1*work(il)*(mp(il,2)*(vp(il,2)-
v(il,1))
2393 : +am(il)*(
v(il,2)-
v(il,1)))
2414 if (
j.le.inb(il))
then
2415 if (cvflag_grav)
then
2417 : +0.01*grav*work(il)*ment(il,
j,1)*(qent(il,
j,1)-rr(il,1))
2419 : +0.01*grav*work(il)*ment(il,
j,1)*(uent(il,
j,1)-
u(il,1))
2421 : +0.01*grav*work(il)*ment(il,
j,1)*(vent(il,
j,1)-
v(il,1))
2424 : +0.1*work(il)*ment(il,
j,1)*(qent(il,
j,1)-rr(il,1))
2426 : +0.1*work(il)*ment(il,
j,1)*(uent(il,
j,1)-
u(il,1))
2428 : +0.1*work(il)*ment(il,
j,1)*(vent(il,
j,1)-
v(il,1))
2464 if(
i.le.inb(il))num1=num1+1
2466 if(num1.le.0)go to 500
2468 call
zilch(amp1,ncum)
2473 if (
i.le.inb(il) .and.
k.le.(inb(il)+1))
then
2474 amp1(il)=amp1(il)+
m(il,
k)
2482 if (
i.le.inb(il) .and.
j.le.(inb(il)+1))
then
2483 amp1(il)=amp1(il)+ment(il,
k,
j)
2492 if (
i.le.inb(il) .and.
j.le.inb(il))
then
2493 ad(il)=ad(il)+ment(il,
j,
k)
2500 if (
i.le.inb(il))
then
2501 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2505 if (cvflag_grav)
then
2506 if((0.01*grav*dpinv*amp1(il)).ge.delti)iflag(il)=1
2508 if((0.1*dpinv*amp1(il)).ge.delti)iflag(il)=1
2511 if (cvflag_grav)
then
2512 ft(il,
i)=0.01*grav*dpinv*(amp1(il)*(t(il,
i+1)-t(il,
i)
2513 : +(gz(il,
i+1)-gz(il,
i))*cpinv)
2514 : -ad(il)*(t(il,
i)-t(il,
i-1)+(gz(il,
i)-gz(il,
i-1))*cpinv))
2515 : -0.5*
sigd*lvcp(il,
i)*(evap(il,
i)+evap(il,
i+1))
2516 rat=cpn(il,
i-1)*cpinv
2517 ft(il,
i)=ft(il,
i)-0.009*grav*
sigd*(mp(il,
i+1)*t(il,
i)*b(il,
i)
2518 : -mp(il,
i)*t(il,
i-1)*rat*b(il,
i-1))*dpinv
2519 ft(il,
i)=ft(il,
i)+0.01*grav*dpinv*ment(il,
i,
i)*(hp(il,
i)-h(il,
i)
2520 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)-qent(il,
i,
i)))*cpinv
2522 ft(il,
i)=0.1*dpinv*(amp1(il)*(t(il,
i+1)-t(il,
i)
2523 : +(gz(il,
i+1)-gz(il,
i))*cpinv)
2524 : -ad(il)*(t(il,
i)-t(il,
i-1)+(gz(il,
i)-gz(il,
i-1))*cpinv))
2525 : -0.5*
sigd*lvcp(il,
i)*(evap(il,
i)+evap(il,
i+1))
2526 rat=cpn(il,
i-1)*cpinv
2527 ft(il,
i)=ft(il,
i)-0.09*
sigd*(mp(il,
i+1)*t(il,
i)*b(il,
i)
2528 : -mp(il,
i)*t(il,
i-1)*rat*b(il,
i-1))*dpinv
2529 ft(il,
i)=ft(il,
i)+0.1*dpinv*ment(il,
i,
i)*(hp(il,
i)-h(il,
i)
2530 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)-qent(il,
i,
i)))*cpinv
2535 : *(t(il,
i+1)-t(il,
i))*dpinv*cpinv
2537 if (cvflag_grav)
then
2538 fr(il,
i)=0.01*grav*dpinv*(amp1(il)*(rr(il,
i+1)-rr(il,
i))
2539 : -ad(il)*(rr(il,
i)-rr(il,
i-1)))
2540 fu(il,
i)=fu(il,
i)+0.01*grav*dpinv*(amp1(il)*(
u(il,
i+1)-
u(il,
i))
2541 : -ad(il)*(
u(il,
i)-
u(il,
i-1)))
2542 fv(il,
i)=fv(il,
i)+0.01*grav*dpinv*(amp1(il)*(
v(il,
i+1)-
v(il,
i))
2543 : -ad(il)*(
v(il,
i)-
v(il,
i-1)))
2545 fr(il,
i)=0.1*dpinv*(amp1(il)*(rr(il,
i+1)-rr(il,
i))
2546 : -ad(il)*(rr(il,
i)-rr(il,
i-1)))
2547 fu(il,
i)=fu(il,
i)+0.1*dpinv*(amp1(il)*(
u(il,
i+1)-
u(il,
i))
2548 : -ad(il)*(
u(il,
i)-
u(il,
i-1)))
2549 fv(il,
i)=fv(il,
i)+0.1*dpinv*(amp1(il)*(
v(il,
i+1)-
v(il,
i))
2550 : -ad(il)*(
v(il,
i)-
v(il,
i-1)))
2576 if (
i.le.inb(il))
then
2577 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2580 awat=elij(il,
k,
i)-(1.-ep(il,
i))*clw(il,
i)
2581 awat=amax1(awat,0.0)
2583 if (cvflag_grav)
then
2585 : +0.01*grav*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-awat-rr(il,
i))
2587 : +0.01*grav*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
2589 : +0.01*grav*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
2592 : +0.1*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-awat-rr(il,
i))
2594 : +0.01*grav*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
2596 : +0.1*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
2600 qcond(il,
i)=qcond(il,
i)+(elij(il,
k,
i)-awat)
2601 nqcond(il,
i)=nqcond(il,
i)+1.
2626 if (
i.le.inb(il) .and.
k.le.inb(il))
then
2627 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2630 if (cvflag_grav)
then
2632 : +0.01*grav*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-rr(il,
i))
2634 : +0.01*grav*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
2636 : +0.01*grav*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
2639 : +0.1*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-rr(il,
i))
2641 : +0.1*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
2643 : +0.1*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
2668 if (
i.le.inb(il))
then
2669 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2672 if (cvflag_grav)
then
2675 fr(il,
i)=fr(il,
i)+0.5*
sigd*(evap(il,
i)+evap(il,
i+1))
2676 : +0.01*grav*(mp(il,
i+1)*(rp(il,
i+1)-rr(il,
i))-mp(il,
i)
2677 : *(rp(il,
i)-rr(il,
i-1)))*dpinv
2679 fu(il,
i)=fu(il,
i)+0.01*grav*(mp(il,
i+1)*(up(il,
i+1)-
u(il,
i))
2680 : -mp(il,
i)*(up(il,
i)-
u(il,
i-1)))*dpinv
2681 fv(il,
i)=fv(il,
i)+0.01*grav*(mp(il,
i+1)*(vp(il,
i+1)-
v(il,
i))
2682 : -mp(il,
i)*(vp(il,
i)-
v(il,
i-1)))*dpinv
2684 fr(il,
i)=fr(il,
i)+0.5*
sigd*(evap(il,
i)+evap(il,
i+1))
2685 : +0.1*(mp(il,
i+1)*(rp(il,
i+1)-rr(il,
i))-mp(il,
i)
2686 : *(rp(il,
i)-rr(il,
i-1)))*dpinv
2687 fu(il,
i)=fu(il,
i)+0.1*(mp(il,
i+1)*(up(il,
i+1)-
u(il,
i))
2688 : -mp(il,
i)*(up(il,
i)-
u(il,
i-1)))*dpinv
2689 fv(il,
i)=fv(il,
i)+0.1*(mp(il,
i+1)*(vp(il,
i+1)-
v(il,
i))
2690 : -mp(il,
i)*(vp(il,
i)-
v(il,
i-1)))*dpinv
2700 if (
k.le.inb(il) .and.
i.le.inb(il))
then
2702 qcond(il,
i)=qcond(il,
i)+elij(il,
k,
i)
2703 nqcond(il,
i)=nqcond(il,
i)+1.
2710 if (
i.le.inb(il) .and. nent(il,
i).eq.0)
then
2711 qcond(il,
i)=qcond(il,
i)+(1.-ep(il,
i))*clw(il,
i)
2712 nqcond(il,
i)=nqcond(il,
i)+1.
2717 if (
i.le.inb(il) .and. nqcond(il,
i).ne.0.)
then
2718 qcond(il,
i)=qcond(il,
i)/nqcond(il,
i)
2750 ax=0.1*ment(il,inb(il),inb(il))*(hp(il,inb(il))-h(il,inb(il))
2751 : +t(il,inb(il))*(
cpv-
cpd)
2752 : *(rr(il,inb(il))-qent(il,inb(il),inb(il))))
2753 : /(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
2754 ft(il,inb(il))=ft(il,inb(il))-ax
2755 ft(il,inb(il)-1)=ft(il,inb(il)-1)+ax*cpn(il,inb(il))
2756 : *(ph(il,inb(il))-ph(il,inb(il)+1))/(cpn(il,inb(il)-1)
2757 : *(ph(il,inb(il)-1)-ph(il,inb(il))))
2759 bx=0.1*ment(il,inb(il),inb(il))*(qent(il,inb(il),inb(il))
2760 : -rr(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
2761 fr(il,inb(il))=fr(il,inb(il))-bx
2762 fr(il,inb(il)-1)=fr(il,inb(il)-1)
2763 : +bx*(ph(il,inb(il))-ph(il,inb(il)+1))
2764 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
2766 cx=0.1*ment(il,inb(il),inb(il))*(uent(il,inb(il),inb(il))
2767 : -
u(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
2768 fu(il,inb(il))=fu(il,inb(il))-cx
2769 fu(il,inb(il)-1)=fu(il,inb(il)-1)
2770 : +cx*(ph(il,inb(il))-ph(il,inb(il)+1))
2771 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
2773 dx=0.1*ment(il,inb(il),inb(il))*(vent(il,inb(il),inb(il))
2774 : -
v(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
2775 fv(il,inb(il))=fv(il,inb(il))-dx
2776 fv(il,inb(il)-1)=fv(il,inb(il)-1)
2777 : +dx*(ph(il,inb(il))-ph(il,inb(il)+1))
2778 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
2807 if (
i.le.(icb(il)-1))
then
2808 asum(il)=asum(il)+ft(il,
i)*(ph(il,
i)-ph(il,
i+1))
2809 bsum(il)=bsum(il)+fr(il,
i)*(lv(il,
i)+(
cl-
cpd)*(t(il,
i)-t(il,1)))
2810 : *(ph(il,
i)-ph(il,
i+1))
2811 csum(il)=csum(il)+(lv(il,
i)+(
cl-
cpd)*(t(il,
i)-t(il,1)))
2812 : *(ph(il,
i)-ph(il,
i+1))
2813 dsum(il)=dsum(il)+t(il,
i)*(ph(il,
i)-ph(il,
i+1))/th(il,
i)
2821 if (
i.le.(icb(il)-1))
then
2822 ft(il,
i)=asum(il)*t(il,
i)/(th(il,
i)*dsum(il))
2823 fr(il,
i)=bsum(il)/csum(il)
2845 dnwd0(il,
i)=-mp(il,
i)
2857 if (
i.ge.icb(il) .and.
i.le.inb(il))
then
2877 if (
i.ge.icb(il).and.
i.le.inb(il).and.
k.le.inb(il))
then
2878 up1(il,
k,
i)=up1(il,
k,
i)+ment(il,
n,
k)
2879 dn1(il,
k,
i)=dn1(il,
k,
i)-ment(il,
k,
n)
2890 if (
i.le.inb(il).and.
k.le.inb(il))
then
2891 upwd(il,
i)=upwd(il,
i)+
m(il,
k)+up1(il,
k,
i)
2892 dnwd(il,
i)=dnwd(il,
i)+dn1(il,
k,
i)
2944 ma(il,
i)=ma(il,
i)+
m(il,
j)
2957 if (
i.le.(icb(il)-1))
then
2970 mke(il,
i)=upwd(il,
i)+dnwd(il,
i)
2976 rdcp=(
rrd*(1.-rr(il,
i))-rr(il,
i)*
rrv)
2977 : /(
cpd*(1.-rr(il,
i))+rr(il,
i)*
cpv)
2978 tls(il,
i)=t(il,
i)*(1000.0/p(il,
i))**rdcp
3000 if (
i.le.inb(il) .and.
k.le.(inb(il)+1))
then
3001 mac(il,
i)=mac(il,
i)+
m(il,
k)
3010 if (
i.ge.icb(il) .and.
i.le.(inb(il)-1)
3011 : .and.
j.ge.icb(il) )
then
3012 sax(il,
i)=sax(il,
i)+
rrd*(tvp(il,
j)-tv(il,
j))
3013 : *(ph(il,
j)-ph(il,
j+1))/p(il,
j)
3021 if (
i.ge.icb(il) .and.
i.le.(inb(il)-1)
3022 : .and. sax(il,
i).gt.0.0 )
then
3023 wa(il,
i)=sqrt(2.*sax(il,
i))
3030 if (wa(il,
i).gt.0.0)
3031 : siga(il,
i)=mac(il,
i)/wa(il,
i)
3033 siga(il,
i) = min(siga(il,
i),1.0)
3036 qcondc(il,
i)=siga(il,
i)*clw(il,
i)*(1.-ep(il,
i))
3037 : + (1.-siga(il,
i))*qcond(il,
i)
3039 qcondc(il,
i)=qcond(il,
i)
3050 & ment,sij,da,phi,phi2,d1a,dam,
3051 & ep,vprecip,elij,clw,epmlmmm,eplamm,
3055 #include "cv30param.h"
3058 integer ncum, nd, na, nloc,len
3059 real ment(nloc,na,na),sij(nloc,na,na)
3060 real clw(nloc,nd),elij(nloc,na,na)
3062 integer icb(nloc),inb(nloc)
3063 real vprecip(nloc,nd+1)
3065 real da(nloc,na),phi(nloc,na,na)
3066 real phi2(nloc,na,na)
3067 real d1a(nloc,na),dam(nloc,na)
3068 real epmlmmm(nloc,na,na),eplamm(nloc,na)
3072 real epm(nloc,na,na)
3106 if(
k.ge.icb(
i).and.
k.le.inb(
i).and.
3109 epm(
i,
j,
k)=1.-(1.-ep(
i,
j))*clw(
i,
j)/
3110 & max(elij(
i,
k,
j),1.e-16)
3112 epm(
i,
j,
k)=max(epm(
i,
j,
k),0.0)
3121 if(
k.ge.icb(
i).and.
k.le.inb(
i))
then
3122 eplamm(
i,
j)=eplamm(
i,
j) + ep(
i,
j)*clw(
i,
j)
3123 & *ment(
i,
j,
k)*(1.-sij(
i,
j,
k))
3132 if(
k.ge.icb(
i).and.
k.le.inb(
i).and.
3156 & *epm(
i,
j,
k)*(1.-ep(
i,
k))*(1.-sij(
i,
k,
j))
3168 : ,precip,vprecip,evap,ep,sig,w0
3171 : ,ma,upwd,dnwd,dnwd0,qcondc,wd,cape
3172 : ,da,phi,mp,phi2,d1a,dam,sij
3173 : ,elij,clw,epmlmmm,eplamm
3174 : ,wdtraina,wdtrainm
3176 : ,precip1,vprecip1,evap1,ep1,sig1,w01
3177 : ,ft1,fq1,fu1,fv1,ftra1
3179 : ,ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1
3180 : ,da1,phi1,mp1,phi21,d1a1,dam1,sij1
3181 : ,elij1,clw1,epmlmmm1,eplamm1
3182 : ,wdtraina1,wdtrainm1)
3185 #include "cv30param.h"
3188 integer len, ncum, nd, ntra, nloc
3193 real vprecip(nloc,nd+1),evap(nloc,nd)
3195 real sig(nloc,nd), w0(nloc,nd)
3196 real ft(nloc,nd), fq(nloc,nd), fu(nloc,nd), fv(nloc,nd)
3197 real ftra(nloc,nd,ntra)
3199 real upwd(nloc,nd),dnwd(nloc,nd),dnwd0(nloc,nd)
3200 real qcondc(nloc,nd)
3201 real wd(nloc),cape(nloc)
3202 real da(nloc,nd),phi(nloc,nd,nd),mp(nloc,nd)
3204 real phi2(nloc,nd,nd)
3205 real d1a(nloc,nd),dam(nloc,nd)
3206 real wdtraina(nloc,nd), wdtrainm(nloc,nd)
3207 real sij(nloc,nd,nd)
3208 real elij(nloc,nd,nd),clw(nloc,nd)
3209 real epmlmmm(nloc,nd,nd),eplamm(nloc,nd)
3216 real vprecip1(len,nd+1),evap1(len,nd)
3218 real sig1(len,nd), w01(len,nd)
3219 real ft1(len,nd), fq1(len,nd), fu1(len,nd), fv1(len,nd)
3220 real ftra1(len,nd,ntra)
3222 real upwd1(len,nd),dnwd1(len,nd),dnwd01(len,nd)
3223 real qcondc1(nloc,nd)
3224 real wd1(nloc),cape1(nloc)
3225 real da1(nloc,nd),phi1(nloc,nd,nd),mp1(nloc,nd)
3227 real phi21(len,nd,nd)
3228 real d1a1(len,nd),dam1(len,nd)
3229 real wdtraina1(len,nd), wdtrainm1(len,nd)
3230 real sij1(len,nd,nd)
3231 real elij1(len,nd,nd),clw1(len,nd)
3232 real epmlmmm1(len,nd,nd),eplamm1(len,nd)
3239 precip1(idcum(
i))=precip(
i)
3240 iflag1(idcum(
i))=iflag(
i)
3242 inb1(idcum(
i))=inb(
i)
3243 cape1(idcum(
i))=cape(
i)
3248 vprecip1(idcum(
i),
k)=vprecip(
i,
k)
3249 evap1(idcum(
i),
k)=evap(
i,
k)
3250 sig1(idcum(
i),
k)=sig(
i,
k)
3251 w01(idcum(
i),
k)=w0(
i,
k)
3252 ft1(idcum(
i),
k)=ft(
i,
k)
3253 fq1(idcum(
i),
k)=fq(
i,
k)
3254 fu1(idcum(
i),
k)=fu(
i,
k)
3255 fv1(idcum(
i),
k)=fv(
i,
k)
3256 ma1(idcum(
i),
k)=ma(
i,
k)
3257 upwd1(idcum(
i),
k)=upwd(
i,
k)
3258 dnwd1(idcum(
i),
k)=dnwd(
i,
k)
3259 dnwd01(idcum(
i),
k)=dnwd0(
i,
k)
3260 qcondc1(idcum(
i),
k)=qcondc(
i,
k)
3261 da1(idcum(
i),
k)=da(
i,
k)
3262 mp1(idcum(
i),
k)=mp(
i,
k)
3264 ep1(idcum(
i),
k)=ep(
i,
k)
3265 d1a1(idcum(
i),
k)=d1a(
i,
k)
3266 dam1(idcum(
i),
k)=dam(
i,
k)
3267 clw1(idcum(
i),
k)=clw(
i,
k)
3268 eplamm1(idcum(
i),
k)=eplamm(
i,
k)
3269 wdtraina1(idcum(
i),
k)=wdtraina(
i,
k)
3270 wdtrainm1(idcum(
i),
k)=wdtrainm(
i,
k)
3276 sig1(idcum(
i),nd)=sig(
i,nd)
3290 sij1(idcum(
i),
k,
j)=sij(
i,
k,
j)
3291 phi1(idcum(
i),
k,
j)=phi(
i,
k,
j)
3292 phi21(idcum(
i),
k,
j)=phi2(
i,
k,
j)
3293 elij1(idcum(
i),
k,
j)=elij(
i,
k,
j)
3294 epmlmmm1(idcum(
i),
k,
j)=epmlmmm(
i,
k,
j)