39 CHARACTER (LEN=20) :: modname=
'cv3_param'
40 CHARACTER (LEN=80) :: abort_message
42 LOGICAL,
SAVE :: first=.true.
93 OPEN(99,file=
'conv_param.data',status=
'old',
94 $ form=
'formatted',err=9999)
98 READ(99,*,end=9998)
sigdz
99 READ(99,*,end=9998)
spfac
100 READ(99,*,end=9998)
tau
102 READ(99,*,end=9998)
wbmax
106 WRITE(*,*)
'dpbase=',
dpbase
107 WRITE(*,*)
'pbcrit=',
pbcrit
108 WRITE(*,*)
'ptcrit=',
ptcrit
109 WRITE(*,*)
'sigdz=',
sigdz
110 WRITE(*,*)
'spfac=',
spfac
113 WRITE(*,*)
'wbmax =',
wbmax
116 OPEN(79,file=
'ep_param.data',status=
'old',
117 $ form=
'formatted',err=7999)
118 READ(79,*,end=7998) flag_epkeorig
119 READ(79,*,end=7998)
elcrit
120 READ(79,*,end=7998)
tlcrit
124 WRITE(*,*)
'flag_epKEorig',flag_epkeorig
125 WRITE(*,*)
'elcrit=',
elcrit
126 WRITE(*,*)
'tlcrit=',
tlcrit
145 : ,lv,cpn,tv,gz,h,hm,th)
155 integer len, nd, ndp1
156 real t(len,nd),
q(len,nd), p(len,nd), ph(len,ndp1)
159 real lv(len,nd), cpn(len,nd), tv(len,nd)
160 real gz(len,nd), h(len,nd), hm(len,nd)
169 #include "cvthermo.h"
170 #include "cv3param.h"
185 th(
i,
k)=t(
i,
k)*(1000.0/p(
i,
k))**rdcp
199 gz(
i,
k)=gz(
i,
k-1)+0.5*
rrd*(tvx+tvy)
200 & *(p(
i,
k-1)-p(
i,
k))/ph(
i,
k)
224 : ,p1feed,p2feed,wght
225 : ,wghti,tnk,thnk,qnk,qsnk,unk,vnk
226 : ,cpnk,hnk,nk,icb,icbmax,iflag,gznk,plcl)
243 #include "cv3param.h"
244 #include "cvthermo.h"
248 real t(len,nd),
q(len,nd), p(len,nd)
249 real u(len,nd),
v(len,nd)
250 real hm(len,nd), gz(len,nd)
258 integer iflag(len), nk(len), icb(len), icbmax
261 real tnk(len), thnk(len), qnk(len), qsnk(len)
262 real unk(len), vnk(len)
263 real cpnk(len), hnk(len), gznk(len)
267 integer i,
k, iter, niter
270 real pup(len),plo(len),pfeed(len)
271 real plclup(len),plcllo(len),plclfeed(len)
299 o ,wghti,nk,tnk,thnk,qnk,qsnk,unk,vnk,plclup)
302 plo(
i) = ph(
i,nk(
i)+1)
306 o ,wghti,nk,tnk,thnk,qnk,qsnk,unk,vnk,plcllo)
311 plcllo(
i) = min(plo(
i),plcllo(
i))
312 plclup(
i) = max(pup(
i),plclup(
i))
313 nocond(
i) = plclup(
i).le.pup(
i)
319 pfeed(
i) = (pup(
i)*(plo(
i)-plcllo(
i))+
320 : plo(
i)*(plclup(
i)-pup(
i)))/
321 : (plo(
i)-plcllo(
i)+plclup(
i)-pup(
i))
326 o ,wghti,nk,tnk,thnk,qnk,qsnk,unk,vnk,plclfeed)
328 posit(
i) = (sign(1.,plclfeed(
i)-pfeed(
i))+1.)*0.5
329 if (plclfeed(
i) .eq. pfeed(
i)) posit(
i) = 1.
334 pup(
i) = posit(
i)*pfeed(
i) + (1.-posit(
i))*pup(
i)
335 plo(
i) = (1.-posit(
i))*pfeed(
i) + posit(
i)*plo(
i)
336 plclup(
i) = posit(
i)*plclfeed(
i) + (1.-posit(
i))*plclup(
i)
337 plcllo(
i) = (1.-posit(
i))*plclfeed(
i) + posit(
i)*plcllo(
i)
342 plcl(
i) = plclfeed(
i)
347 hnk(
i)=gz(
i,1)+cpnk(
i)*tnk(
i)
355 if( ( ( tnk(
i).lt.250.0 )
356 & .or.( qnk(
i).le.0.0 ) )
358 & ( iflag(
i).eq.0) ) iflag(
i)=7
389 if( ph(
i,
k).lt.plcl(
i) ) icb(
i)=min(icb(
i),
k)
400 if((icb(
i).eq.
nlm).and.(iflag(
i).eq.0))iflag(
i)=9
412 if (iflag(
i).lt.7) icbmax=max(icbmax,icb(
i))
418 SUBROUTINE cv3_undilute1(len,nd,t,qs,gz,plcl,p,icb,tnk,qnk,gznk
435 #include "cvthermo.h"
436 #include "cv3param.h"
441 real t(len,nd), qs(len,nd), gz(len,nd)
442 real tnk(len), qnk(len), gznk(len)
447 real tp(len,nd), tvp(len,nd), clw(len,nd)
451 integer icb1(len), icbs(len), icbsmax2
452 real tg, qg, alv, s, ahg, tc, denom, es, rg
453 real ah0(len),
cpp(len)
454 real ticb(len), gzicb(len)
469 ah0(
i)=(
cpd*(1.-qnk(
i))+
cl*qnk(
i))*tnk(
i)
478 icb1(
i)=max(icb(
i),2)
479 icb1(
i)=min(icb(
i),
nl)
483 if (plcl(
i).lt.p(
i,icb1(
i)))
then
484 icbs(
i)=min(icbs(
i)+1,
nl)
490 gzicb(
i)=gz(
i,icbs(
i))
491 qsicb(
i)=qs(
i,icbs(
i))
499 icbsmax2=max(icbsmax2,icbs(
i))
516 tp(
i,
k)=tnk(
i)-(gz(
i,
k)-gznk(
i))*cpinv(
i)
534 : +alv*alv*qg/(
rrv*ticb(
i)*ticb(
i))
545 es=6.112*exp(17.67*tc/denom)
550 qg=
eps*es/(p(
i,icbs(
i))-es*(1.-
eps))
566 es=6.112*exp(17.67*tc/denom)
571 qg=
eps*es/(p(
i,icbs(
i))-es*(1.-
eps))
580 tp(
i,icbs(
i))=(ah0(
i)-gz(
i,icbs(
i))-alv*qg)
585 clw(
i,icbs(
i))=qnk(
i)-qg
586 clw(
i,icbs(
i))=max(0.0,clw(
i,icbs(
i)))
591 tvp(
i,icbs(
i))=tp(
i,icbs(
i))*(1.+qg/
eps-qnk(
i))
618 ticb(
i)=t(
i,icb(
i)+1)
619 gzicb(
i)=gz(
i,icb(
i)+1)
620 qsicb(
i)=qs(
i,icb(
i)+1)
633 : +alv*alv*qg/(
rrv*ticb(
i)*ticb(
i))
644 es=6.112*exp(17.67*tc/denom)
649 qg=
eps*es/(p(
i,icb(
i)+1)-es*(1.-
eps))
665 es=6.112*exp(17.67*tc/denom)
670 qg=
eps*es/(p(
i,icb(
i)+1)-es*(1.-
eps))
679 tp(
i,icb(
i)+1)=(ah0(
i)-gz(
i,icb(
i)+1)-alv*qg)
684 clw(
i,icb(
i)+1)=qnk(
i)-qg
685 clw(
i,icb(
i)+1)=max(0.0,clw(
i,icb(
i)+1))
690 tvp(
i,icb(
i)+1)=tp(
i,icb(
i)+1)*(1.+qg/
eps-qnk(
i))
698 o pbase,buoybase,iflag,sig,w0)
716 #include "cv3param.h"
721 real plcl(len), p(len,nd)
722 real th(len,nd), tv(len,nd), tvp(len,nd)
726 real pbase(len), buoybase(len)
730 real sig(len,nd), w0(len,nd)
734 real tvpbase, tvbase, tdif, ath, ath1
741 tvpbase = tvp(
i,icb(
i))*(pbase(
i)-p(
i,icb(
i)+1))
742 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
743 : + tvp(
i,icb(
i)+1)*(p(
i,icb(
i))-pbase(
i))
744 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
745 tvbase = tv(
i,icb(
i))*(pbase(
i)-p(
i,icb(
i)+1))
746 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
747 : + tv(
i,icb(
i)+1)*(p(
i,icb(
i))-pbase(
i))
748 : /(p(
i,icb(
i))-p(
i,icb(
i)+1))
749 buoybase(
i) = tvpbase - tvbase
788 if (tdif.lt.
dtcrit .or. ath.gt.ath1)
then
790 sig(
i,
k) = amax1(sig(
i,
k),0.0)
805 : ,iflag1,nk1,icb1,icbs1
806 : ,plcl1,tnk1,qnk1,gznk1,pbase1,buoybase1
807 : ,t1,q1,qs1,u1,v1,gz1,th1
809 : ,h1,lv1,cpn1,p1,ph1,tv1,tp1,tvp1,clw1
812 o ,plcl,tnk,qnk,gznk,pbase,buoybase
815 o ,h,lv,cpn,p,ph,tv,tp,tvp,clw
819 #include "cv3param.h"
823 integer len,ncum,nd,ntra,nloc
824 integer iflag1(len),nk1(len),icb1(len),icbs1(len)
825 real plcl1(len),tnk1(len),qnk1(len),gznk1(len)
826 real pbase1(len),buoybase1(len)
827 real t1(len,nd),q1(len,nd),qs1(len,nd),u1(len,nd),v1(len,nd)
828 real gz1(len,nd),h1(len,nd),lv1(len,nd),cpn1(len,nd)
829 real p1(len,nd),ph1(len,nd+1),tv1(len,nd),tp1(len,nd)
830 real tvp1(len,nd),clw1(len,nd)
832 real sig1(len,nd), w01(len,nd)
833 real tra1(len,nd,ntra)
837 integer iflag(nloc),nk(nloc),icb(nloc),icbs(nloc)
838 real plcl(nloc),tnk(nloc),qnk(nloc),gznk(nloc)
839 real pbase(nloc),buoybase(nloc)
840 real t(nloc,nd),
q(nloc,nd),qs(nloc,nd),
u(nloc,nd),
v(nloc,nd)
841 real gz(nloc,nd),h(nloc,nd),lv(nloc,nd),cpn(nloc,nd)
842 real p(nloc,nd),ph(nloc,nd+1),tv(nloc,nd),tp(nloc,nd)
843 real tvp(nloc,nd),clw(nloc,nd)
845 real sig(nloc,nd), w0(nloc,nd)
846 real tra(nloc,nd,ntra)
851 CHARACTER (LEN=20) :: modname=
'cv3_compress'
852 CHARACTER (LEN=80) :: abort_message
857 if(iflag1(
i).eq.0)
then
895 write(
lunout,*)
'strange! nn not equal to ncum: ',nn,ncum
902 if(iflag1(
i).eq.0)
then
905 buoybase(nn)=buoybase1(
i)
921 : ,tnk,qnk,gznk,hnk,t,
q,qs,gz
922 : ,p,h,tv,lv,pbase,buoybase,plcl
923 o ,inb,tp,tvp,clw,hp,ep,sigp,buoy)
944 #include "cvthermo.h"
945 #include "cv3param.h"
949 integer ncum, nd, nloc
950 integer icb(nloc), icbs(nloc), nk(nloc)
951 real t(nloc,nd),
q(nloc,nd), qs(nloc,nd), gz(nloc,nd)
953 real tnk(nloc), qnk(nloc), gznk(nloc)
955 real lv(nloc,nd), tv(nloc,nd), h(nloc,nd)
956 real pbase(nloc), buoybase(nloc), plcl(nloc)
960 real tp(nloc,nd), tvp(nloc,nd), clw(nloc,nd)
961 real ep(nloc,nd), sigp(nloc,nd), hp(nloc,nd)
966 real tg,qg,ahg,alv,s,tc,es,denom,rg,tca,elacrit
967 real by, defrac, pden
968 real ah0(nloc), cape(nloc), capem(nloc), byp(nloc)
994 ah0(
i)=(
cpd*(1.-qnk(
i))+
cl*qnk(
i))*tnk(
i)
1006 if(
k.ge.(icbs(
i)+1))
then
1016 : +alv*alv*qg/(
rrv*t(
i,
k)*t(
i,
k))
1020 tg=tg+s*(ah0(
i)-ahg)
1025 denom=max(denom,1.0)
1027 es=6.112*exp(17.67*tc/denom)
1039 tg=tg+s*(ah0(
i)-ahg)
1044 denom=max(denom,1.0)
1046 es=6.112*exp(17.67*tc/denom)
1065 clw(
i,
k)=max(0.0,clw(
i,
k))
1069 tvp(
i,
k)=tp(
i,
k)*(1.+qg/
eps-qnk(
i))
1080 if(flag_epkeorig.ne.1)
THEN
1085 ep(
i,
k)=max(ep(
i,
k),0.0)
1093 if(
k.ge.(nk(
i)+1))
then
1100 elacrit=max(elacrit,0.0)
1101 ep(
i,
k)=1.0-elacrit/max(clw(
i,
k),1.0e-8)
1102 ep(
i,
k)=max(ep(
i,
k),0.0 )
1145 buoy(
i,
k)=tvp(
i,
k)-tv(
i,
k)
1154 if((
k.ge.icb(
i)).and.(
k.le.
nl).and.(p(
i,
k).ge.pbase(
i)))
then
1155 buoy(
i,
k)=buoybase(
i)
1159 buoy(
i,icb(
i))=buoybase(
i)
1180 if (
k .ge. icb(
i) .and. buoy(
i,
k) .gt. 0.)
then
1181 iposit(
i) = min(iposit(
i),
k)
1187 if (iposit(
i) .eq.
nl)
then
1194 if ((
k.ge.iposit(
i)).and.(buoy(
i,
k).lt.
dtovsh))
then
1195 inb(
i)=min(inb(
i),
k)
1304 if((
k.ge.icb(
i)).and.(
k.le.inb(
i)))
then
1314 : ,pbase,p,ph,tv,buoy
1315 o ,sig,w0,cape,
m,iflag)
1324 #include "cvthermo.h"
1325 #include "cv3param.h"
1328 integer ncum, nd, nloc
1329 integer icb(nloc), inb(nloc)
1331 real p(nloc,nd), ph(nloc,nd+1)
1332 real tv(nloc,nd), buoy(nloc,nd)
1335 real sig(nloc,nd), w0(nloc,nd)
1343 integer i,
j,
k, icbmax
1344 real deltap, fac, w, amu
1345 real dtmin(nloc,nd), sigold(nloc,nd)
1367 if ((inb(
i).lt.(
nl-1)).and.(
k.ge.(inb(
i)+1)))
then
1369 : +2.*
alpha*buoy(
i,inb(
i))*abs(buoy(
i,inb(
i)))
1370 sig(
i,
k)=amax1(sig(
i,
k),0.0)
1380 icbmax=max(icbmax,icb(
i))
1387 if (
k.le.icb(
i))
then
1389 sig(
i,
k)=max(sig(
i,
k),0.0)
1417 if (sig(
i,nd).lt.1.5.or.sig(
i,nd).gt.12.0)
then
1445 if ( (
k.ge.(icb(
i)+1)).and.(
k.le.inb(
i)).and.
1446 : (
j.ge.icb(
i)).and.(
j.le.(
k-1)) )
then
1447 dtmin(
i,
k)=amin1(dtmin(
i,
k),buoy(
i,
j))
1458 if ((
k.ge.(icb(
i)+1)).and.(
k.le.inb(
i)))
then
1460 deltap = min(pbase(
i),ph(
i,
k-1))-min(pbase(
i),ph(
i,
k))
1461 cape(
i)=cape(
i)+
rrd*buoy(
i,
k-1)*deltap/p(
i,
k-1)
1462 cape(
i)=amax1(0.0,cape(
i))
1463 sigold(
i,
k)=sig(
i,
k)
1471 sig(
i,
k)=max(sig(
i,
k),0.0)
1472 sig(
i,
k)=amin1(sig(
i,
k),0.01)
1475 amu=0.5*(sig(
i,
k)+sigold(
i,
k))*w
1476 m(
i,
k)=amu*0.007*p(
i,
k)*(ph(
i,
k)-ph(
i,
k+1))/tv(
i,
k)
1484 w0(
i,icb(
i))=0.5*w0(
i,icb(
i)+1)
1485 m(
i,icb(
i))=0.5*
m(
i,icb(
i)+1)
1486 : *(ph(
i,icb(
i))-ph(
i,icb(
i)+1))
1487 : /(ph(
i,icb(
i)+1)-ph(
i,icb(
i)+2))
1488 sig(
i,icb(
i))=sig(
i,icb(
i)+1)
1489 sig(
i,icb(
i)-1)=sig(
i,icb(
i))
1557 : ,ph,t,rr,rs,
u,
v,tra,h,lv,qnk
1558 : ,unk,vnk,hp,tv,tvp,ep,clw,
m,sig
1559 : ,ment,qent,uent,vent,nent,sij,elij,ments,qents,traent)
1567 #include "cvthermo.h"
1568 #include "cv3param.h"
1571 integer ncum, nd, na, ntra, nloc
1572 integer icb(nloc), inb(nloc), nk(nloc)
1574 real qnk(nloc),unk(nloc),vnk(nloc)
1576 real t(nloc,nd), rr(nloc,nd), rs(nloc,nd)
1577 real u(nloc,nd),
v(nloc,nd)
1578 real tra(nloc,nd,ntra)
1579 real lv(nloc,na), h(nloc,na), hp(nloc,na)
1580 real tv(nloc,na), tvp(nloc,na), ep(nloc,na), clw(nloc,na)
1584 real ment(nloc,na,na), qent(nloc,na,na)
1585 real uent(nloc,na,na), vent(nloc,na,na)
1586 real sij(nloc,na,na), elij(nloc,na,na)
1587 real traent(nloc,nd,nd,ntra)
1588 real ments(nloc,nd,nd), qents(nloc,nd,nd)
1589 real sigij(nloc,nd,nd)
1590 integer nent(nloc,nd)
1595 real rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
1596 real alt, smid, sjmin, sjmax, delp, delm
1597 real asij(nloc), smax(nloc), scrit(nloc)
1598 real asum(nloc,nd),bsum(nloc,nd),csum(nloc,nd)
1632 ment(1:ncum,1:nd,1:nd)=0.0
1633 sij(1:ncum,1:nd,1:nd)=0.0
1656 if( (
i.ge.icb(il)).and.(
i.le.inb(il)).and.
1657 : (
j.ge.(icb(il)-1)).and.(
j.le.inb(il)))
then
1659 rti=qnk(il)-ep(il,
i)*clw(il,
i)
1660 bf2=1.+lv(il,
j)*lv(il,
j)*rs(il,
j)/(
rrv*t(il,
j)*t(il,
j)*
cpd)
1661 anum=h(il,
j)-hp(il,
i)+(
cpv-
cpd)*t(il,
j)*(rti-rr(il,
j))
1662 denom=h(il,
i)-hp(il,
i)+(
cpd-
cpv)*(rr(il,
i)-rti)*t(il,
j)
1664 if(abs(dei).lt.0.01)dei=0.01
1665 sij(il,
i,
j)=anum/dei
1667 altem=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti-rs(il,
j)
1669 cwat=clw(il,
j)*(1.-ep(il,
j))
1671 if((stemp.lt.0.0.or.stemp.gt.1.0.or.altem.gt.cwat)
1673 anum=anum-lv(il,
j)*(rti-rs(il,
j)-cwat*bf2)
1674 denom=denom+lv(il,
j)*(rr(il,
i)-rti)
1675 if(abs(denom).lt.0.01)denom=0.01
1676 sij(il,
i,
j)=anum/denom
1677 altem=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti-rs(il,
j)
1678 altem=altem-(bf2-1.)*cwat
1680 if(sij(il,
i,
j).gt.0.0.and.sij(il,
i,
j).lt.0.95)
then
1681 qent(il,
i,
j)=sij(il,
i,
j)*rr(il,
i)+(1.-sij(il,
i,
j))*rti
1682 uent(il,
i,
j)=sij(il,
i,
j)*
u(il,
i)+(1.-sij(il,
i,
j))*unk(il)
1683 vent(il,
i,
j)=sij(il,
i,
j)*
v(il,
i)+(1.-sij(il,
i,
j))*vnk(il)
1689 elij(il,
i,
j)=max(0.0,elij(il,
i,
j))
1690 ment(il,
i,
j)=
m(il,
i)/(1.-sij(il,
i,
j))
1691 nent(il,
i)=nent(il,
i)+1
1693 sij(il,
i,
j)=max(0.0,sij(il,
i,
j))
1694 sij(il,
i,
j)=amin1(1.0,sij(il,
i,
j))
1719 if ((
i.ge.icb(il)).and.(
i.le.inb(il)).and.(nent(il,
i).eq.0))
then
1721 ment(il,
i,
i)=
m(il,
i)
1722 qent(il,
i,
i)=qnk(il)-ep(il,
i)*clw(il,
i)
1723 uent(il,
i,
i)=unk(il)
1724 vent(il,
i,
i)=vnk(il)
1725 elij(il,
i,
i)=clw(il,
i)
1745 if ((
j.ge.(icb(il)-1)).and.(
j.le.inb(il))
1746 : .and.(
i.ge.icb(il)).and.(
i.le.inb(il)))
then
1747 sigij(il,
i,
j)=sij(il,
i,
j)
1761 call
zilch(asum,nloc*nd)
1762 call
zilch(csum,nloc*nd)
1763 call
zilch(csum,nloc*nd)
1773 if (
i.ge.icb(il) .and.
i.le.inb(il) ) num1=num1+1
1775 if (num1.le.0) goto 789
1779 if (
i.ge.icb(il) .and.
i.le.inb(il) )
then
1780 lwork(il)=(nent(il,
i).ne.0)
1781 qp=qnk(il)-ep(il,
i)*clw(il,
i)
1782 anum=h(il,
i)-hp(il,
i)-lv(il,
i)*(qp-rs(il,
i))
1784 denom=h(il,
i)-hp(il,
i)+lv(il,
i)*(rr(il,
i)-qp)
1786 if(abs(denom).lt.0.01)denom=0.01
1787 scrit(il)=anum/denom
1788 alt=qp-rs(il,
i)+scrit(il)*(rr(il,
i)-qp)
1789 if(scrit(il).le.0.0.or.alt.le.0.0)scrit(il)=1.0
1799 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
1800 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
1801 : .and. lwork(il) ) num2=num2+1
1803 if (num2.le.0) goto 175
1806 if (
i.ge.icb(il) .and.
i.le.inb(il) .and.
1807 :
j.ge.(icb(il)-1) .and.
j.le.inb(il)
1808 : .and. lwork(il) )
then
1810 if(sij(il,
i,
j).gt.1.0e-16.and.sij(il,
i,
j).lt.0.95)
then
1813 sjmax=max(sij(il,
i,
j+1),smax(il))
1814 sjmax=amin1(sjmax,scrit(il))
1815 smax(il)=max(sij(il,
i,
j),smax(il))
1816 sjmin=max(sij(il,
i,
j-1),smax(il))
1817 sjmin=amin1(sjmin,scrit(il))
1818 if(sij(il,
i,
j).lt.(smax(il)-1.0e-16))wgh=0.0
1819 smid=amin1(sij(il,
i,
j),scrit(il))
1821 sjmax=max(sij(il,
i,
j+1),scrit(il))
1822 smid=max(sij(il,
i,
j),scrit(il))
1824 if(
j.gt.1)sjmin=sij(il,
i,
j-1)
1825 sjmin=max(sjmin,scrit(il))
1827 delp=abs(sjmax-smid)
1828 delm=abs(sjmin-smid)
1829 asij(il)=asij(il)+wgh*(delp+delm)
1830 ment(il,
i,
j)=ment(il,
i,
j)*(delp+delm)*wgh
1838 if (
i.ge.icb(il).and.
i.le.inb(il).and.lwork(il))
then
1839 asij(il)=max(1.0e-16,asij(il))
1840 asij(il)=1.0/asij(il)
1849 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1850 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1851 ment(il,
i,
j)=ment(il,
i,
j)*asij(il)
1858 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1859 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1860 asum(il,
i)=asum(il,
i)+ment(il,
i,
j)
1861 ment(il,
i,
j)=ment(il,
i,
j)*sig(il,
j)
1862 bsum(il,
i)=bsum(il,
i)+ment(il,
i,
j)
1868 if (
i.ge.icb(il).and.
i.le.inb(il).and.lwork(il))
then
1869 bsum(il,
i)=max(bsum(il,
i),1.0e-16)
1870 bsum(il,
i)=1.0/bsum(il,
i)
1876 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1877 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1878 ment(il,
i,
j)=ment(il,
i,
j)*asum(il,
i)*bsum(il,
i)
1885 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1886 : .and.
j.ge.(icb(il)-1) .and.
j.le.inb(il) )
then
1887 csum(il,
i)=csum(il,
i)+ment(il,
i,
j)
1893 if (
i.ge.icb(il) .and.
i.le.inb(il) .and. lwork(il)
1894 : .and. csum(il,
i).lt.
m(il,
i) )
then
1896 ment(il,
i,
i)=
m(il,
i)
1897 qent(il,
i,
i)=qnk(il)-ep(il,
i)*clw(il,
i)
1898 uent(il,
i,
i)=unk(il)
1899 vent(il,
i,
i)=vnk(il)
1900 elij(il,
i,
i)=clw(il,
i)
1917 call
zilch(zm,nloc*na)
1929 if(zm(il,
im).ne.0.)
then
1949 : ,t,rr,rs,gz,
u,
v,tra,p,ph
1950 : ,th,tv,lv,cpn,ep,sigp,clw
1951 : ,
m,ment,elij,delt,plcl,coef_clos
1952 o ,mp,rp,up,vp,trap,wt,water,evap,b,
sigd
1953 o ,wdtraina,wdtrainm)
1957 #include "cvthermo.h"
1958 #include "cv3param.h"
1962 integer ncum, nd, na, ntra, nloc
1963 integer icb(nloc), inb(nloc)
1964 real delt, plcl(nloc)
1965 real t(nloc,nd), rr(nloc,nd), rs(nloc,nd),gz(nloc,na)
1966 real u(nloc,nd),
v(nloc,nd)
1967 real tra(nloc,nd,ntra)
1968 real p(nloc,nd), ph(nloc,nd+1)
1969 real ep(nloc,na), sigp(nloc,na), clw(nloc,na)
1970 real th(nloc,na),tv(nloc,na),lv(nloc,na),cpn(nloc,na)
1971 real m(nloc,na), ment(nloc,na,na), elij(nloc,na,na)
1972 real coef_clos(nloc)
1978 real mp(nloc,na), rp(nloc,na), up(nloc,na), vp(nloc,na)
1979 real water(nloc,na), evap(nloc,na), wt(nloc,na)
1980 real trap(nloc,na,ntra)
1981 real b(nloc,na),
sigd(nloc)
1986 real wdtraina(nloc,na), wdtrainm(nloc,na)
1989 integer i,
j,
k,il,num1,ndp1
1991 real awat, afac, afac1, afac2, bfac
1992 real pr1, pr2, sigt, b6, c6, revap, delth
1993 real amfac, amp2, xf, tf, fac2, ur, sru, fac, d, af, bf
1997 real h(nloc,na),hm(nloc,na)
1999 logical lwork(nloc),mplus(nloc)
2019 lvcp(il,
i)=lv(il,
i)/cpn(il,
i)
2045 lwork(il)= ep(il,inb(il)) .ge. 0.0001
2064 if (
i.le.inb(il) .and. lwork(il) ) num1=num1+1
2066 if (num1.le.0) goto 400
2068 call
zilch(wdtrain,ncum)
2078 if (
i.le.inb(il) .and. lwork(il))
then
2079 if (cvflag_grav)
then
2080 wdtrain(il)=grav*ep(il,
i)*
m(il,
i)*clw(il,
i)
2081 wdtraina(il,
i) = wdtrain(il)/grav
2083 wdtrain(il)=10.0*ep(il,
i)*
m(il,
i)*clw(il,
i)
2084 wdtraina(il,
i) = wdtrain(il)/10.
2092 if (
i.le.inb(il) .and. lwork(il))
then
2093 awat=elij(il,
j,
i)-(1.-ep(il,
i))*clw(il,
i)
2095 if (cvflag_grav)
then
2096 wdtrain(il)=wdtrain(il)+grav*awat*ment(il,
j,
i)
2097 wdtrainm(il,
i) = wdtrain(il)/grav-wdtraina(il,
i)
2099 wdtrain(il)=wdtrain(il)+10.0*awat*ment(il,
j,
i)
2100 wdtrainm(il,
i) = wdtrain(il)/10.-wdtraina(il,
i)
2113 if (
i.le.inb(il) .and. lwork(il))
then
2117 if(
i.lt.inb(il))
then
2119 : +(
cpd*(t(il,
i+1)-t(il,
i))+gz(il,
i+1)-gz(il,
i))/lv(il,
i)
2120 rp(il,
i)=0.5*(rp(il,
i)+rr(il,
i))
2122 rp(il,
i)=max(rp(il,
i),0.0)
2123 rp(il,
i)=amin1(rp(il,
i),rs(il,
i))
2124 rp(il,inb(il))=rr(il,inb(il))
2127 afac=p(il,1)*(rs(il,1)-rp(il,1))/(1.0e4+2000.0*p(il,1)*rs(il,1))
2130 : +(
cpd*(t(il,
i)-t(il,
i-1))+gz(il,
i)-gz(il,
i-1))/lv(il,
i)
2131 rp(il,
i-1)=0.5*(rp(il,
i-1)+rr(il,
i-1))
2132 rp(il,
i-1)=amin1(rp(il,
i-1),rs(il,
i-1))
2133 rp(il,
i-1)=max(rp(il,
i-1),0.0)
2134 afac1=p(il,
i)*(rs(il,
i)-rp(il,
i))/(1.0e4+2000.0*p(il,
i)*rs(il,
i))
2135 afac2=p(il,
i-1)*(rs(il,
i-1)-rp(il,
i-1))
2136 : /(1.0e4+2000.0*p(il,
i-1)*rs(il,
i-1))
2137 afac=0.5*(afac1+afac2)
2139 if(
i.eq.inb(il))afac=0.0
2141 bfac=1./(
sigd(il)*wt(il,
i))
2153 pr1=(plcl(il)-ph(il,
i+1))/(ph(il,
i)-ph(il,
i+1))
2154 pr1=max(0.,min(1.,pr1))
2155 pr2=(ph(il,
i)-plcl(il))/(ph(il,
i)-ph(il,
i+1))
2156 pr2=max(0.,min(1.,pr2))
2157 sigt=sigp(il,
i)*pr1+pr2
2171 b6=bfac*50.*
sigd(il)*(ph(il,
i)-ph(il,
i+1))*sigt*afac
2172 c6=water(il,
i+1)+bfac*wdtrain(il)
2173 : -50.*
sigd(il)*bfac*(ph(il,
i)-ph(il,
i+1))*evap(il,
i+1)
2175 revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
2181 water(il,
i)=revap*revap
2201 : (wdtrain(il)+
sigd(il)*wt(il,
i)*(water(il,
i+1)-water(il,
i)))
2202 : /(
sigd(il)*(ph(il,
i)-ph(il,
i+1))*100.)
2213 if (
i.le.inb(il) .and. lwork(il) .and.
i.ne.1)
then
2215 tevap(il)=max(0.0,evap(il,
i))
2216 delth=max(0.001,(th(il,
i)-th(il,
i-1)))
2217 if (cvflag_grav)
then
2218 mp(il,
i)=100.*
ginv*lvcp(il,
i)*
sigd(il)*tevap(il)
2219 : *(p(il,
i-1)-p(il,
i))/delth
2221 mp(il,
i)=10.*lvcp(il,
i)*
sigd(il)*tevap(il)
2222 : *(p(il,
i-1)-p(il,
i))/delth
2234 if (
i.le.inb(il) .and. lwork(il) .and.
i.ne.1)
then
2236 amfac=
sigd(il)*
sigd(il)*70.0*ph(il,
i)*(p(il,
i-1)-p(il,
i))
2237 : *(th(il,
i)-th(il,
i-1))/(tv(il,
i)*th(il,
i))
2238 amp2=abs(mp(il,
i+1)*mp(il,
i+1)-mp(il,
i)*mp(il,
i))
2240 if(amp2.gt.(0.1*amfac))
then
2242 tf=b(il,
i)-5.0*(th(il,
i)-th(il,
i-1))*t(il,
i)
2243 : /(lvcp(il,
i)*
sigd(il)*th(il,
i))
2244 af=xf*tf+mp(il,
i+1)*mp(il,
i+1)*tinv
2245 bf=2.*(tinv*mp(il,
i+1))**3+tinv*mp(il,
i+1)*xf*tf
2246 : +50.*(p(il,
i-1)-p(il,
i))*xf*tevap(il)
2248 if(bf.lt.0.0)fac2=-1.0
2250 ur=0.25*bf*bf-af*af*af*tinv*tinv*tinv
2254 if((0.5*bf-sru).lt.0.0)fac=-1.0
2255 mp(il,
i)=mp(il,
i+1)*tinv+(0.5*bf+sru)**tinv
2256 : +fac*(abs(0.5*bf-sru))**tinv
2258 d=atan(2.*sqrt(-ur)/(bf+1.0e-28))
2259 if(fac2.lt.0.0)d=3.14159-d
2260 mp(il,
i)=mp(il,
i+1)*tinv+2.*sqrt(af*tinv)*cos(d*tinv)
2262 mp(il,
i)=max(0.0,mp(il,
i))
2264 if (cvflag_grav)
then
2268 b(il,
i-1)=b(il,
i)+100.0*(p(il,
i-1)-p(il,
i))*tevap(il)
2269 2 /(mp(il,
i)+
sigd(il)*0.1)
2270 3 -10.0*(th(il,
i)-th(il,
i-1))*t(il,
i)/(lvcp(il,
i)
2271 : *
sigd(il)*th(il,
i))
2273 b(il,
i-1)=b(il,
i)+100.0*(p(il,
i-1)-p(il,
i))*tevap(il)
2274 2 /(mp(il,
i)+
sigd(il)*0.1)
2275 3 -10.0*(th(il,
i)-th(il,
i-1))*t(il,
i)/(lvcp(il,
i)
2276 : *
sigd(il)*th(il,
i))
2278 b(il,
i-1)=max(b(il,
i-1),0.0)
2284 ampmax=2.0*(ph(il,
i)-ph(il,
i+1))*delti
2285 amp2=2.0*(ph(il,
i-1)-ph(il,
i))*delti
2286 ampmax=min(ampmax,amp2)
2287 mp(il,
i)=min(mp(il,
i),ampmax)
2296 if(ph(il,
i) .gt. 0.9*plcl(il))
then
2297 mp(il,
i) = mp(il,
i)*(ph(il,1)-ph(il,
i))/
2298 $ (ph(il,1)-0.9*plcl(il))
2308 if (
i.lt.inb(il) .and. lwork(il))
then
2309 mplus(il) = mp(il,
i).gt.mp(il,
i+1)
2314 if (
i.lt.inb(il) .and. lwork(il))
then
2320 if (cvflag_grav)
then
2321 rp(il,
i)=rp(il,
i+1)*mp(il,
i+1)+rr(il,
i)*(mp(il,
i)-mp(il,
i+1))
2322 : +100.*
ginv*0.5*
sigd(il)*(ph(il,
i)-ph(il,
i+1))
2323 : *(evap(il,
i+1)+evap(il,
i))
2325 rp(il,
i)=rp(il,
i+1)*mp(il,
i+1)+rr(il,
i)*(mp(il,
i)-mp(il,
i+1))
2326 : +5.*
sigd(il)*(ph(il,
i)-ph(il,
i+1))
2327 : *(evap(il,
i+1)+evap(il,
i))
2329 rp(il,
i)=rp(il,
i)/mp(il,
i)
2330 up(il,
i)=up(il,
i+1)*mp(il,
i+1)+
u(il,
i)*(mp(il,
i)-mp(il,
i+1))
2331 up(il,
i)=up(il,
i)/mp(il,
i)
2332 vp(il,
i)=vp(il,
i+1)*mp(il,
i+1)+
v(il,
i)*(mp(il,
i)-mp(il,
i+1))
2333 vp(il,
i)=vp(il,
i)/mp(il,
i)
2337 if(mp(il,
i+1).gt.1.0e-16)
then
2338 if (cvflag_grav)
then
2340 : +100.*
ginv*0.5*
sigd(il)*(ph(il,
i)-ph(il,
i+1))
2341 : *(evap(il,
i+1)+evap(il,
i))/mp(il,
i+1)
2344 : +5.*
sigd(il)*(ph(il,
i)-ph(il,
i+1))
2345 : *(evap(il,
i+1)+evap(il,
i))/mp(il,
i+1)
2352 rp(il,
i)=amin1(rp(il,
i),rs(il,
i))
2353 rp(il,
i)=max(rp(il,
i),0.0)
2392 : ,t,rr,t_wake,rr_wake,s_wake,
u,
v,tra
2393 : ,gz,p,ph,h,hp,lv,cpn,th,th_wake
2394 : ,ep,clw,
m,tp,mp,rp,up,vp,trap
2395 : ,wt,water,evap,b,
sigd
2396 : ,ment,qent,hent,iflag_mix,uent,vent
2397 : ,nent,elij,traent,sig
2399 : ,iflag,precip,vprecip,ft,fr,fu,fv,ftra
2400 : ,cbmf,upwd,dnwd,dnwd0,ma,mip
2401 : ,tls,tps,qcondc,wd
2406 #include "cvthermo.h"
2407 #include "cv3param.h"
2409 #include "conema3.h"
2414 integer ncum,nd,na,ntra,nloc
2415 integer icb(nloc), inb(nloc)
2417 real t(nloc,nd), rr(nloc,nd),
u(nloc,nd),
v(nloc,nd)
2418 real t_wake(nloc,nd), rr_wake(nloc,nd)
2420 real tra(nloc,nd,ntra), sig(nloc,nd)
2421 real gz(nloc,na), ph(nloc,nd+1), h(nloc,na), hp(nloc,na)
2422 real th(nloc,na), p(nloc,nd), tp(nloc,na)
2423 real lv(nloc,na), cpn(nloc,na), ep(nloc,na), clw(nloc,na)
2424 real m(nloc,na), mp(nloc,na), rp(nloc,na), up(nloc,na)
2425 real vp(nloc,na), wt(nloc,nd), trap(nloc,nd,ntra)
2426 real water(nloc,na), evap(nloc,na), b(nloc,na),
sigd(nloc)
2427 real ment(nloc,na,na), qent(nloc,na,na), uent(nloc,na,na)
2428 real hent(nloc,na,na)
2430 real vent(nloc,na,na), elij(nloc,na,na)
2431 integer nent(nloc,nd)
2432 real traent(nloc,na,na,ntra)
2433 real tv(nloc,nd), tvp(nloc,nd), wghti(nloc,nd)
2440 real ft(nloc,nd), fr(nloc,nd), fu(nloc,nd), fv(nloc,nd)
2441 real ftd(nloc,nd), fqd(nloc,nd)
2442 real ftra(nloc,nd,ntra)
2443 real upwd(nloc,nd), dnwd(nloc,nd), ma(nloc,nd)
2444 real dnwd0(nloc,nd), mip(nloc,nd)
2445 real vprecip(nloc,nd+1)
2446 real tls(nloc,nd), tps(nloc,nd)
2447 real qcondc(nloc,nd)
2452 integer i,
k,il,
n,
j,num1
2454 real ax, bx, cx, dx, ex
2455 real cpinv, rdcp, dpinv
2457 real lvcp(nloc,na), mke(nloc,na)
2458 real am(nloc), work(nloc), ad(nloc), amp1(nloc)
2460 real up1(nloc,nd,nd), dn1(nloc,nd,nd)
2461 real asum(nloc), bsum(nloc), csum(nloc), dsum(nloc)
2462 real esum(nloc), fsum(nloc), gsum(nloc), hsum(nloc)
2463 real th_wake(nloc,nd)
2464 real alpha_qpos(nloc),alpha_qpos1(nloc)
2465 real qcond(nloc,nd), nqcond(nloc,nd), wa(nloc,nd)
2466 real siga(nloc,nd), sax(nloc,nd), mac(nloc,nd)
2481 vprecip(il,nd+1)=0.0
2514 lvcp(il,
i)=lv(il,
i)/cpn(il,
i)
2523 if(ep(il,inb(il)).ge.0.0001 .and. iflag(il) .le. 1)
then
2524 if (cvflag_grav)
then
2525 precip(il)=wt(il,1)*
sigd(il)*water(il,1)*86400.*1000.
2528 precip(il)=wt(il,1)*
sigd(il)*water(il,1)*8640.
2539 if(ep(il,inb(il)).ge.0.0001 .and.
i.le.inb(il)
2540 : .and. iflag(il) .le. 1)
then
2541 if (cvflag_grav)
then
2542 vprecip(il,
i) = wt(il,
i)*
sigd(il)*water(il,
i)/grav
2544 vprecip(il,
i) = wt(il,
i)*
sigd(il)*water(il,
i)/10.
2564 work(il)=1.0/(ph(il,1)-ph(il,2))
2570 if (
k.ge.icb(il))
then
2571 cbmf(il)=cbmf(il)+
m(il,
k)
2579 am(il)=cbmf(il)*wghti(il,1)
2583 if (iflag(il) .le. 1)
then
2587 ft(il,1)=-lvcp(il,1)*
sigd(il)*evap(il,1)
2589 if (cvflag_grav)
then
2590 ft(il,1)=ft(il,1)-0.009*grav*
sigd(il)*mp(il,2)
2591 : *t_wake(il,1)*b(il,1)*work(il)
2593 ft(il,1)=ft(il,1)-0.09*
sigd(il)*mp(il,2)
2594 : *t_wake(il,1)*b(il,1)*work(il)
2597 ft(il,1)=ft(il,1)+0.01*
sigd(il)*wt(il,1)*(
cl-
cpd)*water(il,2)
2598 : *(t_wake(il,2)-t_wake(il,1))*work(il)/cpn(il,1)
2600 ftd(il,1) = ft(il,1)
2602 if (cvflag_grav)
then
2603 if((0.01*grav*work(il)*am(il)).ge.delti)iflag(il)=1
2604 ft(il,1)=ft(il,1)+0.01*grav*work(il)*am(il)*(t(il,2)-t(il,1)
2605 : +(gz(il,2)-gz(il,1))/cpn(il,1))
2607 if((0.1*work(il)*am(il)).ge.delti)iflag(il)=1
2608 ft(il,1)=ft(il,1)+0.1*work(il)*am(il)*(t(il,2)-t(il,1)
2609 : +(gz(il,2)-gz(il,1))/cpn(il,1))
2616 IF (iflag_mix .gt. 0)
then
2621 if (
j.le.inb(il) .and. iflag(il) .le. 1)
then
2622 if (cvflag_grav)
then
2624 : +0.01*grav*work(il)*ment(il,
j,1)*(hent(il,
j,1)-h(il,1)
2625 : +t(il,1)*(
cpv-
cpd)*(rr(il,1)-qent(il,
j,1)))*cpinv
2628 : +0.1*work(il)*ment(il,
j,1)*(hent(il,
j,1)-h(il,1)
2629 : +t(il,1)*(
cpv-
cpd)*(rr(il,1)-qent(il,
j,1)))*cpinv
2639 if (iflag(il) .le. 1)
then
2640 if (cvflag_grav)
then
2642 fr(il,1)=0.01*grav*mp(il,2)*(rp(il,2)-rr_wake(il,1))*work(il)
2643 : +
sigd(il)*evap(il,1)
2648 fr(il,1)=fr(il,1)+0.01*grav*am(il)*(rr(il,2)-rr(il,1))*work(il)
2650 fu(il,1)=fu(il,1)+0.01*grav*work(il)*(mp(il,2)*(up(il,2)-
u(il,1))
2651 : +am(il)*(
u(il,2)-
u(il,1)))
2652 fv(il,1)=fv(il,1)+0.01*grav*work(il)*(mp(il,2)*(vp(il,2)-
v(il,1))
2653 : +am(il)*(
v(il,2)-
v(il,1)))
2655 fr(il,1)=0.1*mp(il,2)*(rp(il,2)-rr_wake(il,1))*work(il)
2656 : +
sigd(il)*evap(il,1)
2659 fr(il,1)=fr(il,1)+0.1*am(il)*(rr(il,2)-rr(il,1))*work(il)
2660 fu(il,1)=fu(il,1)+0.1*work(il)*(mp(il,2)*(up(il,2)-
u(il,1))
2661 : +am(il)*(
u(il,2)-
u(il,1)))
2662 fv(il,1)=fv(il,1)+0.1*work(il)*(mp(il,2)*(vp(il,2)-
v(il,1))
2663 : +am(il)*(
v(il,2)-
v(il,1)))
2687 if (
j.le.inb(il) .and. iflag(il) .le. 1)
then
2688 if (cvflag_grav)
then
2690 : +0.01*grav*work(il)*ment(il,
j,1)*(qent(il,
j,1)-rr(il,1))
2692 : +0.01*grav*work(il)*ment(il,
j,1)*(uent(il,
j,1)-
u(il,1))
2694 : +0.01*grav*work(il)*ment(il,
j,1)*(vent(il,
j,1)-
v(il,1))
2697 : +0.1*work(il)*ment(il,
j,1)*(qent(il,
j,1)-rr(il,1))
2699 : +0.1*work(il)*ment(il,
j,1)*(uent(il,
j,1)-
u(il,1))
2701 : +0.1*work(il)*ment(il,
j,1)*(vent(il,
j,1)-
v(il,1))
2737 if(
i.le.inb(il) .and. iflag(il) .le. 1)num1=num1+1
2739 if(num1.le.0)go to 500
2741 call
zilch(amp1,ncum)
2746 if(
i.ge.icb(il))
then
2747 if(
k.ge.
i+1.and.
k.le.(inb(il)+1))
then
2748 amp1(il)=amp1(il)+
m(il,
k)
2753 amp1(il)=amp1(il)+cbmf(il)*wghti(il,
k)
2762 if (
i.le.inb(il) .and.
j.le.(inb(il)+1))
then
2763 amp1(il)=amp1(il)+ment(il,
k,
j)
2772 if (
i.le.inb(il) .and.
j.le.inb(il))
then
2773 ad(il)=ad(il)+ment(il,
j,
k)
2780 if (
i.le.inb(il) .and. iflag(il) .le. 1)
then
2781 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2785 if (cvflag_grav)
then
2786 if((0.01*grav*dpinv*amp1(il)).ge.delti)iflag(il)=1
2788 if((0.1*dpinv*amp1(il)).ge.delti)iflag(il)=1
2793 ft(il,
i)= -
sigd(il)*lvcp(il,
i)*evap(il,
i)
2794 rat=cpn(il,
i-1)*cpinv
2796 if (cvflag_grav)
then
2797 ft(il,
i)=ft(il,
i)-0.009*grav*
sigd(il)
2798 : *(mp(il,
i+1)*t_wake(il,
i)*b(il,
i)
2799 : -mp(il,
i)*t_wake(il,
i-1)*rat*b(il,
i-1))*dpinv
2800 ft(il,
i)=ft(il,
i)+0.01*
sigd(il)*wt(il,
i)*(
cl-
cpd)*water(il,
i+1)
2801 : *(t_wake(il,
i+1)-t_wake(il,
i))*dpinv*cpinv
2806 ft(il,
i)=ft(il,
i)+0.01*grav*dpinv*(amp1(il)*(t(il,
i+1)-t(il,
i)
2807 : +(gz(il,
i+1)-gz(il,
i))*cpinv)
2808 : -ad(il)*(t(il,
i)-t(il,
i-1)+(gz(il,
i)-gz(il,
i-1))*cpinv))
2811 IF (iflag_mix .eq. 0)
then
2812 ft(il,
i)=ft(il,
i)+0.01*grav*dpinv*ment(il,
i,
i)*(hp(il,
i)-h(il,
i)
2813 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)-qent(il,
i,
i)))*cpinv
2817 ft(il,
i)=ft(il,
i)-0.09*
sigd(il)
2818 : *(mp(il,
i+1)*t_wake(il,
i)*b(il,
i)
2819 : -mp(il,
i)*t_wake(il,
i-1)*rat*b(il,
i-1))*dpinv
2820 ft(il,
i)=ft(il,
i)+0.01*
sigd(il)*wt(il,
i)*(
cl-
cpd)*water(il,
i+1)
2821 : *(t_wake(il,
i+1)-t_wake(il,
i))*dpinv*cpinv
2826 ft(il,
i)=ft(il,
i)+0.1*dpinv*(amp1(il)*(t(il,
i+1)-t(il,
i)
2827 : +(gz(il,
i+1)-gz(il,
i))*cpinv)
2828 : -ad(il)*(t(il,
i)-t(il,
i-1)+(gz(il,
i)-gz(il,
i-1))*cpinv))
2831 IF (iflag_mix .eq. 0)
then
2832 ft(il,
i)=ft(il,
i)+0.1*dpinv*ment(il,
i,
i)*(hp(il,
i)-h(il,
i)
2833 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)-qent(il,
i,
i)))*cpinv
2838 if (cvflag_grav)
then
2843 fr(il,
i)=
sigd(il)*evap(il,
i)
2844 : +0.01*grav*(mp(il,
i+1)*(rp(il,
i+1)-rr_wake(il,
i))
2845 : -mp(il,
i)*(rp(il,
i)-rr_wake(il,
i-1)))*dpinv
2848 fu(il,
i)=0.01*grav*(mp(il,
i+1)*(up(il,
i+1)-
u(il,
i))
2849 : -mp(il,
i)*(up(il,
i)-
u(il,
i-1)))*dpinv
2850 fv(il,
i)=0.01*grav*(mp(il,
i+1)*(vp(il,
i+1)-
v(il,
i))
2851 : -mp(il,
i)*(vp(il,
i)-
v(il,
i-1)))*dpinv
2854 fr(il,
i)=
sigd(il)*evap(il,
i)
2855 : +0.1*(mp(il,
i+1)*(rp(il,
i+1)-rr_wake(il,
i))
2856 : -mp(il,
i)*(rp(il,
i)-rr_wake(il,
i-1)))*dpinv
2859 fu(il,
i)=0.1*(mp(il,
i+1)*(up(il,
i+1)-
u(il,
i))
2860 : -mp(il,
i)*(up(il,
i)-
u(il,
i-1)))*dpinv
2861 fv(il,
i)=0.1*(mp(il,
i+1)*(vp(il,
i+1)-
v(il,
i))
2862 : -mp(il,
i)*(vp(il,
i)-
v(il,
i-1)))*dpinv
2866 if (cvflag_grav)
then
2867 fr(il,
i)=fr(il,
i)+0.01*grav*dpinv*(amp1(il)*(rr(il,
i+1)-rr(il,
i))
2868 : -ad(il)*(rr(il,
i)-rr(il,
i-1)))
2869 fu(il,
i)=fu(il,
i)+0.01*grav*dpinv*(amp1(il)*(
u(il,
i+1)-
u(il,
i))
2870 : -ad(il)*(
u(il,
i)-
u(il,
i-1)))
2871 fv(il,
i)=fv(il,
i)+0.01*grav*dpinv*(amp1(il)*(
v(il,
i+1)-
v(il,
i))
2872 : -ad(il)*(
v(il,
i)-
v(il,
i-1)))
2874 fr(il,
i)=fr(il,
i)+0.1*dpinv*(amp1(il)*(rr(il,
i+1)-rr(il,
i))
2875 : -ad(il)*(rr(il,
i)-rr(il,
i-1)))
2876 fu(il,
i)=fu(il,
i)+0.1*dpinv*(amp1(il)*(
u(il,
i+1)-
u(il,
i))
2877 : -ad(il)*(
u(il,
i)-
u(il,
i-1)))
2878 fv(il,
i)=fv(il,
i)+0.1*dpinv*(amp1(il)*(
v(il,
i+1)-
v(il,
i))
2879 : -ad(il)*(
v(il,
i)-
v(il,
i-1)))
2906 awat(il)=elij(il,
k,
i)-(1.-ep(il,
i))*clw(il,
i)
2907 awat(il)=max(awat(il),0.0)
2910 IF (iflag_mix .ne. 0)
then
2912 if (
i.le.inb(il) .and. iflag(il) .le. 1)
then
2913 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2915 if (cvflag_grav)
then
2917 : +0.01*grav*dpinv*ment(il,
k,
i)*(hent(il,
k,
i)-h(il,
i)
2918 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)+awat(il)-qent(il,
k,
i)))*cpinv
2924 : +0.1*dpinv*ment(il,
k,
i)*(hent(il,
k,
i)-h(il,
i)
2925 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)+awat(il)-qent(il,
k,
i)))*cpinv
2932 if (
i.le.inb(il) .and. iflag(il) .le. 1)
then
2933 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2935 if (cvflag_grav)
then
2937 : +0.01*grav*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-awat(il)-rr(il,
i))
2939 : +0.01*grav*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
2941 : +0.01*grav*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
2944 : +0.1*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-awat(il)-rr(il,
i))
2946 : +0.01*grav*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
2948 : +0.1*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
2952 qcond(il,
i)=qcond(il,
i)+(elij(il,
k,
i)-awat(il))
2953 nqcond(il,
i)=nqcond(il,
i)+1.
2978 IF (iflag_mix .ne. 0)
then
2980 if (
i.le.inb(il) .and.
k.le.inb(il)
2981 $ .and. iflag(il) .le. 1)
then
2982 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
2984 if (cvflag_grav)
then
2986 : +0.01*grav*dpinv*ment(il,
k,
i)*(hent(il,
k,
i)-h(il,
i)
2987 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)-qent(il,
k,
i)))*cpinv
2992 : +0.1*dpinv*ment(il,
k,
i)*(hent(il,
k,
i)-h(il,
i)
2993 : +t(il,
i)*(
cpv-
cpd)*(rr(il,
i)-qent(il,
k,
i)))*cpinv
3000 if (
i.le.inb(il) .and.
k.le.inb(il)
3001 $ .and. iflag(il) .le. 1)
then
3002 dpinv=1.0/(ph(il,
i)-ph(il,
i+1))
3005 if (cvflag_grav)
then
3007 : +0.01*grav*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-rr(il,
i))
3009 : +0.01*grav*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
3011 : +0.01*grav*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
3014 : +0.1*dpinv*ment(il,
k,
i)*(qent(il,
k,
i)-rr(il,
i))
3016 : +0.1*dpinv*ment(il,
k,
i)*(uent(il,
k,
i)-
u(il,
i))
3018 : +0.1*dpinv*ment(il,
k,
i)*(vent(il,
k,
i)-
v(il,
i))
3047 if (
k.le.inb(il) .and.
i.le.inb(il)
3048 $ .and. iflag(il) .le. 1)
then
3050 qcond(il,
i)=qcond(il,
i)+elij(il,
k,
i)
3051 nqcond(il,
i)=nqcond(il,
i)+1.
3058 if (
i.le.inb(il) .and. nent(il,
i).eq.0
3059 $ .and. iflag(il) .le. 1)
then
3060 qcond(il,
i)=qcond(il,
i)+(1.-ep(il,
i))*clw(il,
i)
3061 nqcond(il,
i)=nqcond(il,
i)+1.
3066 if (
i.le.inb(il) .and. nqcond(il,
i).ne.0
3067 $ .and. iflag(il) .le. 1)
then
3068 qcond(il,
i)=qcond(il,
i)/nqcond(il,
i)
3101 IF (iflag(il) .le. 1)
THEN
3102 if (cvflag_grav)
then
3103 ax=0.01*grav*ment(il,inb(il),inb(il))*(hp(il,inb(il))
3104 : -h(il,inb(il))+t(il,inb(il))*(
cpv-
cpd)
3105 : *(rr(il,inb(il))-qent(il,inb(il),inb(il))))
3106 : /(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
3107 ft(il,inb(il))=ft(il,inb(il))-ax
3108 ft(il,inb(il)-1)=ft(il,inb(il)-1)+ax*cpn(il,inb(il))
3109 : *(ph(il,inb(il))-ph(il,inb(il)+1))/(cpn(il,inb(il)-1)
3110 : *(ph(il,inb(il)-1)-ph(il,inb(il))))
3112 bx=0.01*grav*ment(il,inb(il),inb(il))*(qent(il,inb(il),inb(il))
3113 : -rr(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
3114 fr(il,inb(il))=fr(il,inb(il))-bx
3115 fr(il,inb(il)-1)=fr(il,inb(il)-1)
3116 : +bx*(ph(il,inb(il))-ph(il,inb(il)+1))
3117 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
3119 cx=0.01*grav*ment(il,inb(il),inb(il))*(uent(il,inb(il),inb(il))
3120 : -
u(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
3121 fu(il,inb(il))=fu(il,inb(il))-cx
3122 fu(il,inb(il)-1)=fu(il,inb(il)-1)
3123 : +cx*(ph(il,inb(il))-ph(il,inb(il)+1))
3124 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
3126 dx=0.01*grav*ment(il,inb(il),inb(il))*(vent(il,inb(il),inb(il))
3127 : -
v(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
3128 fv(il,inb(il))=fv(il,inb(il))-dx
3129 fv(il,inb(il)-1)=fv(il,inb(il)-1)
3130 : +dx*(ph(il,inb(il))-ph(il,inb(il)+1))
3131 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
3133 ax=0.1*ment(il,inb(il),inb(il))*(hp(il,inb(il))
3134 : -h(il,inb(il))+t(il,inb(il))*(
cpv-
cpd)
3135 : *(rr(il,inb(il))-qent(il,inb(il),inb(il))))
3136 : /(cpn(il,inb(il))*(ph(il,inb(il))-ph(il,inb(il)+1)))
3137 ft(il,inb(il))=ft(il,inb(il))-ax
3138 ft(il,inb(il)-1)=ft(il,inb(il)-1)+ax*cpn(il,inb(il))
3139 : *(ph(il,inb(il))-ph(il,inb(il)+1))/(cpn(il,inb(il)-1)
3140 : *(ph(il,inb(il)-1)-ph(il,inb(il))))
3142 bx=0.1*ment(il,inb(il),inb(il))*(qent(il,inb(il),inb(il))
3143 : -rr(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
3144 fr(il,inb(il))=fr(il,inb(il))-bx
3145 fr(il,inb(il)-1)=fr(il,inb(il)-1)
3146 : +bx*(ph(il,inb(il))-ph(il,inb(il)+1))
3147 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
3149 cx=0.1*ment(il,inb(il),inb(il))*(uent(il,inb(il),inb(il))
3150 : -
u(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
3151 fu(il,inb(il))=fu(il,inb(il))-cx
3152 fu(il,inb(il)-1)=fu(il,inb(il)-1)
3153 : +cx*(ph(il,inb(il))-ph(il,inb(il)+1))
3154 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
3156 dx=0.1*ment(il,inb(il),inb(il))*(vent(il,inb(il),inb(il))
3157 : -
v(il,inb(il)))/(ph(il,inb(il))-ph(il,inb(il)+1))
3158 fv(il,inb(il))=fv(il,inb(il))-dx
3159 fv(il,inb(il)-1)=fv(il,inb(il)-1)
3160 : +dx*(ph(il,inb(il))-ph(il,inb(il)+1))
3161 : /(ph(il,inb(il)-1)-ph(il,inb(il)))
3213 if (
i.le.(icb(il)-1) .and. iflag(il) .le. 1)
then
3215 asum(il)=asum(il)+(ft(il,
i)-ftd(il,
i))*(ph(il,
i)-ph(il,
i+1))
3216 bsum(il)=bsum(il)+(fr(il,
i)-fqd(il,
i))
3217 : *(lv(il,
i)+(
cl-
cpd)*(t(il,
i)-t(il,1)))
3218 : *(ph(il,
i)-ph(il,
i+1))
3219 csum(il)=csum(il)+(lv(il,
i)+(
cl-
cpd)*(t(il,
i)-t(il,1)))
3220 : *(ph(il,
i)-ph(il,
i+1))
3221 dsum(il)=dsum(il)+t(il,
i)*(ph(il,
i)-ph(il,
i+1))/th(il,
i)
3223 esum(il)=esum(il)+ftd(il,
i)*(ph(il,
i)-ph(il,
i+1))
3224 fsum(il)=fsum(il)+fqd(il,
i)
3225 : *(lv(il,
i)+(
cl-
cpd)*(t_wake(il,
i)-t_wake(il,1)))
3226 : *(ph(il,
i)-ph(il,
i+1))
3227 gsum(il)=gsum(il)+(lv(il,
i)+(
cl-
cpd)*(t_wake(il,
i)-t_wake(il,1)))
3228 : *(ph(il,
i)-ph(il,
i+1))
3229 hsum(il)=hsum(il)+t_wake(il,
i)
3230 ; *(ph(il,
i)-ph(il,
i+1))/th_wake(il,
i)
3238 if (
i.le.(icb(il)-1) .and. iflag(il) .le. 1)
then
3239 ftd(il,
i)=esum(il)*t_wake(il,
i)/(th_wake(il,
i)*hsum(il))
3240 fqd(il,
i)=fsum(il)/gsum(il)
3241 ft(il,
i)=ftd(il,
i)+asum(il)*t(il,
i)/(th(il,
i)*dsum(il))
3242 fr(il,
i)=fqd(il,
i)+bsum(il)/csum(il)
3252 IF (iflag(il) .le. 1)
THEN
3253 if (fr(il,1) .le. 0.)
then
3254 alpha_qpos(il) = max(alpha_qpos(il) ,
3256 : (s_wake(il)*rr_wake(il,1)+(1.-s_wake(il))*rr(il,1)))
3262 IF (iflag(il) .le. 1)
THEN
3263 IF (fr(il,
i) .le. 0.)
THEN
3264 alpha_qpos1(il)=max(1. , (-delt*fr(il,
i))/
3265 : (s_wake(il)*rr_wake(il,
i)+(1.-s_wake(il))*rr(il,
i)))
3266 IF (alpha_qpos1(il) .ge. alpha_qpos(il))
3267 : alpha_qpos(il)=alpha_qpos1(il)
3273 IF (iflag(il) .le. 1 .and. alpha_qpos(il) .gt. 1.001)
THEN
3274 alpha_qpos(il) = alpha_qpos(il)*1.1
3278 IF (iflag(il) .le. 1)
THEN
3280 precip(il) = precip(il)/alpha_qpos(il)
3285 IF (iflag(il) .le. 1)
THEN
3286 fr(il,
i) = fr(il,
i)/alpha_qpos(il)
3287 ft(il,
i) = ft(il,
i)/alpha_qpos(il)
3288 fqd(il,
i) = fqd(il,
i)/alpha_qpos(il)
3289 ftd(il,
i) = ftd(il,
i)/alpha_qpos(il)
3290 fu(il,
i) = fu(il,
i)/alpha_qpos(il)
3291 fv(il,
i) = fv(il,
i)/alpha_qpos(il)
3292 m(il,
i) =
m(il,
i)/alpha_qpos(il)
3293 mp(il,
i) = mp(il,
i)/alpha_qpos(il)
3294 vprecip(il,
i) = vprecip(il,
i)/alpha_qpos(il)
3301 IF (iflag(il) .le. 1)
THEN
3302 ment(il,
i,
j) = ment(il,
i,
j)/alpha_qpos(il)
3335 dnwd0(il,
i)=-mp(il,
i)
3347 if (
i.ge.icb(il) .and.
i.le.inb(il))
then
3367 if (
i.ge.icb(il).and.
i.le.inb(il).and.
k.le.inb(il))
then
3368 up1(il,
k,
i)=up1(il,
k,
i)+ment(il,
n,
k)
3369 dn1(il,
k,
i)=dn1(il,
k,
i)-ment(il,
k,
n)
3379 if(
i.ge.icb(il))
then
3380 if(
k.ge.
i.and.
k.le.(inb(il)))
then
3381 upwd(il,
i)=upwd(il,
i)+
m(il,
k)
3385 upwd(il,
i)=upwd(il,
i)+cbmf(il)*wghti(il,
k)
3397 if (
i.le.inb(il).and.
k.le.inb(il))
then
3398 upwd(il,
i)=upwd(il,
i)+up1(il,
k,
i)
3399 dnwd(il,
i)=dnwd(il,
i)+dn1(il,
k,
i)
3452 ma(il,
i)=ma(il,
i)+
m(il,
j)
3465 if (
i.le.(icb(il)-1))
then
3478 mke(il,
i)=upwd(il,
i)+dnwd(il,
i)
3484 rdcp=(
rrd*(1.-rr(il,
i))-rr(il,
i)*
rrv)
3485 : /(
cpd*(1.-rr(il,
i))+rr(il,
i)*
cpv)
3486 tls(il,
i)=t(il,
i)*(1000.0/p(il,
i))**rdcp
3508 if (
i.le.inb(il) .and.
k.le.(inb(il)+1)
3509 $ .and. iflag(il) .le. 1)
then
3510 mac(il,
i)=mac(il,
i)+
m(il,
k)
3519 if (
i.ge.icb(il) .and.
i.le.(inb(il)-1)
3520 : .and.
j.ge.icb(il)
3521 : .and. iflag(il) .le. 1 )
then
3522 sax(il,
i)=sax(il,
i)+
rrd*(tvp(il,
j)-tv(il,
j))
3523 : *(ph(il,
j)-ph(il,
j+1))/p(il,
j)
3531 if (
i.ge.icb(il) .and.
i.le.(inb(il)-1)
3532 : .and. sax(il,
i).gt.0.0
3533 : .and. iflag(il) .le. 1 )
then
3534 wa(il,
i)=sqrt(2.*sax(il,
i))
3541 if (wa(il,
i).gt.0.0 .and. iflag(il) .le. 1)
3542 : siga(il,
i)=mac(il,
i)/wa(il,
i)
3544 siga(il,
i) = min(siga(il,
i),1.0)
3547 qcondc(il,
i)=siga(il,
i)*clw(il,
i)*(1.-ep(il,
i))
3548 : + (1.-siga(il,
i))*qcond(il,
i)
3550 qcondc(il,
i)=qcond(il,
i)
3562 & ment,sigij,da,phi,phi2,d1a,dam,
3563 & ep,vprecip,elij,clw,epmlmmm,eplamm,
3567 #include "cv3param.h"
3570 integer ncum, nd, na, nloc,len
3571 real ment(nloc,na,na),sigij(nloc,na,na)
3572 real clw(nloc,nd),elij(nloc,na,na)
3574 integer icb(nloc),inb(nloc)
3575 real vprecip(nloc,nd+1)
3577 real da(nloc,na),phi(nloc,na,na)
3578 real phi2(nloc,na,na)
3579 real d1a(nloc,na),dam(nloc,na)
3580 real epmlmmm(nloc,na,na),eplamm(nloc,na)
3584 real epm(nloc,na,na)
3609 if(
k.ge.icb(
i).and.
k.le.inb(
i).and.
3612 &
j.gt.
k.and.
j.le.inb(
i))
then
3613 epm(
i,
j,
k)=1.-(1.-ep(
i,
j))*clw(
i,
j)/
3614 & max(elij(
i,
k,
j),1.e-16)
3616 epm(
i,
j,
k)=max(epm(
i,
j,
k),0.0)
3626 if(
k.ge.icb(
i).and.
k.le.inb(
i))
then
3627 eplamm(
i,
j)=eplamm(
i,
j) + ep(
i,
j)*clw(
i,
j)
3628 & *ment(
i,
j,
k)*(1.-sigij(
i,
j,
k))
3637 if(
k.ge.icb(
i).and.
k.le.inb(
i).and.
3649 da(
i,
j)=da(
i,
j)+(1.-sigij(
i,
k,
j))*ment(
i,
k,
j)
3652 & *(1.-sigij(
i,
k,
j))
3655 & *epm(
i,
k,
j)*(1.-ep(
i,
k))*(1.-sigij(
i,
k,
j))
3671 : ,ma,upwd,dnwd,dnwd0,qcondc,wd,cape
3674 : ,ft1,fq1,fu1,fv1,ftra1
3675 : ,ma1,upwd1,dnwd1,dnwd01,qcondc1,wd1,cape1
3679 #include "cv3param.h"
3682 integer len, ncum, nd, ntra, nloc
3686 real sig(nloc,nd), w0(nloc,nd)
3687 real ft(nloc,nd), fq(nloc,nd), fu(nloc,nd), fv(nloc,nd)
3688 real ftra(nloc,nd,ntra)
3690 real upwd(nloc,nd),dnwd(nloc,nd),dnwd0(nloc,nd)
3691 real qcondc(nloc,nd)
3692 real wd(nloc),cape(nloc)
3697 real sig1(len,nd), w01(len,nd)
3698 real ft1(len,nd), fq1(len,nd), fu1(len,nd), fv1(len,nd)
3699 real ftra1(len,nd,ntra)
3701 real upwd1(len,nd),dnwd1(len,nd),dnwd01(len,nd)
3702 real qcondc1(nloc,nd)
3703 real wd1(nloc),cape1(nloc)
3709 precip1(idcum(
i))=precip(
i)
3710 iflag1(idcum(
i))=iflag(
i)
3712 cape1(idcum(
i))=cape(
i)
3717 sig1(idcum(
i),
k)=sig(
i,
k)
3718 w01(idcum(
i),
k)=w0(
i,
k)
3719 ft1(idcum(
i),
k)=ft(
i,
k)
3720 fq1(idcum(
i),
k)=fq(
i,
k)
3721 fu1(idcum(
i),
k)=fu(
i,
k)
3722 fv1(idcum(
i),
k)=fv(
i,
k)
3723 ma1(idcum(
i),
k)=ma(
i,
k)
3724 upwd1(idcum(
i),
k)=upwd(
i,
k)
3725 dnwd1(idcum(
i),
k)=dnwd(
i,
k)
3726 dnwd01(idcum(
i),
k)=dnwd0(
i,
k)
3727 qcondc1(idcum(
i),
k)=qcondc(
i,
k)
3732 sig1(idcum(
i),nd)=sig(
i,nd)