Common Community Physics Package (CCPP) Scientific Documentation  Version 2.0
subroutine zhaocarr_gscond::zhaocarr_gscond_run ( integer, intent(in)  im,
integer, intent(in)  ix,
integer, intent(in)  km,
real(kind=kind_phys), intent(in)  dt,
real(kind=kind_phys), intent(in)  dtf,
real(kind=kind_phys), dimension(ix,km), intent(in)  prsl,
real(kind=kind_phys), dimension(im), intent(in)  ps,
real(kind=kind_phys), dimension(ix,km), intent(inout)  q,
real(kind=kind_phys), dimension(ix,km), intent(in)  clw1,
real(kind=kind_phys), dimension(ix,km), intent(in)  clw2,
real(kind=kind_phys), dimension(ix,km), intent(out)  cwm,
real(kind=kind_phys), dimension(ix,km), intent(inout)  t,
real(kind=kind_phys), dimension(ix,km), intent(inout)  tp,
real(kind=kind_phys), dimension(ix,km), intent(inout)  qp,
real(kind=kind_phys), dimension(im), intent(inout)  psp,
real(kind=kind_phys), dimension(ix,km), intent(inout)  tp1,
real(kind=kind_phys), dimension(ix,km), intent(inout)  qp1,
real(kind=kind_phys), dimension(im), intent(inout)  psp1,
real(kind=kind_phys), dimension(im,km), intent(in)  u,
logical, intent(in)  lprnt,
integer, intent(in)  ipr,
character(len=*), intent(out)  errmsg,
integer, intent(out)  errflg 
)
  1. Begining of grid-scale condensation/evaporation loop (start of k-loop, i-loop)
  2. Compute ice-water identification number IW.
    The distinction between cloud water and cloud ice is made by the cloud identification number IW, which is zero for cloud water and unity for cloud ice (Table 2 in Zhao and Carr (1997) [111]):
    • All clouds are defined to consist of liquid water below the freezing level ( \(T\geq 0^oC\)) and of ice particles above the \(T=-15^oC\) level.
    • In the temperature region between \(-15^oC\) and \(0^oC\), clouds may be composed of liquid water or ice. If there are cloud ice particles above this point at the previous or current time step, or if the cloud at this point at the previous time step consists of ice particles, then the cloud substance at this point is considered to be ice particles because of the cloud seeding effect and the memory of its content. Otherwise, all clouds in this region are considered to contain supercooled cloud water.
  3. Condensation and evaporation of cloud
    • Compute the changes in t, q and p ( \(A_{t}\), \(A_{q}\) and \(A_{p}\)) caused by all the processes except grid-scale condensation and evaporation.

      \[ A_{t}=(t-tp)/dt \]

      \[ A_{q}=(q-qp)/dt \]

      \[ A_{p}=(prsl-\frac{prsl}{ps} \times psp)/dt \]

    • Calculate the saturation specific humidity \(q_{s}\) and the relative humidity \(f\) using IW.
    • According to Sundqvist et al. (1989) [98], estimate cloud fraction \(b\) at a grid point from relative humidity \(f\) using the equation

      \[ b=1-\left ( \frac{f_{s}-f}{f_{s}-u} \right )^{1/2} \]

      for \(f>u\); and \(b=0\) for \(f<u\). where \(f_{s}=1.0\) is the relative humidity in a cloud region and \(u\) ,which is an input parameter accounts for the effects of subgrid-scale variations in moisture on large-scale condensation. Since both temperature and moisture may vary at scales smaller than the model grid scale, it is possible for condensation to occur before the grid-average relative humidity reaches 100%. Therefore \(u\) needs to be less than 1.0 to account for the subgrid-scale variation of temperature and moisture fields and allow subgrid-scale condensation.
    • If cloud fraction \(b\leq 1.0\times10^{-3}\), then evaporate any existing cloud condensate using evaporation rate \(E_{c}\) as computed below.
      If \(q_{0}\) represents the specific humidity at relative humidity \(u\), then

      \[ q_{0}=uq_{s} \]


      if the cloud water/ice at this point is enough to be evaporated until \(u\) is reached, then the evaporation rate \(E_{c}\), assuming that the evaporation process occurs in one time step, is determined by

      \[ E_{c}=\frac{q_{0}-q}{dt} \]


      Using \(q_{0}=uq_{s}\) and the equation \(q=fq_{s}\), \(E_{c}\) then becomes

      \[ E_{c}=\frac{q_{s}}{dt}(u-f) \]

      where \(dt\) is the time step for precipitation calculation in the model. It is a simplified version of a higher-order cloud evaporation algorithm (Rutledge and Hobbs (1983) [91]). In the case where all clouds will evaporate before \(u\) is reached, the following equation is used:

      \[ E_{c}=\frac{cwm}{dt} \]

    • If cloud fraction \(b>1.0\times10^{-3}\), condense water vapor into cloud condensate ( \(C_{g}\)).
      Using \(q=fq_{s}\), \(q_{s}=\epsilon e_{s}/p\), and the Clausius-Clapeyron equation \(de_{s}/dT=\epsilon Le_{s}/RT^{2}\), where \(q_{s}\) is the saturation specific humidity, \(e_{s}\) is the saturation vapor pressure, \(R\) is the specific gas constant for dry air, \(f\) is the relative humidity, and \(\epsilon=0.622\), the expression for \(C_{g}\) has the form

      \[ C_{g}=\frac{M-q_{s}f_{t}}{1+(f\epsilon L^{2}q_{s}/RC_{p}T^{2})}+E_{c} \]

      where

      \[ M=A_{q}-\frac{f\epsilon Lq_{s}}{RT^{2}}A_{t}+\frac{fq_{s}}{p}A_{p} \]

      To close the system, an equation for the relative humidity tendency \(f_{t}\) was derived by Sundqvist et al.(1989) [98] using the hypothesis that the quantity \(M+E_{c}\) is divided into one part, \(bM\),which condenses in the already cloudy portion of a grid square, and another part, \((1-b)M+E_{c}\),which is used to increase the relative humidity of the cloud-free portion and the cloudiness in the square. The equation is written as

      \[ f_{t}=\frac{2(1-b)(f_{s}-u)[(1-b)M+E_{c}]}{2q_{s}(1-b)(f_{s}-u)+cwm/b} \]

    • Check and correct if over condensation occurs.
    • Update t, q and cwm (according to Eqs(6) and (7) in Zhao and Carr (1997) [111])

      \[ cwm=cwm+(C_{g}-E_{c})\times dt \]

      \[ q=q-(C_{g}-E_{c})\times dt \]

      \[ t=t+\frac{L}{C_{p}}(C_{g}-E_{c})\times dt \]


      where \(L\) is the latent heat of condensation/deposition, and \(C_{p}\) is the specific heat of air at constant pressure.
  4. End of the condensation/evaporation loop (end of i-loop,k-loop).
  5. Store \(t\), \(q\), \(ps\) for next time step.

References physcons::con_cp, physcons::con_eps, physcons::con_epsm1, physcons::con_g, physcons::con_hfus, physcons::con_hvap, physcons::con_psat, physcons::con_rd, physcons::con_rv, physcons::con_ttp, and funcphys::fpvs().

Here is the call graph for this function: