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

Module ocean_vert_mix_coeff_mod

Contact:  A. Rosati
Reviewers:  Bill Large Stephen Griffies M.J. Harrison
Change History: WebCVS Log


OVERVIEW

Vertical viscosity and diffusivity according KPP

This module computes vertical viscosity and diffusivity according to the K-profile parameterization scheme of Large, McWilliams, and Doney (1994). It computes both local and non-local mixing.


OTHER MODULES USED

      constants_mod
diag_manager_mod
fms_mod
mpp_domains_mod
mpp_mod
ocean_density_mod
ocean_domains_mod
ocean_types_mod
ocean_vert_mix_mod
ocean_workspace_mod

PUBLIC INTERFACE

ocean_vert_mix_coeff_init:
vertical_mix_coeff:
bldepth:
wscale:
ri_iwmix:
ddmix:
blmix_kpp:
enhance:
ri_for_kpp:


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. ocean_vert_mix_coeff_init

    DESCRIPTION
    Initialization for the KPP vertical mixing scheme

    input: dzt = thickness of vertical levels (m)
    km = number of vertical levels
    yt = latitude of grid points (deg)
    jmt = number of latitudes
    dtxcel = time step accelerator as a function of level
    dtts = density time step (sec)
    dtuv = internal mode time step (sec)
    error = logical to signal problems
    cifdef = array of character strings for listing enabled "ifdefs"
    ifdmax = size of "cifdef"
    nifdef = current number of enabled "ifdefs"
    vmixset= logical to determine if a vertical mixing scheme was
    chosen

    output: lri = logical switch for shear instability mixing
    double_diffusion = logical switch for double-diffusive mixing
    visc_cbu_limit = visc max due to shear instability (m**2/sec)
    diff_cbt_limit = diffusivity .. (m**2/sec)
    visc_cbu_iw = visc background due to internal waves(m**2/sec)
    diff_cbt_iw = diffusivity .. (m**2/sec)
    visc_con_limit = visc due to convective instability (m**2/sec)
    diff_con_limit = diffusivity .. (m**2/sec)
    Vtc = non-dimensional constant used in calc. bulk Ri
    cg = constant used in calc.nonlocal transport term
    wmt = turbulent velocity scale for momentum
    wst = turbulent velocity scale for scaler
    error = true if some inconsistancy was found



  2. vertical_mix_coeff

    DESCRIPTION
    This subroutine computes the vertical diffusivity and viscosity according to the KPP scheme of Large etal. In brief, the scheme does the following:

    --Compute interior mixing everywhere: interior mixing gets computed at all cell interfaces due to constant internal wave background activity ("visc_cbu_iw" and "diff_cbt_iw"). Mixing is enhanced in places of static instability (local Ri < 0). Additionally, mixing can be enhanced by contribution from shear instability which is a function of the local Ri.

    --Double diffusion: Interior mixing can be enhanced by double diffusion due to salt fingering and diffusive convection ("double_diffusion=.true.").

    --Boundary layer:

    (A) Boundary layer depth: at every gridpoint the depth of the oceanic boundary layer ("hbl") gets computed by evaluating bulk richardson numbers.

    (B) Boundary layer mixing: within the boundary layer, above hbl, vertical mixing is determined by turbulent surface fluxes, and interior mixing at the lower boundary, i.e. at hbl.

    inputs

    f = Coriolis parameter (1/s)
    jwtype = Jerlov water type (1 to 5)
    outputs

    hbl = boundary layer depth (meters)

    visc_cbu = viscosity coefficient at bottom of U cells (m^2/s)
    diff_cbt = diffusion coefficient at bottom of T cells (m^2/s)


  3. bldepth

    DESCRIPTION
    The oceanic planetray boundary layer depth, hbl, is determined as the shallowest depth where the bulk richardson number is equal to the critical value, Ricr.

    Bulk Richardson numbers are evaluated by computing velocity and buoyancy differences between values at zt(kl) and surface reference values.

    In this configuration, the reference values are equal to the values in the surface layer. When using a very fine vertical grid, these values should be computed as the vertical average of velocity and buoyancy from the surface down to epsilon*zt(kl).

    When the bulk richardson number at k exceeds Ricr, hbl is linearly interpolated between grid levels zt(k) and zt(k-1).

    The water column and the surface forcing are diagnosed for stable/ustable forcing conditions, and where hbl is relative to grid points (caseA), so that conditional branches can be avoided in later subroutines.

    model real zt(1:nk) = vertical grid (m)
    real dzt(1:nk) = layer thicknesses (m)
    input real dbloc(ij_bounds,nk) = local delta buoyancy (m/s^2)
    real dbsfc(ij_bounds,nk) = delta buoyancy w/ respect to sfc(m/s)^2
    real ustar(ij_bounds) = surface friction velocity (m/s)
    real Bo(ij_bounds) = surface turbulent buoyancy forcing(m^2/s^3)
    real Bosol(ij_bounds) = radiative buoyancy forcing (m^2/s^3)
    real f(ij_bounds) = Coriolis parameter (1/s)
    integer jwtype(ij_bounds) = Jerlov water type (1 to 5)
    output real hbl(ij_bounds) ! boundary layer depth (m)
    real bfsfc(ij_bounds) !Bo+radiation absorbed to d=hbf*hbl(m^2/s^3)
    real stable(ij_bounds) ! =1 in stable forcing; =0 unstable
    real caseA(ij_bounds) ! =1 in case A, =0 in case B
    integer kbl(ij_bounds) ! index of first grid level below hbl


  4. wscale

    DESCRIPTION
    Compute turbulent velocity scales. Use a 2D-lookup table for wm and ws as functions of ustar and zetahat (=vonk*sigma*hbl*bfsfc).

    Note: the lookup table is only used for unstable conditions (zehat <= 0), in the stable domain wm (=ws) gets computed directly.

    model

    input
    real sigma(ij_bounds) = normalized depth (d/hbl)
    real hbl(ij_bounds) = boundary layer depth (m)
    real ustar(ij_bounds) = surface friction velocity (m/s)
    real bfsfc(ij_bounds) = total surface buoyancy flux (m^2/s^3)
    output
    real wm(ij_bounds),ws(ij_bounds) ! turbulent velocity scales at sigma local
    real zehat ! = zeta * ustar**3



  5. ri_iwmix

    DESCRIPTION
    Compute interior viscosity and diffusivity due to shear instability (dependent on a local richardson number), to background internal wave activity, and to static instability (local richardson number < 0).

    inputs:

    nk = number of vertical levels
    visc_cbu_iw = background "visc_cbu" (m**2/sec) due to internal waves
    diff_cbt_iw = background "diff_cbt" (m**2/sec) due to internal waves
    visc_cbu_limit = largest "visc_cbu" in regions of gravitational
    instability (m**2/sec)
    diff_cbt_limit = largest "diff_cbt" in regions of gravitational
    instability (m**2/sec)

    outputs:

    visc_cbu = viscosity coefficient at bottom of "u" cells (m**2/s)
    diff_cbt = diffusion coefficient at bottom of "t" cells (m**2/s)


  6. ddmix

    DESCRIPTION
    Rrho dependent interior flux parameterization. Add double-diffusion diffusivities to Ri-mix values at blending interface and below. salt fingering code modified july 2003 by stephen.griffies@noaa.gov based on NCAR CCSM2.x

    inputs:

    nk = number of vertical levels
    real talpha(imt,km,jmw) ! d(rho)/ d(pot.temperature) (kg/m^3/C)
    real sbeta(imt,km,jmw) ! d(rho)/ d(salinity) (kg/m^3/PSU)

    outputs:

    diff_cbt = diffusion coefficient at bottom of "t" cells (m**2/s)

    local

    real alphaDT(imt,km,jmw) ! alpha * DT across interfaces
    real betaDS(imt,km,jmw) ! beta * DS across interfaces


  7. blmix_kpp

    DESCRIPTION
    Mixing coefficients within boundary layer depend on surface forcing and the magnitude and gradient of interior mixing below the boundary layer ("matching").

    CAUTION: if mixing bottoms out at hbl = zt(nk) then fictitious layer at nk+1 is needed with small but finite width dzt(nk+1) (eg. epsln = 1.e-20).

    inputs:

    real ustar(ij_bounds) ! surface friction velocity (m/s)
    real bfsfc(ij_bounds) ! surface buoyancy forcing (m^2/s^3)
    real hbl(ij_bounds) ! boundary layer depth (m)
    real stable(ij_bounds) ! = 1 in stable forcing
    real caseA(ij_bounds) ! = 1 in case A
    integer kbl(ij_bounds) ! index of first grid level below hbl

    outputs:

    visc_cbu = viscosity coefficient at bottom of "u" cells (m**2/s)
    diff_cbt = diffusion coefficient at bottom of "t" cells (m**2/s)
    real dkm1(ij_bounds,3) = boundary layer diff_cbt at kbl-1 level
    real blmc(ij_bounds,nk,3) = boundary layer mixing coeff.(m**2/s)
    real ghats(ij_bounds,nk) = nonlocal scalar transport
    local:

    real gat1(ij_bounds,3)
    real dat1(ij_bounds,3)
    real sigma(ij_bounds) = normalized depth (d / hbl)
    real ws(ij_bounds), wm(ij_bounds) = turbulent velocity scales (m/s)



  8. enhance

    DESCRIPTION
    Enhance the diffusivity at the kbl-.5 interface

    input integer kbl(ij_bounds) = grid above hbl
    real hbl(ij_bounds) = boundary layer depth (m)
    real dkm1(ij_bounds,3) = bl diffusivity at kbl-1 grid level
    real caseA(ij_bounds) = 1 in caseA, = 0 in case B

    input/output real ghats(ij_bounds,nk) = nonlocal transport (s/m**2)
    modified ghats at kbl(i)-1 interface output real blmc(ij_bounds,nk,3) = enhanced boundary layer mixing coefficient

    local real delta = fraction hbl lies beteen zt neighbors



  9. ri_for_kpp

    DESCRIPTION
    Compute Richardson number on tracer and velocity cell bottoms. rit = richardson number at bottom of T cells
    riu = richardson number at bottom of U cells



NAMELIST

&ocean_vert_mix_coeff_kpp_nml

diffusion_kpp_on
Logical switch to enable kpp diffusion. Default is true.
[logical]
lri
logical switch for shear instability mixing
[logical]
double_diffusion
Logical switch for double-diffusive mixing. Default is true.
[logical]
diff_cbt_iw
Background vertical diffusivity. Note that if using Bryan-Lewis as a background diffusivity, then should set diff_cbt_iw=0.0.
[real, units: m^2/sec]
visc_cbu_iw
Background vertical viscosity
[real, units: m^2/sec]
visc_cbu_limit
Enhanced vertical viscosity due to shear instability
[real, units: m^2/sec]
diff_cbt_limit
Enhanced vertical diffusivity due to shear instability
[real, units: m^2/sec]
visc_con_limit
Enhanced vertical viscosity in regions of convection
[real, units: m^2/sec]
diff_con_limit
Enhanced vertical diffusivity in regions of convection
[real, units: m^2/sec]
concv
constant for pure convection (eqn. 23 of Large etal)
[real, units: dimensionless]
Ricr
Critical bulk Richardson number. Default from NCAR is 0.3, though this number has a large uncertainty and some find that 1.0 can be of use.
[real, units: dimensionless]
non_local_kpp
logical switch for enabling the non-local mixing aspect of kpp. Default is .true. as this is what the original KPP scheme suggests.
[logical]
smooth_blmc
Smooth boundary layer diffusitivies to remove grid scale noise. Such noise is apparent in the diagnosed mixed layer depth as well as the SST, especially when running coupled models where forcing has high temporal frequency.
[logical]


DATA SETS

None.


ERROR MESSAGES

None.


REFERENCES

  1. W.G. Large and J.C. McWilliams and S.C. Doney Oceanic vertical mixing: A review and a model with a nonlocal boundary layer parameterization Reviews of Geophysics (1994) vol 32 pages 363-403


COMPILER SPECIFICS

None.


PRECOMPILER OPTIONS

None.


LOADER OPTIONS

None.


TEST PROGRAM

None.


KNOWN BUGS

None.


NOTES

Original numerical algorithm by Bill Large at NCAR June 6, 1994

Equation numbers in the code refer to the Large etal paper.

Surface fresh water contributes to surface buoyancy via conversion to a locally implied salt flux.


FUTURE PLANS

None.


top