1 subroutine da_cloud_model (TB, PB, QB, QCWB, QRNB, ZB, ZFB, DT, kts, kte)
3 !-----------------------------------------------------------------
4 ! Purpose: Calculate DT (=dz/w) using cumulus parameterization
5 ! of a one-dimensional cloud model.
6 !-----------------------------------------------------------------
12 integer, intent(in) :: kts, kte
13 real, intent(in), dimension(kts:kte) :: TB, PB, QB, QCWB, QRNB, ZB
14 real, intent(in), dimension(kts:kte+1) :: ZFB
15 real, intent(out), dimension(kts:kte) :: DT
18 real :: P0, Z0, T0, Q0
19 real :: PLCL, ZLCL, TLCL, QLCL
22 real, dimension(kts:kte) :: ZC, TC, QC, PP, QT
23 real, dimension(kts:kte) :: TCV, TBV, B
24 real :: ALPHA, RC, MU, XX, YY
25 real, dimension(kts:kte+1) :: W0, W
27 if (trace_use) call da_trace_entry("da_cloud_model")
45 T0 = MAX(TB(kts),303.0)
47 call da_qfrmrh (P0, T0, 95.0, Q0)
49 call da_lcl (P0, Z0, T0, Q0, PLCL, ZLCL, TLCL, QLCL)
51 call da_qfrmrh (PLCL, TLCL, 95.0, QLCL)
53 call da_cumulus (ZLCL, TLCL, QLCL, PLCL, PP, TB, &
54 ZC, TC, QC, KCB, KCT, PCT, ZCT, kts, kte)
57 TCV(k) = TC(k) * (1.0 + 0.608 * QC(k))
58 TBV(k) = TB(k) * (1.0 + 0.608 * QB(k))
60 B(k) = (TCV(k)-TBV(k)) / TBV(k)
62 QT(k) = QC(k) + QCWB(k) + QRNB(k)
67 XX = 1.0+2.0*MU*(ZFB(k)-ZFB(k-1))
68 YY = 2.0*gravity*(B(k-1)/(1.0+ALPHA) - QT(k-1)) * (ZFB(k)-ZFB(k-1))
69 W0(k) = (W0(k-1)+YY) / XX
73 if (W0(k) >= 0.0) then
80 if (W(k) >= 0.01) then
81 DT(k) = (ZB(k)-ZB(k-1))/W(k)
87 if (trace_use) call da_trace_exit("da_cloud_model")
89 end subroutine da_cloud_model