mom_mixed_layer_restrat module reference

Parameterization of mixed layer restratification by unresolved mixed-layer eddies.

More…

Data Types

mixedlayer_restrat_cs

Control structure for mom_mixed_layer_restrat().

Functions/Subroutines

mixedlayer_restrat()

Driver for the mixed-layer restratification parameterization.

mixedlayer_restrat_general()

Calculates a restratifying flow in the mixed layer.

mixedlayer_restrat_bml()

Calculates a restratifying flow assuming a 2-layer bulk mixed layer.

mixedlayer_restrat_init()

Initialize the mixed layer restratification module.

mixedlayer_restrat_register_restarts()

Allocate and register fields in the mixed layer restratification structure for restarts.

Detailed Description

Mixed-layer eddy parameterization module

The subroutines in this file implement a parameterization of unresolved viscous mixed layer restratification of the mixed layer as described in Fox-Kemper et al., 2008, and whose impacts are described in Fox-Kemper et al., 2011. This is derived in part from the older parameterization that is described in Hallberg (Aha Hulikoa, 2003), which this new parameterization surpasses, which in turn is based on the sub-inertial mixed layer theory of Young (JPO, 1994). There is no net horizontal volume transport due to this parameterization, and no direct effect below the mixed layer.

This parameterization sets the restratification timescale to agree with high-resolution studies of mixed layer restratification.

The run-time parameter FOX_KEMPER_ML_RESTRAT_COEF is a non-dimensional number of order a few tens, proportional to the ratio of the deformation radius or the grid scale (whichever is smaller to the dominant horizontal length-scale of the sub-meso-scale mixed layer instabilities.

“Sub-meso” in a nutshell

The parameterization is colloquially referred to as “sub-meso”.

The original Fox-Kemper et al., (2008b) paper proposed a quasi-Stokes advection described by the stream function (eq. 5 of Fox-Kemper et al., 2011):

\[{\bf \Psi}_o = C_e \frac{ H^2 \nabla \bar{b} \times \hat{\bf z} }{ |f| } \mu(z)\]

where the vertical profile function is

\[\mu(z) = \max \left\{ 0, \left[ 1 - \left(\frac{2z}{H}+1\right)^2 \right] \left[ 1 + \frac{5}{21} \left(\frac{2z}{H}+1\right)^2 \right] \right\}\]

and \(H\) is the mixed-layer depth, \(f\) is the local Coriolis parameter, \(C_e \sim 0.06-0.08\) and \(\nabla \bar{b}\) is a depth mean buoyancy gradient averaged over the mixed layer.

For use in coarse-resolution models, an upscaling of the buoyancy gradients and adaption for the equator leads to the following parameterization (eq. 6 of Fox-Kemper et al., 2011):

\[{\bf \Psi} = C_e \Gamma_\Delta \frac{\Delta s}{l_f} \frac{ H^2 \nabla \bar{b} \times \hat{\bf z} } { \sqrt{ f^2 + \tau^{-2}} } \mu(z)\]

where \(\Delta s\) is the minimum of grid-scale and deformation radius, \(l_f\) is the width of the mixed-layer fronts, and \(\Gamma_\Delta=1\). \(\tau\) is a time-scale for mixing momentum across the mixed layer. \(l_f\) is thought to be of order hundreds of meters.

The upscaling factor \(\frac{\Delta s}{l_f}\) can be a global constant, model parameter FOX_KEMPER_ML_RESTRAT, so that in practice the parameterization is:

\[{\bf \Psi} = C_e \Gamma_\Delta \frac{ H^2 \nabla \bar{b} \times \hat{\bf z} }{ \sqrt{ f^2 + \tau^{-2}} } \mu(z)\]

with non-unity \(\Gamma_\Delta\).

\(C_e\) is hard-coded as 0.0625. \(\tau\) is calculated from the surface friction velocity \(u^*\). .. admonition:: Todo

Explain expression for momentum mixing time-scale.

Time-filtering of mixed-layer depth

Using the instantaneous mixed-layer depth is inconsistent with the finite life-time of mixed-layer instabilities. We provide a one-sided running-mean filter of mixed-layer depth, \(H\), of the form:

\[\bar{H} \leftarrow \max \left( H, \frac{ \Delta t H + \tau_h \bar{H} }{ \Delta t + \tau_h } \right)\]

which allows the effective mixed-layer depth seen by the parameterization, \(\bar{H}\), to instantaneously deepen but to decay with time-scale \(\tau_h\). \(\bar{H}\) is substituted for \(H\) in the above equations.

Defining the mixed-layer-depth

If the parameter MLE_USE_PBL_MLD=True then the mixed-layer depth is defined/diagnosed by the boundary-layer parameterization (e.g. ePBL, KPP, etc.).

If the parameter MLE_USE_PBL_MLD=False then the mixed-layer depth is diagnosed in this module as the depth of a given density difference, \(\Delta \rho\), with the surface where the density difference is the parameter MLE_DENSITY_DIFF.

References

Fox-Kemper, B., Ferrari, R. and Hallberg, R., 2008: Parameterization of Mixed Layer Eddies. Part I: Theory and Diagnosis J. Phys. Oceangraphy, 38 (6), p1145-1165. https://doi.org/10.1175/2007JPO3792.1

Fox-Kemper, B. and Ferrari, R. 2008: Parameterization of Mixed Layer Eddies. Part II: Prognosis and Impact J. Phys. Oceangraphy, 38 (6), p1166-1179. https://doi.org/10.1175/2007JPO3788.1

B. Fox-Kemper, G. Danabasoglu, R. Ferrari, S.M. Griffies, R.W. Hallberg, M.M. Holland, M.E. Maltrud, S. Peacock, and B.L. Samuels, 2011: Parameterization of mixed layer eddies. III: Implementation and impact in global ocean climate simulations. Ocean Modell., 39(1), p61-78. https://doi.org/10.1016/j.ocemod.2010.09.002

Symbol

Module parameter

\(\Gamma_\Delta\)

FOX_KEMPER_ML_RESTRAT

\(l_f\)

MLE_FRONT_LENGTH

\(\tau_h\)

MLE_MLD_DECAY_TIME

\(\Delta \rho\)

MLE_DENSITY_DIFF

Type Documentation

type mom_mixed_layer_restrat/mixedlayer_restrat_cs

Control structure for mom_mixed_layer_restrat(). .

Type fields
  • % id_urestrat_time [integer] :: Diagnostic identifier.

  • % id_vrestrat_time [integer] :: Diagnostic identifier.

  • % id_uhml [integer] :: Diagnostic identifier.

  • % id_vhml [integer] :: Diagnostic identifier.

  • % id_mld [integer] :: Diagnostic identifier.

  • % id_rml [integer] :: Diagnostic identifier.

  • % id_udml [integer] :: Diagnostic identifier.

  • % id_vdml [integer] :: Diagnostic identifier.

  • % id_uml [integer] :: Diagnostic identifier.

  • % id_vml [integer] :: Diagnostic identifier.

  • % ml_restrat_coef [real] :: A non-dimensional factor by which the instability is enhanced over what would be predicted based on the resolved gradients [nondim]. This increases with grid spacing^2, up to something of order 500.

  • % ml_restrat_coef2 [real] :: As for ml_restrat_coef but using the slow filtered MLD [nondim].

  • % front_length [real] :: If non-zero, is the frontal-length scale [L ~> m] used to calculate the upscaling of buoyancy gradients that is otherwise represented by the parameter FOX_KEMPER_ML_RESTRAT_COEF. If MLE_FRONT_LENGTH is non-zero, it is recommended to set FOX_KEMPER_ML_RESTRAT_COEF=1.0.

  • % mle_use_pbl_mld [logical] :: If true, use the MLD provided by the PBL parameterization. if false, MLE will calculate a MLD based on a density difference based on the parameter MLE_DENSITY_DIFF.

  • % mle_mld_decay_time [real] :: Time-scale to use in a running-mean when MLD is retreating [T ~> s].

  • % mle_mld_decay_time2 [real] :: Time-scale to use in a running-mean when filtered MLD is retreating [T ~> s].

  • % mle_density_diff [real] :: Density difference used in detecting mixed-layer depth [R ~> kg m-3].

  • % mle_tail_dh [real] :: Fraction by which to extend the mixed-layer restratification depth used for a smoother stream function at the base of the mixed-layer [nondim].

  • % mle_mld_stretch [real] :: A scaling coefficient for stretching/shrinking the MLD used in the MLE scheme [nondim]. This simply multiplies MLD wherever used.

  • % debug [logical] :: If true, calculate checksums of fields for debugging.

  • % diag [type(diag_ctrl),pointer] :: A structure that is used to regulate the timing of diagnostic output.

  • % mld_filtered [real(:,:),pointer] :: Time-filtered MLD [H ~> m or kg m-2].

  • % mld_filtered_slow [real(:,:),pointer] :: Slower time-filtered MLD [H ~> m or kg m-2].

Function/Subroutine Documentation

subroutine mom_mixed_layer_restrat/mixedlayer_restrat(h, uhtr, vhtr, tv, forces, dt, MLD, VarMix, G, GV, US, CS)

Driver for the mixed-layer restratification parameterization. The code branches between two different implementations depending on whether the bulk-mixed layer or a general coordinate are in use.

Parameters
  • g :: [inout] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • h :: [inout] Layer thickness [H ~> m or kg m-2]

  • uhtr :: [inout] Accumulated zonal mass flux [H L2 ~> m3 or kg]

  • vhtr :: [inout] Accumulated meridional mass flux [H L2 ~> m3 or kg]

  • tv :: [in] Thermodynamic variables structure

  • forces :: [in] A structure with the driving mechanical forces

  • dt :: [in] Time increment [T ~> s]

  • mld :: Mixed layer depth provided by the PBL scheme [Z ~> m]

  • varmix :: Container for derived fields

  • cs :: Module control structure

Call to

mixedlayer_restrat_bml mixedlayer_restrat_general mom_error_handler::mom_error

subroutine mom_mixed_layer_restrat/mixedlayer_restrat_general(h, uhtr, vhtr, tv, forces, dt, MLD_in, VarMix, G, GV, US, CS)

Calculates a restratifying flow in the mixed layer.

Parameters
  • g :: [inout] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • h :: [inout] Layer thickness [H ~> m or kg m-2]

  • uhtr :: [inout] Accumulated zonal mass flux [H L2 ~> m3 or kg]

  • vhtr :: [inout] Accumulated meridional mass flux [H L2 ~> m3 or kg]

  • tv :: [in] Thermodynamic variables structure

  • forces :: [in] A structure with the driving mechanical forces

  • dt :: [in] Time increment [T ~> s]

  • mld_in :: Mixed layer depth provided by the PBL scheme [Z ~> m] (not H)

  • varmix :: Container for derived fields

  • cs :: Module control structure

Call to

mom_diag_mediator::diag_update_remap_grids mom_eos::eos_domain mom_error_handler::mom_error

Called from

mixedlayer_restrat

subroutine mom_mixed_layer_restrat/mixedlayer_restrat_bml(h, uhtr, vhtr, tv, forces, dt, G, GV, US, CS)

Calculates a restratifying flow assuming a 2-layer bulk mixed layer.

Parameters
  • g :: [in] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • h :: [inout] Layer thickness [H ~> m or kg m-2]

  • uhtr :: [inout] Accumulated zonal mass flux [H L2 ~> m3 or kg]

  • vhtr :: [inout] Accumulated meridional mass flux [H L2 ~> m3 or kg]

  • tv :: [in] Thermodynamic variables structure

  • forces :: [in] A structure with the driving mechanical forces

  • dt :: [in] Time increment [T ~> s]

  • cs :: Module control structure

Call to

mom_diag_mediator::diag_update_remap_grids mom_eos::eos_domain mom_error_handler::mom_error

Called from

mixedlayer_restrat

function mom_mixed_layer_restrat/mixedlayer_restrat_init(Time, G, GV, US, param_file, diag, CS, restart_CS) [logical]

Initialize the mixed layer restratification module.

Parameters
  • time :: [in] Current model time

  • g :: [inout] Ocean grid structure

  • gv :: [in] Ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • param_file :: [in] Parameter file to parse

  • diag :: [inout] Regulate diagnostics

  • cs :: Module control structure

  • restart_cs :: A pointer to the restart control structure

Call to

mdl mom_error_handler::mom_error

subroutine mom_mixed_layer_restrat/mixedlayer_restrat_register_restarts(HI, param_file, CS, restart_CS)

Allocate and register fields in the mixed layer restratification structure for restarts.

Parameters
  • hi :: [in] Horizontal index structure

  • param_file :: [in] Parameter file to parse

  • cs :: Module control structure

  • restart_cs :: A pointer to the restart control structure

Call to

mdl mom_error_handler::mom_error mom_io::var_desc