MOM6
|
Parameterization of mixed layer restratification by unresolved mixed-layer eddies.
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.
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^* \).
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.
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.
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 |
Data Types | |
type | mixedlayer_restrat_cs |
Control structure for mom_mixed_layer_restrat. More... | |
Functions/Subroutines | |
subroutine, public | 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. More... | |
subroutine | mixedlayer_restrat_general (h, uhtr, vhtr, tv, forces, dt, MLD_in, VarMix, G, GV, US, CS) |
Calculates a restratifying flow in the mixed layer. More... | |
subroutine | mixedlayer_restrat_bml (h, uhtr, vhtr, tv, forces, dt, G, GV, US, CS) |
Calculates a restratifying flow assuming a 2-layer bulk mixed layer. More... | |
logical function, public | mixedlayer_restrat_init (Time, G, GV, US, param_file, diag, CS, restart_CS) |
Initialize the mixed layer restratification module. More... | |
subroutine, public | mixedlayer_restrat_register_restarts (HI, param_file, CS, restart_CS) |
Allocate and register fields in the mixed layer restratification structure for restarts. More... | |
Variables | |
character(len=40) | mdl = "MOM_mixed_layer_restrat" |
This module's name. More... | |
subroutine, public mom_mixed_layer_restrat::mixedlayer_restrat | ( | real, dimension(szi_(g),szj_(g),szk_(g)), intent(inout) | h, |
real, dimension(szib_(g),szj_(g),szk_(g)), intent(inout) | uhtr, | ||
real, dimension(szi_(g),szjb_(g),szk_(g)), intent(inout) | vhtr, | ||
type(thermo_var_ptrs), intent(in) | tv, | ||
type(mech_forcing), intent(in) | forces, | ||
real, intent(in) | dt, | ||
real, dimension(:,:), pointer | MLD, | ||
type(varmix_cs), pointer | VarMix, | ||
type(ocean_grid_type), intent(inout) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(mixedlayer_restrat_cs), pointer | 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.
[in,out] | g | Ocean grid structure |
[in] | gv | Ocean vertical grid structure |
[in] | us | A dimensional unit scaling type |
[in,out] | h | Layer thickness [H ~> m or kg m-2] |
[in,out] | uhtr | Accumulated zonal mass flux [H L2 ~> m3 or kg] |
[in,out] | vhtr | Accumulated meridional mass flux [H L2 ~> m3 or kg] |
[in] | tv | Thermodynamic variables structure |
[in] | forces | A structure with the driving mechanical forces |
[in] | dt | Time increment [T ~> s] |
mld | Mixed layer depth provided by the PBL scheme [H ~> m or kg m-2] | |
varmix | Container for derived fields | |
cs | Module control structure |
Definition at line 92 of file MOM_mixed_layer_restrat.F90.
References mixedlayer_restrat_bml(), mixedlayer_restrat_general(), and mom_error_handler::mom_error().
|
private |
Calculates a restratifying flow assuming a 2-layer bulk mixed layer.
[in] | g | Ocean grid structure |
[in] | gv | Ocean vertical grid structure |
[in] | us | A dimensional unit scaling type |
[in,out] | h | Layer thickness [H ~> m or kg m-2] |
[in,out] | uhtr | Accumulated zonal mass flux [H L2 ~> m3 or kg] |
[in,out] | vhtr | Accumulated meridional mass flux [H L2 ~> m3 or kg] |
[in] | tv | Thermodynamic variables structure |
[in] | forces | A structure with the driving mechanical forces |
[in] | dt | Time increment [T ~> s] |
cs | Module control structure |
Definition at line 565 of file MOM_mixed_layer_restrat.F90.
References mom_diag_mediator::diag_update_remap_grids(), and mom_error_handler::mom_error().
Referenced by mixedlayer_restrat().
|
private |
Calculates a restratifying flow in the mixed layer.
[in,out] | g | Ocean grid structure |
[in] | gv | Ocean vertical grid structure |
[in] | us | A dimensional unit scaling type |
[in,out] | h | Layer thickness [H ~> m or kg m-2] |
[in,out] | uhtr | Accumulated zonal mass flux [H L2 ~> m3 or kg] |
[in,out] | vhtr | Accumulated meridional mass flux [H L2 ~> m3 or kg] |
[in] | tv | Thermodynamic variables structure |
[in] | forces | A structure with the driving mechanical forces |
[in] | dt | Time increment [T ~> s] |
mld_in | Mixed layer depth provided by the PBL scheme [m] (not H) | |
varmix | Container for derived fields | |
cs | Module control structure |
Definition at line 121 of file MOM_mixed_layer_restrat.F90.
References mom_diag_mediator::diag_update_remap_grids(), and mom_error_handler::mom_error().
Referenced by mixedlayer_restrat().
logical function, public mom_mixed_layer_restrat::mixedlayer_restrat_init | ( | type(time_type), intent(in) | Time, |
type(ocean_grid_type), intent(inout) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(param_file_type), intent(in) | param_file, | ||
type(diag_ctrl), intent(inout), target | diag, | ||
type(mixedlayer_restrat_cs), pointer | CS, | ||
type(mom_restart_cs), pointer | restart_CS | ||
) |
Initialize the mixed layer restratification module.
[in] | time | Current model time |
[in,out] | g | Ocean grid structure |
[in] | gv | Ocean vertical grid structure |
[in] | us | A dimensional unit scaling type |
[in] | param_file | Parameter file to parse |
[in,out] | diag | Regulate diagnostics |
cs | Module control structure | |
restart_cs | A pointer to the restart control structure |
Definition at line 797 of file MOM_mixed_layer_restrat.F90.
References mdl, and mom_error_handler::mom_error().
Referenced by mixedlayer_restrat_register_restarts().
subroutine, public mom_mixed_layer_restrat::mixedlayer_restrat_register_restarts | ( | type(hor_index_type), intent(in) | HI, |
type(param_file_type), intent(in) | param_file, | ||
type(mixedlayer_restrat_cs), pointer | CS, | ||
type(mom_restart_cs), pointer | restart_CS | ||
) |
Allocate and register fields in the mixed layer restratification structure for restarts.
[in] | hi | Horizontal index structure |
[in] | param_file | Parameter file to parse |
cs | Module control structure | |
restart_cs | A pointer to the restart control structure |
Definition at line 950 of file MOM_mixed_layer_restrat.F90.
References mdl, mixedlayer_restrat_init(), mom_error_handler::mom_error(), and mom_io::var_desc().
Referenced by mom::initialize_mom().
character(len=40) mom_mixed_layer_restrat::mdl = "MOM_mixed_layer_restrat" |
This module's name.
Definition at line 84 of file MOM_mixed_layer_restrat.F90.
Referenced by mixedlayer_restrat_init(), and mixedlayer_restrat_register_restarts().