PUBLIC INTERFACE ~ PUBLIC DATA ~ PUBLIC ROUTINES ~ NAMELIST ~ DIAGNOSTIC FIELDS ~ ERROR MESSAGES ~ REFERENCES ~ NOTES

Module entrain_mod

Contact:  Stephen Klein
Reviewers:  none
Change History: WebCVS Log


OVERVIEW

K-PROFILE BOUNDARY LAYER SCHEME WITH CLOUD TOP ENTRAINMENT

This routine calculates diffusivity coefficients for vertical diffusion using a K-profile approach. This scheme is modelled after:

Lock, A.P., A.R. Brown, M.R. Bush, G.M. Martin, and R.N.B. Smith, 2000: A new boundary layer mixing scheme. Part I: Scheme description and single-column modeling tests. Mon. Wea. Rev., 128, 3187-3199.

The key part is the parameterization of entrainment at the top convective layers. For an entrainment interface from surface driven mixing, the entrainment rate, we, is parameterized as:

we, surf = A / B

where A = ( beta_surf * (V_surf**3 + V_shear**3) / zsml ) and B = ( delta_b + ((V_surf**3 + V_shear**3)**(2/3))/zsml )

In this formula,

zsml = depth of surface mixed layer

V_surf = surface driven scaling velocity = (u_star*b_star*zsml)**(1/3)

V_shear = surface driven shear velocity, = (Ashear**(1/3))*u_star

delta_b = buoyancy jump at the entrainment interface(m/s2) = grav * delta_slv / slv

If an entrainment interface is associated only with cloud top radiative cooling, the entrainment rate is parameterized as:

we, rad = ( A / B)

where A = beta_rad * V_rad**3 / zradml and B = delta_b + V_rad**2 / zradml

where

zradml = depth of radiatively driven layer

V_rad = radiatively driven scaling velocity = (grav*delta-F*zradml/(rho*cp_air*T)) **(1/3)

Note that the source of entrainment from cloud top buoyancy reversal has been omitted in this implementation.

If the entrainment interface for surface driven mixing coincides with that for cloud top radiatively driven convection then the following full entrainment rate:

we, full = A / B

where A = V_full**3 / zsml and B = delta_b+((V_surf**3+V_shear**3+V_rad**3)**(2/3))/zsml and V_full**3 = beta_surf*(V_surf**3+V_shear**3) + beta_rad*V_rad**3



OTHER MODULES USED

     constants_mod
fms_mod
diag_manager_mod
time_manager_mod
sat_vapor_pres_mod
monin_obukhov_mod

PUBLIC INTERFACE

entrain_init:
entrain:
pbl_depth:
prof_recon:
radml_depth:
diffusivity_pbl:
entrain_end:


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. entrain_init

    call entrain_init (lonb, latb, axes,time,idim,jdim,kdim)
    DESCRIPTION
    This subroutine reads the namelist file, sets up individual points diagnostics if desired, and initializes netcdf output.


    INPUT
    lonb    Vector of model longitudes at cell boundaries (radians)
       [real]
    latb    Vector of model latitudes at cell boundaries (radians)
       [real]
    axes    Integer arrary for axes used needed for netcdf diagnostics
       [integer]
    time    Time type variable used for netcdf diagnostics
       [time_type]
    idim    Size of first (longitude) array dimension
       [integer]
    jdim    Size of second (latitude) array dimension
       [integer]
    kdim    Size of third (vertical, full levels) array dimension
       [integer]

  2. entrain

    call entrain (is,ie,js,je,time, tdtlw_in, convect,u_star,b_star, & t,qv,ql,qi,qa,u,v,zfull,pfull,zhalf,phalf, diff_m,diff_t,k_m_entr,k_t_entr,use_entr,zsml, vspblcap,kbot)
    DESCRIPTION
    This is the main subroutine which takes in the state of the atmosphere and returns vertical diffusion coefficients for convective turbulent layers. (Stable turbulent layers are handled by stable_bl_turb.f90 in AM2)



    INPUT
    is    Indice of starting point in the longitude direction of the slab being passed to entrain
       [integer]
    ie    Indice of ending point in the longitude direction of the slab being passed to entrain
       [integer]
    js    Indice of starting point in the latitude direction of the slab being passed to entrain
       [integer]
    je    Indice of ending point in the latitude direction of the slab being passed to entrain
       [integer]
    time    Time of the model: used for netcdf diagnostics
       [time_type]
    tdtlw_in    Longwave cooling rate (from the radiation scheme) (K/sec)
       [real]
    convect    Is surface based convection occurring in this grid box at this time? (from convection scheme (or schemes))
       [logical]
    u_star    Friction velocity (m/s)
       [real]
    b_star    Buoyancy scale (m/s2)
       [real]
    t    Temperature (3d array) (K)
       [time_type]
    qv    Water vapor specific humidity (3d array) (kg/kg)
       [real]
    ql    Liquid water specific humidity (3d array) (kg/kg)
       [real]
    qi    Ice water specific humidity (3d array) (kg/kg)
       [real]
    qa    Cloud fraction (3d array) (fraction)
       [real]
    u    Zonal wind velocity (3d array) (m/s)
       [real]
    v    Meridional wind velocity (3d array) (m/s)
       [logical]
    zfull    Geopotential height of full model levels (3d array) (m)
       [real]
    pfull    Pressure of full model levels (3d array) (Pa)
       [real]
    zhalf    Geopotential height of half model levels (3d array) (m)
       [real]
    phalf    Pressure of half model levels (3d array) (Pa)
       [real]
    kbot    Optional input integer indicating the lowest true layer of atmosphere (counting down from the top of the atmosphere). This is used only for eta coordinate model.
       [integer]

    INPUT/OUTPUT
    diff_m    Vertical momentum diffusion coefficient (3d array) (m2/s)

    Note that if apply_entrain = .true. then the output will be the diffusion coefficient diagnosed by entrain_mod (k_m_entr). If apply_entrain = .false. then the output will be identical to the input. This permits one to run entrain_mod as a diagnostic module without using the diffusion coefficients determined by it.
       [real]
    diff_t    Vertical heat and tracer diffusion coefficient (3d array) (m2/s)

    The note for diff_m also applies here.
       [real]

    OUTPUT
    k_m_entr    Vertical momentum diffusion coefficient diagnosed by entrain_mod (3d array) (m2/s)
       [real]
    k_t_entr    Vertical heat and tracer diffusion coefficient diagnosed by entrain_mod (3d array) (m2/s)
       [real]
    use_entr    Was a diffusion coefficient calculated for this level by entrain_mod? (1.0 = yes, 0.0 = no)
       [real]
    zsml    Height of surface based convective mixed layer (m) This may be used by other routines, e.g. Steve Garner's gravity wave drag
       [real]
    vspblcap    Lowest height level for which entrain module calculated at diffusion coefficient (meters) (i.e. where use_entr = 1.0) This is used by stable_bl_turb.f90 to limit the height of enhanced mixing in stable conditions.
       [real]

  3. pbl_depth

    call pbl_depth (t, z, u_star, b_star, ipbl, h, parcelkick)
    DESCRIPTION
    Calculates the depth of the surface based convective layer


    INPUT
    t    Liquid water virtual static energy divided by cp (K)
       [real]
    z    Geopoential height of levels t is defined on (m)
       [real]
    u_star    Friction velocity (m/s)
       [real]
    b_star    Buoyancy scale (m/s2)
       [real]

    OUTPUT
    ipbl    Integer indicating the half model level which is the PBL top
       [integer]
    h    PBL height (m)
       [real]
    parcelkick    Surface parcel excess (K)
       [real]

  4. prof_recon

    call prof_recon (rho,t,pf,ph,zt,dt)
    DESCRIPTION
    Subroutine to do profile reconstruction

    This is not turned on in the default version as I suspect there is a bug in this subroutine.



    INPUT
    rho    Air density (kg/m3)
       [real]
    t    Liquid water virtual static energy divided by cp (K)
       [real]
    pf    Full level pressures (Pa)
       [real]
    ph    Half level pressures (pa)
       [real]

    OUTPUT
    zt    Top of radiatively driven layer in distance relative to boundary between cloud top layer and the level below (m)
       [real]
    dt    Cloud top jump in liquid water virtual static energy divided by cp (K)
       [real]

  5. radml_depth

    call radml_depth (svp, zt, t, zf, zh, zb, zml)
    DESCRIPTION
    Subroutine to calculate the depth of the the radiatively driven (i.e. stratocumulus) mixed layer


    INPUT
    svp    Cloud top value of the liquid water virtual static energy divided by cp (K)
       [real]
    zt    Top of radiatively driven layer (m)
       [real]
    t    Liquid water virtual static energy divided by cp (vertical profile) (K)
       [real]
    zf    Full level geopotential height relative to ground (vertical profile) (m)
       [real]
    zh    Half level geopotential height relative to ground (vertical profile) (m)
       [real]

    OUTPUT
    zb    Base of radiatively driven mixed layer (m)
       [real]
    zml    Depth of radiatively driven mixed layer (m) (equals zt minus zb)
       [real]

  6. diffusivity_pbl

    call diffusivity_pbl (h, u_star, b_star, t, zm, k_m, k_t)
    DESCRIPTION
    Subroutine to return the vertical K-profile of diffusion coefficients for the surface driven convective mixed layer


    INPUT
    h    Depth of surface driven mixed layer (m)
       [real]
    u_star    Friction velocity (m/s)
       [real]
    b_star    Buoyancy scale (m/s2)
       [real]
    t    Liquid water virtual static energy divided by cp (K)
       [real]
    zm    Half level heights relative to the ground (m)
       [real]

    OUTPUT
    k_m    Momentum diffusion coefficient (m2/s)
       [real]
    k_t    Heat and tracer diffusion coefficient (m2/s)
       [real]

  7. entrain_end

    call entrain_end 
    
    DESCRIPTION
    All this module does is to set "module_is_initialized" to false.



DATA SETS

None.


ERROR MESSAGES

None.


top