4 subroutine convect2(ncum,idcum,len,nd,ndp1,nl,minorig,
6 & t1,q1,qs1,u1,v1,gz1,tv1,tp1,tvp1,clw1,h1,
7 & lv1,cpn1,p1,ph1,ft1,fq1,fu1,fv1,
8 & tnk1,qnk1,gznk1,plcl1,
9 & precip1,cbmf1,iflag1,
156 integer kmax2,imax2,kmin2,imin2
158 integer kmax,imax,kmin,imin
284 integer nent(ncum,
klev)
285 real water(ncum,
klev)
332 real tg,qg,s,alv,tc,ahg,denom,es,rg,
ginv,
rowl
340 real bf2,anum,dei,altem,cwat,stemp
341 real alt,qp1,smid,sjmax,sjmin
343 real awat,coeff,afac,revap,dhdp,fac,qstm,rat
346 real fqold,ftold,fuold,fvold
347 real wdtrain(ncum),xxx
353 real amp1(ncum),ad(ncum)
379 if(iflag1(
i).eq.0)
then
402 if(iflag1(
i).eq.0)
then
425 dph(
i,
k)=ph(
i,
k)-ph(
i,
k+1)
445 icbmax=max(icbmax,icb(
i))
460 ah0(
i)=(
cpd*(1.-qnk(
i))+
cl*qnk(
i))*tnk(
i)
470 if(
k.ge.(icb(
i)+1))
then
477 s=
cpd+alv*alv*qg/(rv*t(
i,
k)*t(
i,
k))
485 es=6.112*exp(17.67*tc/denom)
487 es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
493 s=
cpd+alv*alv*qg/(rv*t(
i,
k)*t(
i,
k))
501 es=6.112*exp(17.67*tc/denom)
503 es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
518 clw(
i,
k)=max(0.0,clw(
i,
k))
533 if(
k.ge.(nk(
i)+1))
then
540 elacrit=max(elacrit,0.0)
541 ep(
i,
k)=1.0-elacrit/max(clw(
i,
k),1.0e-8)
542 ep(
i,
k)=max(ep(
i,
k),0.0 )
543 ep(
i,
k)=min(ep(
i,
k),1.0 )
556 if(
k.ge.(icb(
i)+1))
then
557 tvp(
i,
k)=tvp(
i,
k)*(1.0-qnk(
i)+ep(
i,
k)*clw(
i,
k))
587 lvcp(
i,1)=lv(
i,1)/cpn(
i,1)
693 if(cape(
i).lt.0.0)lcape(
i)=.
false.
694 if((
k.ge.(icb(
i)+1)).and.lcape(
i))
then
696 byp(
i)=(tvp(
i,
k+1)-tv(
i,
k+1))*dph(
i,
k+1)/p(
i,
k+1)
698 if(
by.ge.0.0)inb1(
i)=
k+1
699 if(cape(
i).gt.0.0)
then
707 cape(
i)=capem(
i)+byp(
i)
708 defrac=capem(
i)-cape(
i)
709 defrac=max(defrac,0.001)
721 if((
k.ge.icb(
i)).and.(
k.le.inb(
i)))
then
738 tvpplcl(
i)=tvp(
i,icb(
i)-1)
739 & -rd*tvp(
i,icb(
i)-1)*(p(
i,icb(
i)-1)-plcl(
i))
740 & /(cpn(
i,icb(
i)-1)*p(
i,icb(
i)-1))
741 tvaplcl(
i)=tv(
i,icb(
i))
742 & +(tvp(
i,icb(
i))-tvp(
i,icb(
i)+1))*(plcl(
i)-p(
i,icb(
i)))
743 & /(p(
i,icb(
i))-p(
i,icb(
i)+1))
755 if((
k.ge.nk(
i)).and.(
k.le.(icb(
i)-1)))
then
756 dtpbl(
i)=dtpbl(
i)+(tvp(
i,
k)-tv(
i,
k))*dph(
i,
k)
761 dtpbl(
i)=dtpbl(
i)/(ph(
i,nk(
i))-ph(
i,icb(
i)))
762 dtmin(
i)=tvpplcl(
i)-tvaplcl(
i)+
dtmax+dtpbl(
i)
772 if((work(
i).eq.0.0).and.(cbmf(
i).eq.0.0))
then
781 call
zilch(work,ncum)
785 if((
j.ge.(icb(
i)+1)).and.(
j.le.inb(
i)))
then
787 dbo=abs(tv(
i,
k+1)-tvp(
i,
k+1)-tv(
i,
k-1)+tvp(
i,
k-1))
796 if((
k.ge.(icb(
i)+1)).and.(
k.le.inb(
i)))
then
813 if((
i.ge.(icb(
ij)+1)).and.(
j.ge.icb(
ij))
814 & .and.(
i.le.inb(
ij)).and.(
j.le.inb(
ij)))
then
821 if(abs(dei).lt.0.01)dei=0.01
826 cwat=clw(
ij,
j)*(1.-ep(
ij,
j))
828 if((stemp.lt.0.0.or.stemp.gt.1.0.or.
829 1 altem.gt.cwat).and.
j.gt.
i)
then
830 anum=anum-lv(
ij,
j)*(qti-qs(
ij,
j)-cwat*bf2)
831 denom=denom+lv(
ij,
j)*(
q(
ij,
i)-qti)
832 if(abs(denom).lt.0.01)denom=0.01
833 sij(
ij,
i,
j)=anum/denom
835 altem=altem-(bf2-1.)*cwat
837 if(sij(
ij,
i,
j).gt.0.0.and.sij(
ij,
i,
j).lt.0.9)
then
839 & +(1.-sij(
ij,
i,
j))*qti
859 if((
i.ge.(icb(
ij)+1)).and.(
i.le.inb(
ij))
860 & .and.(nent(
ij,
i).eq.0))
then
872 sij(
i,inb(
i),inb(
i))=1.0
889 if((
i.ge.icb(
ij)+1).and.(
i.le.inb(
ij)))num1=num1+1
891 if(num1.le.0)go to 789
894 if((
i.ge.icb(
ij)+1).and.(
i.le.inb(
ij)))
then
895 lwork(
ij)=(nent(
ij,
i).ne.0)
899 if(abs(denom).lt.0.01)denom=0.01
902 if(scrit(
ij).lt.0.0.or.alt.lt.0.0)scrit(
ij)=1.0
911 if((
i.ge.icb(
ij)+1).and.(
i.le.inb(
ij))
912 & .and.(
j.ge.icb(
ij)).and.(
j.le.inb(
ij))
913 & .and.lwork(
ij))num2=num2+1
915 if(num2.le.0)go to 783
918 if((
i.ge.icb(
ij)+1).and.(
i.le.inb(
ij))
919 & .and.(
j.ge.icb(
ij)).and.(
j.le.inb(
ij)).and.lwork(
ij))
then
920 if(sij(
ij,
i,
j).gt.0.0.and.sij(
ij,
i,
j).lt.0.9)
then
922 smid=min(sij(
ij,
i,
j),scrit(
ij))
926 & .and.sij(
ij,
i,
j+1).lt.smid)
then
928 sjmax=min(sij(
ij,
i,
j+1),sij(
ij,
i,
j),scrit(
ij))
929 sjmin=max(sij(
ij,
i,
j-1),sij(
ij,
i,
j))
930 sjmin=min(sjmin,scrit(
ij))
933 sjmax=max(sij(
ij,
i,
j+1),scrit(
ij))
934 smid=max(sij(
ij,
i,
j),scrit(
ij))
936 if(
j.gt.1)sjmin=sij(
ij,
i,
j-1)
937 sjmin=max(sjmin,scrit(
ij))
941 asij(
ij)=asij(
ij)+(delp+delm)
943 ment(
ij,
i,
j)=ment(
ij,
i,
j)*(delp+delm)
950 if((
i.ge.icb(
ij)+1).and.(
i.le.inb(
ij)).and.lwork(
ij))
then
951 asij(
ij)=max(1.0e-21,asij(
ij))
952 asij(
ij)=1.0/asij(
ij)
958 if((
i.ge.icb(
ij)+1).and.(
i.le.inb(
ij))
959 & .and.(
j.ge.icb(
ij)).and.(
j.le.inb(
ij))
960 & .and.lwork(
ij))
then
967 if((
i.ge.icb(
ij)+1).and.(
i.le.inb(
ij))
968 & .and.(bsum(
ij,
i).lt.1.0e-18).and.lwork(
ij))
then
994 if(ep(
i,inb(
i)).le.0.0001)iflag(
i)=2
995 if(iflag(
i).eq.0)
then
1005 call
zilch(wdtrain,ncum)
1010 if((
i.le.inb(
ij)).and.lwork(
ij))num1=num1+1
1012 if(num1.le.0)go to 899
1018 if((
i.le.inb(
ij)).and.(lwork(
ij)))
then
1026 if((
i.le.inb(
ij)).and.(lwork(
ij)))
then
1029 wdtrain(
ij)=wdtrain(
ij)+
g*awat*ment(
ij,
j,
i)
1042 if((
i.le.inb(
ij)).and.(lwork(
ij)))
then
1048 if(t(
ij,
i).gt.273.0)
then
1053 afac=coeff*ph(
ij,
i)*(qs(
ij,
i)-qsm)
1054 & /(1.0e4+2.0e3*ph(
ij,
i)*qs(
ij,
i))
1059 b6=100.*(ph(
ij,
i)-ph(
ij,
i+1))*sigt*afac/wt(
ij,
i)
1061 revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
1062 evap(
ij,
i)=sigt*afac*revap
1063 water(
ij,
i)=revap*revap
1072 mp(
ij,
i)=max(mp(
ij,
i),0.0)
1076 fac=20.0/(ph(
ij,
i-1)-ph(
ij,
i))
1077 mp(
ij,
i)=(fac*mp(
ij,
i+1)+mp(
ij,
i))/(1.+fac)
1082 if(p(
ij,
i).gt.(0.949*p(
ij,1)))
then
1083 jtt(
ij)=max(jtt(
ij),
i)
1085 & /(p(
ij,1)-p(
ij,jtt(
ij)))
1091 if(
i.ne.inb(
ij))
then
1097 if(mp(
ij,
i).gt.mp(
ij,
i+1))
then
1104 if(mp(
ij,
i+1).gt.0.0)
then
1113 qp(
ij,
i)=min(qp(
ij,
i),qstm)
1114 qp(
ij,
i)=max(qp(
ij,
i),0.0)
1123 if(iflag(
i).le.1)
then
1127 precip(
i) = wt(
i,1)*
sigd*water(
i,1)*86400/
g
1143 work(
i)=0.01/(ph(
i,1)-ph(
i,2))
1148 if((nk(
i).eq.1).and.(
k.le.inb(
i)).and.(nk(
i).eq.1))
then
1154 if((
g*work(
i)*am(
i)).ge.delti)iflag(
i)=1
1155 ft(
i,1)=ft(
i,1)+
g*work(
i)*am(
i)*(t(
i,2)-t(
i,1)
1156 & +(gz(
i,2)-gz(
i,1))/cpn(
i,1))
1157 ft(
i,1)=ft(
i,1)-lvcp(
i,1)*
sigd*evap(
i,1)
1159 & -t(
i,1))*work(
i)/cpn(
i,1)
1160 fq(
i,1)=fq(
i,1)+
g*mp(
i,2)*(qp(
i,2)-
q(
i,1))*
1162 fq(
i,1)=fq(
i,1)+
g*am(
i)*(
q(
i,2)-
q(
i,1))*work(
i)
1163 fu(
i,1)=fu(
i,1)+
g*work(
i)*(mp(
i,2)*(up(
i,2)-
u(
i,1))
1164 & +am(
i)*(
u(
i,2)-
u(
i,1)))
1165 fv(
i,1)=fv(
i,1)+
g*work(
i)*(mp(
i,2)*(vp(
i,2)-
v(
i,1))
1166 & +am(
i)*(
v(
i,2)-
v(
i,1)))
1172 & +
g*work(
i)*ment(
i,
j,1)*(qent(
i,
j,1)-
q(
i,1))
1174 & +
g*work(
i)*ment(
i,
j,1)*(uent(
i,
j,1)-
u(
i,1))
1176 & +
g*work(
i)*ment(
i,
j,1)*(vent(
i,
j,1)-
v(
i,1))
1191 if(
i.le.inb(
ij))num1=num1+1
1193 if(num1.le.0)go to 1500
1195 call
zilch(amp1,ncum)
1200 if((
i.ge.nk(
ij)).and.(
i.le.inb(
ij))
1201 & .and.(
k.le.(inb(
ij)+1)))
then
1210 if((
j.le.(inb(
ij)+1)).and.(
i.le.inb(
ij)))
then
1219 if((
i.le.inb(
ij)).and.(
j.le.inb(
ij)))
then
1227 if(
i.le.inb(
ij))
then
1228 dpinv=0.01/(ph(
ij,
i)-ph(
ij,
i+1))
1233 & +(gz(
ij,
i+1)-gz(
ij,
i))*cpinv)
1239 & (t(
ij,
i+1)-t(
ij,
i))*dpinv*cpinv
1250 if(
i.le.inb(
ij))
then
1264 if((
i.le.inb(
ij)).and.(
k.le.inb(
ij)))
then
1275 if(
i.le.inb(
ij))
then
1294 fqold=fq(
ij,inb(
ij))
1300 ftold=ft(
ij,inb(
ij))
1305 & /cpn(
ij,inb(
ij)-1)
1306 fuold=fu(
ij,inb(
ij))
1310 1 (ph(
ij,inb(
ij)-1)-ph(
ij,inb(
ij))))
1311 fvold=fv(
ij,inb(
ij))
1315 1 (ph(
ij,inb(
ij)-1)-ph(
ij,inb(
ij))))
1333 ents(
ij)=ents(
ij)/(ph(
ij,1)-ph(
ij,inb(
ij)+1))
1347 if((
q(
i,
k)+delt*fq(
i,
k)).lt.0.0)iflag(
i)=10
1353 if(iflag(
i).gt.2)
then
1360 if(iflag(
i).gt.2)
then
1369 precip1(idcum(
i))=precip(
i)
1370 cbmf1(idcum(
i))=cbmf(
i)
1371 iflag1(idcum(
i))=iflag(
i)
1375 ft1(idcum(
i),
k)=ft(
i,
k)
1376 fq1(idcum(
i),
k)=fq(
i,
k)
1377 fu1(idcum(
i),
k)=fu(
i,
k)
1378 fv1(idcum(
i),
k)=fv(
i,
k)