MOM6
|
Implements the Mesoscale Eddy Kinetic Energy framework with topographic beta effect included in computing beta in Rhines scale.
The MEKE framework accounts for the mean potential energy removed by the first order closures used to parameterize mesoscale eddies. It requires closure at the second order, namely dissipation and transport of eddy energy.
Monitoring the sub-grid scale eddy energy budget provides a means to predict a sub-grid eddy-velocity scale which can be used in the lower order closures.
The eddy kinetic energy equation is:
\[ \partial_\tilde{t} E = \overbrace{ \dot{E}_b + \gamma_\eta \dot{E}_\eta + \gamma_v \dot{E}_v }^\text{sources} - \overbrace{ ( \lambda + C_d | U_d | \gamma_b^2 ) E }^\text{local dissipation} + \overbrace{ \nabla \cdot ( ( \kappa_E + \gamma_M \kappa_M ) \nabla E - \kappa_4 \nabla^3 E ) }^\text{smoothing} \]
where \( E \) is the eddy kinetic energy (variable MEKE
) with units of m2s-2, and \(\tilde{t} = a t\) is a scaled time. The non-dimensional factor \( a\geq 1 \) is used to accelerate towards equilibrium.
The MEKE equation is two-dimensional and obtained by depth averaging the the three-dimensional eddy energy equation. In the following expressions \( \left< \phi \right> = \frac{1}{H} \int^\eta_{-D} \phi \, dz \) maps three dimensional terms into the two-dimensional quantities needed.
The source term \( \dot{E}_b \) is a constant background source of energy intended to avoid the limit \(E\rightarrow 0\).
The "GM" source term
\[ \dot{E}_\eta = - \left< \overline{w^\prime b^\prime} \right> = \left< \kappa_h N^2S^2 \right> \approx \left< \kappa_h g\prime |\nabla_\sigma \eta|^2 \right>\]
equals the mean potential energy removed by the Gent-McWilliams closure, and is excluded/included in the MEKE budget by the efficiency parameter \( \gamma_\eta \in [0,1] \).
The "frictional" source term
\[ \dot{E}_{v} = \left< \partial_i u_j \tau_{ij} \right> \]
equals the mean kinetic energy removed by lateral viscous fluxes, and is excluded/included in the MEKE budget by the efficiency parameter \( \gamma_v \in [0,1] \).
The local dissipation of \( E \) is parameterized through a linear damping, \(\lambda\), and bottom drag, \( C_d | U_d | \gamma_b^2 \). The \( \gamma_b \) accounts for the weak projection of the column-mean eddy velocty to the bottom. In other words, the bottom velocity is estimated as \( \gamma_b U_e \). The bottom drag coefficient, \( C_d \) is the same as that used in the bottom friction in the mean model equations.
The bottom drag velocity scale, \( U_d \), has contributions from the resolved state and \( E \):
\[ U_d = \sqrt{ U_b^2 + |u|^2_{z=-D} + |\gamma_b U_e|^2 } .\]
where the eddy velocity scale, \( U_e \), is given by:
\[ U_e = \sqrt{ 2 E } .\]
\( U_b \) is a constant background bottom velocity scale and is typically not used (i.e. set to zero).
Following Jansen et al., 2015, the projection of eddy energy on to the bottom is given by the ratio of bottom energy to column mean energy:
\[ \gamma_b^2 = \frac{E_b}{E} = \gamma_{d0} + \left( 1 + c_{b} \frac{L_d}{L_f} \right)^{-\frac{4}{5}} , \]
\[ \gamma_b^2 \leftarrow \max{\left( \gamma_b^2, \gamma_{min}^2 \right)} . \]
\( E \) is laterally diffused by a diffusivity \( \kappa_E + \gamma_M \kappa_M \) where \( \kappa_E \) is a constant diffusivity and the term \( \gamma_M \kappa_M \) is a "self diffusion" using the diffusivity calculated in the section Diffusivity derived from MEKE. \( \kappa_4 \) is a constant bi-harmonic diffusivity.
The predicted eddy velocity scale, \( U_e \), can be combined with a mixing length scale to form a diffusivity. The primary use of a MEKE derived diffusivity is for use in thickness diffusion (module mom_thickness_diffuse) and optionally in along isopycnal mixing of tracers (module mom_tracer_hor_diff). The original form used (enabled with MEKE_OLD_LSCALE=True):
\[ \kappa_M = \gamma_\kappa \sqrt{ \gamma_t^2 U_e^2 A_\Delta } \]
where \( A_\Delta \) is the area of the grid cell. Following Jansen et al., 2015, we now use
\[ \kappa_M = \gamma_\kappa l_M \sqrt{ \gamma_t^2 U_e^2 } \]
where \( \gamma_\kappa \in [0,1] \) is a non-dimensional factor and, following Jansen et al., 2015, \(\gamma_t^2\) is the ratio of barotropic eddy energy to column mean eddy energy given by
\[ \gamma_t^2 = \frac{E_t}{E} = \left( 1 + c_{t} \frac{L_d}{L_f} \right)^{-\frac{1}{4}} , \]
\[ \gamma_t^2 \leftarrow \max{\left( \gamma_t^2, \gamma_{min}^2 \right)} . \]
The length-scale is a configurable combination of multiple length scales:
\[ l_M = \left( \frac{\alpha_d}{L_d} + \frac{\alpha_f}{L_f} + \frac{\alpha_R}{L_R} + \frac{\alpha_e}{L_e} + \frac{\alpha_\Delta}{L_\Delta} + \frac{\delta[L_c]}{L_c} \right)^{-1} \]
where
\begin{eqnarray*} L_d & = & \sqrt{\frac{c_g^2}{f^2+2\beta c_g}} \sim \frac{ c_g }{f} \\\\ L_R & = & \sqrt{\frac{U_e}{\beta^*}} \\\\ L_e & = & \frac{U_e}{|S| N} \\\\ L_f & = & \frac{H}{c_d} \\\\ L_\Delta & = & \sqrt{A_\Delta} . \end{eqnarray*}
\(L_c\) is a constant and \(\delta[L_c]\) is the impulse function so that the term \(\frac{\delta[L_c]}{L_c}\) evaluates to \(\frac{1}{L_c}\) when \(L_c\) is non-zero but is dropped if \(L_c=0\).
\(\beta^*\) is the effective \(\beta\) that combines both the planetary vorticity gradient (i.e. \(\beta=\nabla f\)) and the topographic \(\beta\) effect, with the latter weighed by a weighting constant, \(c_\beta\), that varies from 0 to 1, so that \(c_\beta=0\) means the topographic \(\beta\) effect is ignored, while \(c_\beta=1\) means it is fully considered. The new \(\beta^*\) therefore takes the form of
\[ \beta^* = \sqrt{( \partial_xf - c_\beta\frac{f}{D}\partial_xD )^2 + ( \partial_yf - c_\beta\frac{f}{D}\partial_yD )^2} \]
where \(D\) is water column depth at T points.
As for \( \kappa_M \), the predicted eddy velocity scale can be used to form a harmonic eddy viscosity,
\[ \kappa_u = \gamma_u \sqrt{ U_e^2 A_\Delta } \]
as well as a biharmonic eddy viscosity,
\[ \kappa_4 = \gamma_4 \sqrt{ U_e^2 A_\Delta^3 } \]
Note that in steady-state (or when \( a>>1 \)) and there is no diffusion of \( E \) then
\[ \overline{E} \approx \frac{ \dot{E}_b + \gamma_\eta \dot{E}_\eta + \gamma_v \dot{E}_v }{ \lambda + C_d|U_d|\gamma_b^2 } . \]
In the linear drag limit, where \( U_e << \min(U_b, |u|_{z=-D}, C_d^{-1}\lambda) \), the equilibrium becomes \( \overline{E} \approx \frac{ \dot{E}_b + \gamma_\eta \dot{E}_\eta + \gamma_v \dot{E}_v }{ \lambda + C_d \sqrt{ U_b^2 + |u|^2_{z=-D} } } \).
In the nonlinear drag limit, where \( U_e >> \max(U_b, |u|_{z=-D}, C_d^{-1}\lambda) \), the equilibrium becomes \( \overline{E} \approx \left( \frac{ \dot{E}_b + \gamma_\eta \dot{E}_\eta + \gamma_v \dot{E}_v }{ \sqrt{2} C_d \gamma_b^3 } \right)^\frac{2}{3} \).
Symbol | Module parameter |
---|---|
- | USE_MEKE |
\( a \) | MEKE_DTSCALE |
\( \dot{E}_b \) | MEKE_BGSRC |
\( \gamma_\eta \) | MEKE_GMCOEFF |
\( \gamma_v \) | MEKE_FrCOEFF |
\( \lambda \) | MEKE_DAMPING |
\( U_b \) | MEKE_USCALE |
\( \gamma_{d0} \) | MEKE_CD_SCALE |
\( c_{b} \) | MEKE_CB |
\( c_{t} \) | MEKE_CT |
\( \kappa_E \) | MEKE_KH |
\( \kappa_4 \) | MEKE_K4 |
\( \gamma_\kappa \) | MEKE_KHCOEFF |
\( \gamma_M \) | MEKE_KHMEKE_FAC |
\( \gamma_u \) | MEKE_VISCOSITY_COEFF_KU |
\( \gamma_4 \) | MEKE_VISCOSITY_COEFF_AU |
\( \gamma_{min}^2 \) | MEKE_MIN_GAMMA2 |
\( \alpha_d \) | MEKE_ALPHA_DEFORM |
\( \alpha_f \) | MEKE_ALPHA_FRICT |
\( \alpha_R \) | MEKE_ALPHA_RHINES |
\( \alpha_e \) | MEKE_ALPHA_EADY |
\( \alpha_\Delta \) | MEKE_ALPHA_GRID |
\( L_c \) | MEKE_FIXED_MIXING_LENGTH |
\( c_\beta \) | MEKE_TOPOGRAPHIC_BETA |
- | MEKE_KHTH_FAC |
- | MEKE_KHTR_FAC |
Symbol | Model parameter |
---|---|
\( C_d \) | CDRAG |
Jansen, M. F., A. J. Adcroft, R. Hallberg, and I. M. Held, 2015: Parameterization of eddy fluxes based on a mesoscale energy budget. Ocean Modelling, 92, 28–41, http://doi.org/10.1016/j.ocemod.2015.05.007 .
Marshall, D. P., and A. J. Adcroft, 2010: Parameterization of ocean eddies: Potential vorticity mixing, energetics and Arnold first stability theorem. Ocean Modelling, 32, 188–204, http://doi.org/10.1016/j.ocemod.2010.02.001 .
Data Types | |
type | meke_cs |
Control structure that contains MEKE parameters and diagnostics handles. More... | |
Functions/Subroutines | |
subroutine, public | step_forward_meke (MEKE, h, SN_u, SN_v, visc, dt, G, GV, US, CS, hu, hv) |
Integrates forward-in-time the MEKE eddy energy equation. See MEKE equations. More... | |
subroutine | meke_equilibrium (CS, MEKE, G, GV, US, SN_u, SN_v, drag_rate_visc, I_mass) |
Calculates the equilibrium solutino where the source depends only on MEKE diffusivity and there is no lateral diffusion of MEKE. Results is in MEKEMEKE. More... | |
subroutine | meke_equilibrium_restoring (CS, G, US, SN_u, SN_v) |
subroutine | meke_lengthscales (CS, MEKE, G, GV, US, SN_u, SN_v, EKE, bottomFac2, barotrFac2, LmixScale) |
Calculates the eddy mixing length scale and \(\gamma_b\) and \(\gamma_t\) functions that are ratios of either bottom or barotropic eddy energy to the column eddy energy, respectively. See MEKE equations. More... | |
subroutine | meke_lengthscales_0d (CS, US, area, beta, depth, Rd_dx, SN, EKE, bottomFac2, barotrFac2, LmixScale, Lrhines, Leady) |
Calculates the eddy mixing length scale and \(\gamma_b\) and \(\gamma_t\) functions that are ratios of either bottom or barotropic eddy energy to the column eddy energy, respectively. See MEKE equations. More... | |
logical function, public | meke_init (Time, G, US, param_file, diag, CS, MEKE, restart_CS) |
Initializes the MOM_MEKE module and reads parameters. Returns True if module is to be used, otherwise returns False. More... | |
subroutine, public | meke_alloc_register_restart (HI, param_file, MEKE, restart_CS) |
Allocates memory and register restart fields for the MOM_MEKE module. More... | |
subroutine, public | meke_end (MEKE, CS) |
Deallocates any variables allocated in MEKE_init or MEKE_alloc_register_restart. More... | |
subroutine, public mom_meke::meke_alloc_register_restart | ( | type(hor_index_type), intent(in) | HI, |
type(param_file_type), intent(in) | param_file, | ||
type(meke_type), pointer | MEKE, | ||
type(mom_restart_cs), pointer | restart_CS | ||
) |
Allocates memory and register restart fields for the MOM_MEKE module.
[in] | hi | Horizontal index structure |
[in] | param_file | Parameter file parser structure. |
meke | A structure with MEKE-related fields. | |
restart_cs | Restart control structure for MOM_MEKE. |
Definition at line 1342 of file MOM_MEKE.F90.
References mom_error_handler::mom_error(), mom_error_handler::mom_mesg(), and mom_io::var_desc().
Referenced by mom::initialize_mom().
subroutine, public mom_meke::meke_end | ( | type(meke_type), pointer | MEKE, |
type(meke_cs), pointer | CS | ||
) |
Deallocates any variables allocated in MEKE_init or MEKE_alloc_register_restart.
meke | A structure with MEKE-related fields. |
cs | The control structure for MOM_MEKE. |
Definition at line 1422 of file MOM_MEKE.F90.
|
private |
Calculates the equilibrium solutino where the source depends only on MEKE diffusivity and there is no lateral diffusion of MEKE. Results is in MEKEMEKE.
[in,out] | g | Ocean grid. |
[in] | gv | Ocean vertical grid structure. |
[in] | us | A dimensional unit scaling type |
cs | MEKE control structure. | |
meke | A structure with MEKE data. | |
[in] | sn_u | Eady growth rate at u-points [T-1 ~> s-1]. |
[in] | sn_v | Eady growth rate at v-points [T-1 ~> s-1]. |
[in] | drag_rate_visc | Mean flow velocity contribution to the MEKE drag rate [L T-1 ~> m s-1] |
[in] | i_mass | Inverse of column mass [R-1 Z-1 ~> m2 kg-1]. |
Definition at line 640 of file MOM_MEKE.F90.
References meke_lengthscales_0d().
Referenced by step_forward_meke().
|
private |
[in,out] | g | Ocean grid. |
[in] | us | A dimensional unit scaling type. |
cs | MEKE control structure. | |
[in] | sn_u | Eady growth rate at u-points [T-1 ~> s-1]. |
[in] | sn_v | Eady growth rate at v-points [T-1 ~> s-1]. |
Definition at line 802 of file MOM_MEKE.F90.
Referenced by step_forward_meke().
logical function, public mom_meke::meke_init | ( | type(time_type), intent(in) | Time, |
type(ocean_grid_type), intent(inout) | G, | ||
type(unit_scale_type), intent(in) | US, | ||
type(param_file_type), intent(in) | param_file, | ||
type(diag_ctrl), intent(inout), target | diag, | ||
type(meke_cs), pointer | CS, | ||
type(meke_type), pointer | MEKE, | ||
type(mom_restart_cs), pointer | restart_CS | ||
) |
Initializes the MOM_MEKE module and reads parameters. Returns True if module is to be used, otherwise returns False.
[in] | time | The current model time. |
[in,out] | g | The ocean's grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | param_file | Parameter file parser structure. |
[in,out] | diag | Diagnostics structure. |
cs | MEKE control structure. | |
meke | MEKE-related fields. | |
restart_cs | Restart control structure for MOM_MEKE. |
Definition at line 980 of file MOM_MEKE.F90.
References mom_domains::do_group_pass(), mom_error_handler::mom_error(), and mom_error_handler::mom_mesg().
Referenced by mom::initialize_mom().
|
private |
Calculates the eddy mixing length scale and \(\gamma_b\) and \(\gamma_t\) functions that are ratios of either bottom or barotropic eddy energy to the column eddy energy, respectively. See MEKE equations.
cs | MEKE control structure. | |
meke | MEKE data. | |
[in,out] | g | Ocean grid. |
[in] | gv | Ocean vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | sn_u | Eady growth rate at u-points [T-1 ~> s-1]. |
[in] | sn_v | Eady growth rate at v-points [T-1 ~> s-1]. |
[in] | eke | Eddy kinetic energy [L2 T-2 ~> m2 s-2]. |
[out] | bottomfac2 | gamma_b^2 |
[out] | barotrfac2 | gamma_t^2 |
[out] | lmixscale | Eddy mixing length [L ~> m]. |
Definition at line 835 of file MOM_MEKE.F90.
References meke_lengthscales_0d().
Referenced by step_forward_meke().
|
private |
Calculates the eddy mixing length scale and \(\gamma_b\) and \(\gamma_t\) functions that are ratios of either bottom or barotropic eddy energy to the column eddy energy, respectively. See MEKE equations.
cs | MEKE control structure. | |
[in] | us | A dimensional unit scaling type |
[in] | area | Grid cell area [L2 ~> m2] |
[in] | beta | Planetary beta = |grad F| [T-1 L-1 ~> s-1 m-1] |
[in] | depth | Ocean depth [Z ~> m] |
[in] | rd_dx | Resolution Ld/dx [nondim]. |
[in] | sn | Eady growth rate [T-1 ~> s-1]. |
[in] | eke | Eddy kinetic energy [L2 T-2 ~> m2 s-2]. |
[out] | bottomfac2 | gamma_b^2 |
[out] | barotrfac2 | gamma_t^2 |
[out] | lmixscale | Eddy mixing length [L ~> m]. |
[out] | lrhines | Rhines length scale [L ~> m]. |
[out] | leady | Eady length scale [L ~> m]. |
Definition at line 908 of file MOM_MEKE.F90.
Referenced by meke_equilibrium(), and meke_lengthscales().
subroutine, public mom_meke::step_forward_meke | ( | type(meke_type), pointer | MEKE, |
real, dimension( g %isd: g %ied, g %jsd: g %jed, g %ke), intent(in) | h, | ||
real, dimension( g %isdb: g %iedb, g %jsd: g %jed), intent(in) | SN_u, | ||
real, dimension( g %isd: g %ied, g %jsdb: g %jedb), intent(in) | SN_v, | ||
type(vertvisc_type), intent(in) | visc, | ||
real, intent(in) | dt, | ||
type(ocean_grid_type), intent(inout) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(meke_cs), pointer | CS, | ||
real, dimension( g %isdb: g %iedb, g %jsd: g %jed, g %ke), intent(in) | hu, | ||
real, dimension( g %isd: g %ied, g %jsdb: g %jedb, g %ke), intent(in) | hv | ||
) |
Integrates forward-in-time the MEKE eddy energy equation. See MEKE equations.
meke | MEKE data. | |
[in,out] | g | Ocean grid. |
[in] | gv | Ocean vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | h | Layer thickness [H ~> m or kg m-2]. |
[in] | sn_u | Eady growth rate at u-points [T-1 ~> s-1]. |
[in] | sn_v | Eady growth rate at v-points [T-1 ~> s-1]. |
[in] | visc | The vertical viscosity type. |
[in] | dt | Model(baroclinic) time-step [T ~> s]. |
cs | MEKE control structure. | |
[in] | hu | Accumlated zonal mass flux [H L2 ~> m3 or kg]. |
[in] | hv | Accumlated meridional mass flux [H L2 ~> m3 or kg] |
Definition at line 112 of file MOM_MEKE.F90.
References mom_domains::do_group_pass(), meke_equilibrium(), meke_equilibrium_restoring(), meke_lengthscales(), and mom_error_handler::mom_error().
Referenced by mom::step_mom_dynamics().