<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_CLOUD_MODEL'><A href='../../html_code/setup_structures/da_cloud_model.inc.html#DA_CLOUD_MODEL' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>

subroutine da_cloud_model (TB, PB, QB, QCWB, QRNB, ZB, ZFB, DT, kts, kte) 2,6

   !-----------------------------------------------------------------
   ! Purpose: Calculate DT (=dz/w) using cumulus parameterization 
   !          of a one-dimensional cloud model.
   !-----------------------------------------------------------------

   ! Calculate DT

   implicit none

   integer, intent(in)                     :: kts, kte
   real, intent(in),  dimension(kts:kte)   :: TB, PB, QB, QCWB, QRNB, ZB
   real, intent(in),  dimension(kts:kte+1) :: ZFB
   real, intent(out), dimension(kts:kte)   :: DT

   integer                    :: k
   real                       :: P0, Z0, T0, Q0
   real                       :: PLCL, ZLCL, TLCL, QLCL
   integer                    :: KCB, KCT
   real                       :: PCT, ZCT
   real, dimension(kts:kte)   :: ZC, TC, QC, PP, QT
   real, dimension(kts:kte)   :: TCV, TBV, B
   real                       :: ALPHA, RC, MU, XX, YY
   real, dimension(kts:kte+1) :: W0, W

   if (trace_use) call da_trace_entry("da_cloud_model")

   ALPHA=0.5
   RC=100.0
   MU=0.183/RC

   do k = kts, kte+1
      W0(k)=0.0  
      W(k)=0.0  
   end do

   do k = kts, kte
      PP(k)=PB(k)/100.0
      DT(k)=0.0
   end do

   P0 = PP(kts)
   Z0 = ZB(kts)
   T0 = MAX(TB(kts),303.0)

   call da_qfrmrh (P0, T0, 95.0, Q0)

   call da_lcl (P0, Z0, T0, Q0, PLCL, ZLCL, TLCL, QLCL)

   call da_qfrmrh (PLCL, TLCL, 95.0, QLCL)

   call da_cumulus (ZLCL, TLCL, QLCL, PLCL, PP, TB,            &amp;
                  ZC, TC, QC, KCB, KCT, PCT, ZCT, kts, kte)

   do k = KCB, KCT
      TCV(k) = TC(k) * (1.0 + 0.608 * QC(k))
      TBV(k) = TB(k) * (1.0 + 0.608 * QB(k))
   
      B(k) = (TCV(k)-TBV(k)) / TBV(k)

      QT(k) = QC(k) + QCWB(k) + QRNB(k)
   end do

   W0(KCB) = 0.0
   do k = KCB+1, KCT+1
      XX = 1.0+2.0*MU*(ZFB(k)-ZFB(k-1))
      YY = 2.0*gravity*(B(k-1)/(1.0+ALPHA) - QT(k-1)) * (ZFB(k)-ZFB(k-1))
      W0(k) =  (W0(k-1)+YY) / XX
   end do
     
   do k = KCB, KCT+1
      if (W0(k) &gt;= 0.0) then
         W(k) = sqrt(W0(k))
      end if
   end do


   do k = KCT, KCB+1, -1
      if (W(k) &gt;= 0.01) then
         DT(k) = (ZB(k)-ZB(k-1))/W(k)
      else
         DT(k) = 0.0
      end if
   end do

   if (trace_use) call da_trace_exit("da_cloud_model")

end subroutine da_cloud_model