MOM6
|
Variable mixing coefficients.
This module provides a container for various factors used in prescribing diffusivities, that are a function of the state (in particular the stratification and isoneutral slopes).
The resolution function is expressed in terms of the ratio of grid-spacing to deformation radius. The square of the resolution parameter is
\[ R^2 = \frac{L_d^2}{\Delta^2} = \frac{ c_g^2 }{ f^2 \Delta^2 + c_g \beta \Delta^2 } \]
where the grid spacing is calculated as
\[ \Delta^2 = \Delta x^2 + \Delta y^2 . \]
\[ r(\Delta,L_d) = \frac{1}{1+(\alpha R)^p} \]
The resolution function can be applied independently to thickness diffusion (module mom_thickness_diffuse), tracer diffusion (mom_tracer_hordiff) lateral viscosity (mom_hor_visc).
Robert Hallberg, 2013: Using a resolution function to regulate parameterizations of oceanic mesoscale eddy effects. Ocean Modelling, 71, pp 92-103. http://dx.doi.org/10.1016/j.ocemod.2013.08.007
Symbol | Module parameter |
---|---|
- | USE_VARIABLE_MIXING |
- | RESOLN_SCALED_KH |
- | RESOLN_SCALED_KHTH |
- | RESOLN_SCALED_KHTR |
\( \alpha \) | KH_RES_SCALE_COEF (for thickness and tracer diffusivity) |
\( p \) | KH_RES_FN_POWER (for thickness and tracer diffusivity) |
\( \alpha \) | VISC_RES_SCALE_COEF (for lateral viscosity) |
\( p \) | VISC_RES_FN_POWER (for lateral viscosity) |
- | GILL_EQUATORIAL_LD |
This module also calculates factors used in setting the thickness diffusivity similar to a Visbeck et al., 1997, scheme. The factors are combined in mom_thickness_diffuse::thickness_diffuse() but calculated in this module.
\[ \kappa_h = \alpha_s L_s^2 S N \]
where \(S\) is the magnitude of the isoneutral slope and \(N\) is the Brunt-Vaisala frequency.
Visbeck, Marshall, Haine and Spall, 1997: Specification of Eddy Transfer Coefficients in Coarse-Resolution Ocean Circulation Models. J. Phys. Oceanogr. http://dx.doi.org/10.1175/1520-0485(1997)027%3C0381:SOETCI%3E2.0.CO;2
Symbol | Module parameter |
---|---|
- | USE_VARIABLE_MIXING |
\( \alpha_s \) | KHTH_SLOPE_CFF (for mom_thickness_diffuse module) |
\( \alpha_s \) | KHTR_SLOPE_CFF (for mom_tracer_hordiff module) |
\( L_{s} \) | VISBECK_L_SCALE |
\( S_{max} \) | VISBECK_MAX_SLOPE |
The thickness diffusivity can be prescribed a vertical distribution with the shape of the equivalent barotropic velocity mode. The structure function is stored in the control structure for thie module (varmix_cs) but is calculated using subroutines in mom_wave_speed.
Symbol | Module parameter |
---|---|
- | KHTH_USE_EBT_STRUCT |
Data Types | |
type | varmix_cs |
Variable mixing coefficients. More... | |
Functions/Subroutines | |
subroutine, public | calc_depth_function (G, CS) |
Calculates the non-dimensional depth functions. More... | |
subroutine, public | calc_resoln_function (h, tv, G, GV, US, CS) |
Calculates and stores the non-dimensional resolution functions. More... | |
subroutine, public | calc_slope_functions (h, tv, dt, G, GV, US, CS) |
Calculates and stores functions of isopycnal slopes, e.g. Sx, Sy, S*N, mostly used in the Visbeck et al. style scaling of diffusivity. More... | |
subroutine | calc_visbeck_coeffs (h, slope_x, slope_y, N2_u, N2_v, G, GV, US, CS) |
Calculates factors used when setting diffusivity coefficients similar to Visbeck et al. More... | |
subroutine | calc_slope_functions_using_just_e (h, G, GV, US, CS, e, calculate_slopes) |
The original calc_slope_function() that calculated slopes using interface positions only, not accounting for density variations. More... | |
subroutine, public | calc_qg_leith_viscosity (CS, G, GV, US, h, k, div_xx_dx, div_xx_dy, vort_xy_dx, vort_xy_dy) |
Calculates the Leith Laplacian and bi-harmonic viscosity coefficients. More... | |
subroutine, public | varmix_init (Time, G, GV, US, param_file, diag, CS) |
Initializes the variables mixing coefficients container. More... | |
subroutine, public mom_lateral_mixing_coeffs::calc_depth_function | ( | type(ocean_grid_type), intent(in) | G, |
type(varmix_cs), pointer | CS | ||
) |
Calculates the non-dimensional depth functions.
[in] | g | Ocean grid structure |
cs | Variable mixing coefficients |
Definition at line 159 of file MOM_lateral_mixing_coeffs.F90.
References mom_error_handler::mom_error().
Referenced by mom::step_mom(), and mom::step_offline().
subroutine, public mom_lateral_mixing_coeffs::calc_qg_leith_viscosity | ( | type(varmix_cs), pointer | CS, |
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
real, dimension(szi_(g),szj_(g),szk_(g)), intent(inout) | h, | ||
integer, intent(in) | k, | ||
real, dimension(szib_(g),szj_(g)), intent(in) | div_xx_dx, | ||
real, dimension(szi_(g),szjb_(g)), intent(in) | div_xx_dy, | ||
real, dimension(szi_(g),szjb_(g)), intent(inout) | vort_xy_dx, | ||
real, dimension(szib_(g),szj_(g)), intent(inout) | vort_xy_dy | ||
) |
Calculates the Leith Laplacian and bi-harmonic viscosity coefficients.
cs | Variable mixing coefficients | |
[in] | g | Ocean grid structure |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in,out] | h | Layer thickness [H ~> m or kg m-2] |
[in] | k | Layer for which to calculate vorticity magnitude |
[in] | div_xx_dx | x-derivative of horizontal divergence (d/dx(du/dx + dv/dy)) [L-1 T-1 ~> m-1 s-1] |
[in] | div_xx_dy | y-derivative of horizontal divergence (d/dy(du/dx + dv/dy)) [L-1 T-1 ~> m-1 s-1] |
[in,out] | vort_xy_dx | x-derivative of vertical vorticity (d/dx(dv/dx - du/dy)) [L-1 T-1 ~> m-1 s-1] |
[in,out] | vort_xy_dy | y-derivative of vertical vorticity (d/dy(dv/dx - du/dy)) [L-1 T-1 ~> m-1 s-1] |
Definition at line 751 of file MOM_lateral_mixing_coeffs.F90.
Referenced by mom_hor_visc::horizontal_viscosity().
subroutine, public mom_lateral_mixing_coeffs::calc_resoln_function | ( | real, dimension( g %isd: g %ied, g %jsd: g %jed, g %ke), intent(in) | h, |
type(thermo_var_ptrs), intent(in) | tv, | ||
type(ocean_grid_type), intent(inout) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(varmix_cs), pointer | CS | ||
) |
Calculates and stores the non-dimensional resolution functions.
[in,out] | g | Ocean grid structure |
[in] | h | Layer thickness [H ~> m or kg m-2] |
[in] | tv | Thermodynamic variables |
[in] | gv | Vertical grid structure |
[in] | us | A dimensional unit scaling type |
cs | Variable mixing coefficients |
Definition at line 193 of file MOM_lateral_mixing_coeffs.F90.
References mom_error_handler::mom_error(), mom_diag_mediator::query_averaging_enabled(), and mom_wave_speed::wave_speed().
Referenced by mom::step_mom(), and mom::step_offline().
subroutine, public mom_lateral_mixing_coeffs::calc_slope_functions | ( | real, dimension( g %isd: g %ied, g %jsd: g %jed, g %ke), intent(inout) | h, |
type(thermo_var_ptrs), intent(in) | tv, | ||
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(varmix_cs), pointer | CS | ||
) |
Calculates and stores functions of isopycnal slopes, e.g. Sx, Sy, S*N, mostly used in the Visbeck et al. style scaling of diffusivity.
[in,out] | g | Ocean grid structure |
[in] | gv | Vertical grid structure |
[in] | us | A dimensional unit scaling type |
[in,out] | h | Layer thickness [H ~> m or kg m-2] |
[in] | tv | Thermodynamic variables |
[in] | dt | Time increment [T ~> s] |
cs | Variable mixing coefficients |
Definition at line 439 of file MOM_lateral_mixing_coeffs.F90.
References mom_isopycnal_slopes::calc_isoneutral_slopes(), calc_slope_functions_using_just_e(), calc_visbeck_coeffs(), mom_error_handler::mom_error(), and mom_diag_mediator::query_averaging_enabled().
|
private |
The original calc_slope_function() that calculated slopes using interface positions only, not accounting for density variations.
[in,out] | g | Ocean grid structure |
[in,out] | h | Layer thickness [H ~> m or kg m-2] |
[in] | gv | Vertical grid structure |
[in] | us | A dimensional unit scaling type |
cs | Variable mixing coefficients | |
[in] | e | Interface position [Z ~> m] |
[in] | calculate_slopes | If true, calculate slopes internally otherwise use slopes stored in CS |
Definition at line 618 of file MOM_lateral_mixing_coeffs.F90.
References mom_error_handler::mom_error().
Referenced by calc_slope_functions().
|
private |
Calculates factors used when setting diffusivity coefficients similar to Visbeck et al.
[in,out] | g | Ocean grid structure |
[in] | gv | Vertical grid structure |
[in] | h | Layer thickness [H ~> m or kg m-2] |
[in] | slope_x | Zonal isoneutral slope |
[in] | n2_u | Buoyancy (Brunt-Vaisala) frequency at u-points [T-2 ~> s-2] |
[in] | slope_y | Meridional isoneutral slope |
[in] | n2_v | Buoyancy (Brunt-Vaisala) frequency at v-points [T-2 ~> s-2] |
[in] | us | A dimensional unit scaling type |
cs | Variable mixing coefficients |
Definition at line 483 of file MOM_lateral_mixing_coeffs.F90.
References mom_error_handler::mom_error(), and mom_diag_mediator::query_averaging_enabled().
Referenced by calc_slope_functions().
subroutine, public mom_lateral_mixing_coeffs::varmix_init | ( | type(time_type), intent(in) | Time, |
type(ocean_grid_type), intent(in) | 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(varmix_cs), pointer | CS | ||
) |
Initializes the variables mixing coefficients container.
[in] | time | Current model time |
[in] | g | Ocean grid structure |
[in] | gv | The ocean's vertical grid structure |
[in] | us | A dimensional unit scaling type |
[in] | param_file | Parameter file handles |
[in,out] | diag | Diagnostics control structure |
cs | Variable mixing coefficients |
Definition at line 909 of file MOM_lateral_mixing_coeffs.F90.
References mom_error_handler::mom_error(), and mom_wave_speed::wave_speed_init().