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