19 subroutine progsigma_calc (im,km,flag_init,flag_restart,flag_shallow,&
20 flag_mid,del,tmf,qmicro,dbyo1,zdqca,omega_u,zeta,hvap, &
21 delt,qadv,kbcon1,ktcon,cnvflg,betascu,betamcu,betadcu, &
22 sigmind,sigminm,sigmins,sigmain,sigmaout,sigmab)
25 use machine,
only : kind_phys
26 use funcphys,
only : fpvs
31 integer,
intent(in) :: im,km,kbcon1(im),ktcon(im)
32 real(kind=kind_phys),
intent(in) :: hvap,delt,betascu,betamcu,betadcu, &
33 sigmind,sigminm,sigmins
34 real(kind=kind_phys),
intent(in) :: qadv(im,km),del(im,km), &
35 qmicro(im,km),tmf(im,km),dbyo1(im,km),zdqca(im,km), &
36 omega_u(im,km),zeta(im,km)
37 logical,
intent(in) :: flag_init,flag_restart,cnvflg(im),flag_shallow,flag_mid
38 real(kind=kind_phys),
intent(in) :: sigmain(im,km)
41 real(kind=kind_phys),
intent(out) :: sigmaout(im,km)
42 real(kind=kind_phys),
intent(out) :: sigmab(im)
47 real(kind=kind_phys) :: terma(im),termb(im),termc(im),termd(im)
48 real(kind=kind_phys) :: mcons(im),fdqa(im),form(im,km), &
52 real(kind=kind_phys) :: gcvalmx,epsilon,zz,cvg,mcon,buy2, &
53 fdqb,dtdyn,dxlim,rmulacvg,tem, &
86 dp(i,k) = 1000. * del(i,k)
95 if(sigmain(i,k)>sigmab(i))
then
96 sigmab(i)=sigmain(i,k)
104 if(sigmab(i) < 1.e-5)
then
114 dp1 = 1000. * del(i,1)
115 mcons(i)=(hvap*(qadv(i,1)+tmf(i,1)+qmicro(i,1))*dp1)
121 mcon = (hvap*(qadv(i,k)+tmf(i,k)+qmicro(i,k))*dp(i,k))
122 buy2 = termd(i)+mcon+mcons(i)
124 if(dbyo1(i,k)>0 .and. buy2 > 0.)
then
127 inbu(i,k-1)=max(inbu(i,k-1),inbu(i,k))
128 termd(i) = termd(i) + inbu(i,k-1)*mcons(i)
138 tem=sigmab(i)*zeta(i,k)*inbu(i,k)*dbyo1(i,k)*dp(i,k)
139 terma(i)=terma(i)+tem
148 tem=zeta(i,k)*dbyo1(i,k)*inbu(i,k)*dp(i,k)
149 termb(i)=termb(i)+tem
158 form(i,k)=-1.0*inbu(i,k)*(omega_u(i,k)*delt)
159 fdqb=0.5*((form(i,k)*zdqca(i,k)))
160 termc(i)=termc(i)+inbu(i,k)* &
161 (fdqb+fdqa(i))*hvap*zeta(i,k)
168 if(flag_init .and. .not. flag_restart)
then
177 den=min(termc(i)+termb(i),1.e8)
179 zz=max(0.0,sign(1.0,terma(i))) &
180 *max(0.0,sign(1.0,termb(i))) &
181 *max(0.0,sign(1.0,termc(i)-epsilon))
183 sigmab(i)=(zz*(terma(i)+cvg))/(den+(1.0-zz))
185 sigmab(i)=min(sigmab(i),0.95)
186 sigmab(i)=max(sigmab(i),0.01)
195 sigmaout(i,k)=sigmab(i)
204 sigmab(i)=sigmab(i)/betascu
205 sigmab(i)=max(sigmins,sigmab(i))
211 sigmab(i)=sigmab(i)/betamcu
212 sigmab(i)=max(sigminm,sigmab(i))
218 sigmab(i)=sigmab(i)/betadcu
219 sigmab(i)=max(sigmind,sigmab(i))
224 sigmab(i) = min(0.95,sigmab(i))