22 subroutine progomega_calc(first_time_step,flag_restart,im,km,kbcon1,ktcon,omegain,delt,del, &
23 zi,cnvflg,omegaout,grav,buo,drag,wush,tentr,bb1,bb2)
25 use machine,
only : kind_phys
26 use funcphys,
only : fpvs
29 integer,
intent(in) :: im, km
30 integer,
intent(in) :: kbcon1(im),ktcon(im)
31 real(kind=kind_phys),
intent(in) :: delt,grav,bb1,bb2
32 real(kind=kind_phys),
intent(in) :: omegain(im,km), del(im,km),zi(im,km)
33 real(kind=kind_phys),
intent(in) :: drag(im,km),buo(im,km),wush(im,km),tentr(im,km)
34 real(kind=kind_phys),
intent(inout) :: omegaout(im,km)
35 logical,
intent(in) :: cnvflg(im),first_time_step,flag_restart
36 real(kind=kind_phys) :: terma(im,km),termb(im,km),termc(im,km),omega(im,km)
37 real(kind=kind_phys) :: rhs(im,km),kd(im,km)
38 real(kind=kind_phys) :: dp,dz,entrn,kdn,discr,wush_pa,lbb1,lbb2,lbb3
55 omega(i,k)=omegain(i,k)
59 if(first_time_step .and. .not. flag_restart)
then
79 if (k > kbcon1(i) .and. k < ktcon(i))
then
82 kd(i,k) = (tentr(i,k)/entrn)*kdn
87 dz = zi(i,k+1) - zi(i,k)
94 terma(i,k) = delt * ((lbb1 * drag(i,k) * (dp/dz)) + (kd(i,k) * (dp/dz)))
95 termb(i,k) = -1.0 - delt * lbb3 * wush(i,k) * dp/dz
96 termc(i,k) = omega(i,k) - delt * lbb2 * buo(i,k) * (dp/dz) &
97 - delt * omega(i,k) * (omega(i,k-1) - omega(i,k)) / dp
99 discr = termb(i,k)**2 - 4.0 * terma(i,k) * termc(i,k)
102 if (discr >= 0.0)
then
104 omegaout(i,k) = (-termb(i,k) - sqrt(discr)) / (2.0 * terma(i,k))
106 omegaout(i,k) = omega(i,k)
109 omegaout(i,k) = max(min(omegaout(i,k), -1.2), -80.0)
subroutine, public progomega_calc(first_time_step, flag_restart, im, km, kbcon1, ktcon, omegain, delt, del, zi, cnvflg, omegaout, grav, buo, drag, wush, tentr, bb1, bb2)
This subroutine computes a prognostic updraft vertical velocity used in the closure computations in t...