20 subroutine progsigma_calc (im,km,flag_init,flag_restart,flag_shallow,&
21 flag_mid,del,tmf,qmicro,dbyo1,zdqca,omega_u,zeta,hvap, &
22 delt,qadv,kb,kbcon1,ktcon,cnvflg,betascu,betamcu,betadcu, &
23 sigmind,sigminm,sigmins,sigmain,sigmaout,sigmab)
26 use machine,
only : kind_phys
27 use funcphys,
only : fpvs
32 integer,
intent(in) :: im,km,kb(im),kbcon1(im),ktcon(im)
33 real(kind=kind_phys),
intent(in) :: hvap,delt,betascu,betamcu,betadcu, &
34 sigmind,sigminm,sigmins
35 real(kind=kind_phys),
intent(in) :: qadv(im,km),del(im,km), &
36 qmicro(im,km),tmf(im,km),dbyo1(im,km),zdqca(im,km), &
37 omega_u(im,km),zeta(im,km)
38 logical,
intent(in) :: flag_init,flag_restart,cnvflg(im),flag_shallow,flag_mid
39 real(kind=kind_phys),
intent(in) :: sigmain(im,km)
42 real(kind=kind_phys),
intent(inout) :: sigmaout(im,km)
43 real(kind=kind_phys),
intent(out) :: sigmab(im)
48 real(kind=kind_phys) :: terma(im),termb(im),termc(im),termd(im)
49 real(kind=kind_phys) :: fdqa(im),form(im,km), &
51 real(kind=kind_phys) :: sumx(im)
53 real(kind=kind_phys) :: gcvalmx,epsilon,zz,cvg,mcon,buy2, &
54 fdqb,dtdyn,dxlim,rmulacvg,tem, &
55 den,dp1,invdelt,sigmind_new
64 if(flag_init .and. .not. flag_restart)
then
93 dp(i,k) = 1000. * del(i,k)
102 if(k > kbcon1(i) .and. k < ktcon(i))
then
103 sigmab(i) = sigmab(i) + sigmain(i,k) * dp(i,k)
104 sumx(i) = sumx(i) + dp(i,k)
111 if(sumx(i) == 0.)
then
113 sigmab(i) = sigmain(i,k)
115 sigmab(i) = sigmab(i) / sumx(i)
116 sigmab(i) = min(sigmab(i), 1._kind_phys)
117 if(sigmab(i) < 1.e-5) sigmab(i)=0.
127 if(k >= kb(i) .and. k < ktcon(i))
then
128 mcon = (hvap*(qadv(i,k)+tmf(i,k)+qmicro(i,k))*dp(i,k))
136 termd(i) = termd(i) + mcon
147 if(k >= kbcon1(i) .and. k < ktcon(i))
then
148 tem=sigmab(i)*zeta(i,k)*inbu(i,k)*dbyo1(i,k)*dp(i,k)
149 terma(i)=terma(i)+tem
159 if(k >= kbcon1(i) .and. k < ktcon(i))
then
160 tem=zeta(i,k)*dbyo1(i,k)*inbu(i,k)*dp(i,k)
161 termb(i)=termb(i)+tem
171 if(k >= kbcon1(i) .and. k < ktcon(i))
then
172 form(i,k)=-1.0*inbu(i,k)*(omega_u(i,k)*delt)
173 fdqb=0.5*((form(i,k)*zdqca(i,k)))
174 termc(i)=termc(i)+inbu(i,k)* &
175 (fdqb+fdqa(i))*hvap*zeta(i,k)
185 den=min(termc(i)+termb(i),1.e8_kind_phys)
187 zz=max(0.0,sign(1.0,terma(i))) &
188 *max(0.0,sign(1.0,termb(i))) &
189 *max(0.0,sign(1.0,termc(i)-epsilon))
191 sigmab(i)=(zz*(terma(i)+cvg))/(den+(1.0-zz))
193 sigmab(i)=min(sigmab(i),0.95)
194 sigmab(i)=max(sigmab(i),sigmind_new)
202 sigmaout(i,k)=sigmab(i)
211 sigmab(i)=sigmab(i)/betascu
212 sigmab(i)=max(sigmins,sigmab(i))
218 sigmab(i)=sigmab(i)/betamcu
219 sigmab(i)=max(sigminm,sigmab(i))
225 sigmab(i)=sigmab(i)/betadcu
226 sigmab(i)=max(sigmind_new,sigmab(i))
231 sigmab(i) = min(0.95,sigmab(i))