MOM6
|
Shear-dependent mixing following Jackson et al. 2008.
By Laura Jackson and Robert Hallberg, 2006-2008
This file contains the subroutines that determine the diapycnal diffusivity driven by resolved shears, as specified by the parameterizations described in Jackson and Hallberg (JPO, 2008).
The technique by which the 6 equations (for kappa, TKE, u, v, T, and S) are solved simultaneously has been dramatically revised from the previous version. The previous version was not converging in some cases, especially near the surface mixed layer, while the revised version does. The revised version solves for kappa and TKE with shear and stratification fixed, then marches the density and velocities forward with an adaptive (and aggressive) time step in a predictor-corrector-corrector emulation of a trapezoidal scheme. Run-time-settable parameters determine the tolerence to which the kappa and TKE equations are solved and the minimum time step that can be taken.
Data Types | |
type | kappa_shear_cs |
This control structure holds the parameters that regulate shear mixing. More... | |
Functions/Subroutines | |
subroutine, public | calculate_kappa_shear (u_in, v_in, h, tv, p_surf, kappa_io, tke_io, kv_io, dt, G, GV, US, CS, initialize_all) |
Subroutine for calculating shear-driven diffusivity and TKE in tracer columns. More... | |
subroutine, public | calc_kappa_shear_vertex (u_in, v_in, h, T_in, S_in, tv, p_surf, kappa_io, tke_io, kv_io, dt, G, GV, US, CS, initialize_all) |
Subroutine for calculating shear-driven diffusivity and TKE in corner columns. More... | |
subroutine | kappa_shear_column (kappa, tke, dt, nzc, f2, surface_pres, dz, u0xdz, v0xdz, T0xdz, S0xdz, kappa_avg, tke_avg, tv, CS, GV, US, I_Ld2_1d, dz_Int_1d) |
This subroutine calculates shear-driven diffusivity and TKE in a single column. More... | |
subroutine | calculate_projected_state (kappa, u0, v0, T0, S0, dt, nz, dz, I_dz_int, dbuoy_dT, dbuoy_dS, u, v, T, Sal, GV, US, N2, S2, ks_int, ke_int, vel_underflow) |
This subroutine calculates the velocities, temperature and salinity that the water column will have after mixing for dt with diffusivities kappa. It may also calculate the projected buoyancy frequency and shear. More... | |
subroutine | find_kappa_tke (N2, S2, kappa_in, Idz, dz_Int, I_L2_bdry, f2, nz, CS, GV, US, K_Q, tke, kappa, kappa_src, local_src) |
This subroutine calculates new, consistent estimates of TKE and kappa. More... | |
logical function, public | kappa_shear_init (Time, G, GV, US, param_file, diag, CS) |
This subroutineinitializesthe parameters that regulate shear-driven mixing. More... | |
logical function, public | kappa_shear_is_used (param_file) |
This function indicates to other modules whether the Jackson et al shear mixing parameterization will be used without needing to duplicate the log entry. More... | |
logical function, public | kappa_shear_at_vertex (param_file) |
This function indicates to other modules whether the Jackson et al shear mixing parameterization will be used without needing to duplicate the log entry. More... | |
subroutine, public mom_kappa_shear::calc_kappa_shear_vertex | ( | real, dimension(szib_(g),szj_(g),szk_(gv)), intent(in) | u_in, |
real, dimension(szi_(g),szjb_(g),szk_(gv)), intent(in) | v_in, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | h, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | T_in, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | S_in, | ||
type(thermo_var_ptrs), intent(in) | tv, | ||
real, dimension(:,:), pointer | p_surf, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)+1), intent(out) | kappa_io, | ||
real, dimension(szib_(g),szjb_(g),szk_(gv)+1), intent(out) | tke_io, | ||
real, dimension(szib_(g),szjb_(g),szk_(gv)+1), intent(inout) | kv_io, | ||
real, intent(in) | dt, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(kappa_shear_cs), pointer | CS, | ||
logical, intent(in), optional | initialize_all | ||
) |
Subroutine for calculating shear-driven diffusivity and TKE in corner columns.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | u_in | Initial zonal velocity [L T-1 ~> m s-1]. |
[in] | v_in | Initial meridional velocity [L T-1 ~> m s-1]. |
[in] | h | Layer thicknesses [H ~> m or kg m-2]. |
[in] | t_in | Layer potential temperatures [degC] |
[in] | s_in | Layer salinities in ppt. |
[in] | tv | A structure containing pointers to any available thermodynamic fields. Absent fields have NULL ptrs. |
p_surf | The pressure at the ocean surface [Pa] (or NULL). | |
[out] | kappa_io | The diapycnal diffusivity at each interface |
[out] | tke_io | The turbulent kinetic energy per unit mass at |
[in,out] | kv_io | The vertical viscosity at each interface [Z2 T-1 ~> m2 s-1]. |
[in] | dt | Time increment [T ~> s]. |
cs | The control structure returned by a previous call to kappa_shear_init. | |
[in] | initialize_all | If present and false, the previous value of kappa is used to start the iterations |
Definition at line 364 of file MOM_kappa_shear.F90.
References kappa_shear_column().
Referenced by mom_set_diffusivity::set_diffusivity().
subroutine, public mom_kappa_shear::calculate_kappa_shear | ( | real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | u_in, |
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | v_in, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | h, | ||
type(thermo_var_ptrs), intent(in) | tv, | ||
real, dimension(:,:), pointer | p_surf, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)+1), intent(inout) | kappa_io, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)+1), intent(out) | tke_io, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)+1), intent(inout) | kv_io, | ||
real, intent(in) | dt, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(kappa_shear_cs), pointer | CS, | ||
logical, intent(in), optional | initialize_all | ||
) |
Subroutine for calculating shear-driven diffusivity and TKE in tracer columns.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | u_in | Initial zonal velocity [L T-1 ~> m s-1]. |
[in] | v_in | Initial meridional velocity [L T-1 ~> m s-1]. |
[in] | h | Layer thicknesses [H ~> m or kg m-2]. |
[in] | tv | A structure containing pointers to any available thermodynamic fields. Absent fields have NULL ptrs. |
p_surf | The pressure at the ocean surface [Pa] (or NULL). | |
[in,out] | kappa_io | The diapycnal diffusivity at each interface |
[out] | tke_io | The turbulent kinetic energy per unit mass at |
[in,out] | kv_io | The vertical viscosity at each interface |
[in] | dt | Time increment [T ~> s]. |
cs | The control structure returned by a previous call to kappa_shear_init. | |
[in] | initialize_all | If present and false, the previous value of kappa is used to start the iterations |
Definition at line 101 of file MOM_kappa_shear.F90.
References kappa_shear_column().
|
private |
This subroutine calculates the velocities, temperature and salinity that the water column will have after mixing for dt with diffusivities kappa. It may also calculate the projected buoyancy frequency and shear.
[in] | nz | The number of layers (after eliminating massless layers?). |
[in] | kappa | The diapycnal diffusivity at interfaces, [Z2 T-1 ~> m2 s-1]. |
[in] | u0 | The initial zonal velocity [L T-1 ~> m s-1]. |
[in] | v0 | The initial meridional velocity [L T-1 ~> m s-1]. |
[in] | t0 | The initial temperature [degC]. |
[in] | s0 | The initial salinity [ppt]. |
[in] | dz | The grid spacing of layers [Z ~> m]. |
[in] | i_dz_int | The inverse of the layer's thicknesses [Z-1 ~> m-1]. |
[in] | dbuoy_dt | The partial derivative of buoyancy with temperature [Z T-2 degC-1 ~> m s-2 degC-1]. |
[in] | dbuoy_ds | The partial derivative of buoyancy with salinity [Z T-2 ppt-1 ~> m s-2 ppt-1]. |
[in] | dt | The time step [T ~> s]. |
[in,out] | u | The zonal velocity after dt [L T-1 ~> m s-1]. |
[in,out] | v | The meridional velocity after dt [L T-1 ~> m s-1]. |
[in,out] | t | The temperature after dt [degC]. |
[in,out] | sal | The salinity after dt [ppt]. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in,out] | n2 | The buoyancy frequency squared at interfaces [T-2 ~> s-2]. |
[in,out] | s2 | The squared shear at interfaces [T-2 ~> s-2]. |
[in] | ks_int | The topmost k-index with a non-zero diffusivity. |
[in] | ke_int | The bottommost k-index with a non-zero diffusivity. |
[in] | vel_underflow | If present and true, any velocities that are smaller in magnitude than this value are set to 0 [L T-1 ~> m s-1]. |
Definition at line 1216 of file MOM_kappa_shear.F90.
Referenced by kappa_shear_column().
|
private |
This subroutine calculates new, consistent estimates of TKE and kappa.
[in] | nz | The number of layers to work on. |
[in] | n2 | The buoyancy frequency squared at interfaces [T-2 ~> s-2]. |
[in] | s2 | The squared shear at interfaces [T-2 ~> s-2]. |
[in] | kappa_in | The initial guess at the diffusivity [Z2 T-1 ~> m2 s-1]. |
[in] | dz_int | The thicknesses associated with interfaces [Z-1 ~> m-1]. |
[in] | i_l2_bdry | The inverse of the squared distance to boundaries [Z-2 ~> m-2]. |
[in] | idz | The inverse grid spacing of layers [Z-1 ~> m-1]. |
[in] | f2 | The squared Coriolis parameter [T-2 ~> s-2]. |
cs | A pointer to this module's control structure. | |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in,out] | k_q | The shear-driven diapycnal diffusivity divided by the turbulent kinetic energy per unit mass at interfaces [Z2 m-2 s2 T-1 ~> s]. |
[out] | tke | The turbulent kinetic energy per unit mass at interfaces [Z2 T-2 ~> m2 s-2]. |
[out] | kappa | The diapycnal diffusivity at interfaces [Z2 T-1 ~> m2 s-1]. |
[out] | kappa_src | The source term for kappa [T-1 ~> s-1]. |
[out] | local_src | The sum of all local sources for kappa, |
Definition at line 1354 of file MOM_kappa_shear.F90.
Referenced by kappa_shear_column().
logical function, public mom_kappa_shear::kappa_shear_at_vertex | ( | type(param_file_type), intent(in) | param_file | ) |
This function indicates to other modules whether the Jackson et al shear mixing parameterization will be used without needing to duplicate the log entry.
[in] | param_file | A structure to parse for run-time parameters |
Definition at line 2120 of file MOM_kappa_shear.F90.
Referenced by mom_set_diffusivity::set_diffusivity_init(), mom_set_visc::set_visc_init(), and mom_set_visc::set_visc_register_restarts().
|
private |
This subroutine calculates shear-driven diffusivity and TKE in a single column.
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in,out] | kappa | The time-weighted average of kappa [Z2 T-1 ~> m2 s-1]. |
[out] | tke | The Turbulent Kinetic Energy per unit mass at |
[in] | nzc | The number of active layers in the column. |
[in] | f2 | The square of the Coriolis parameter [T-2 ~> s-2]. |
[in] | surface_pres | The surface pressure [Pa]. |
[in] | dz | The layer thickness [Z ~> m]. |
[in] | u0xdz | The initial zonal velocity times dz [Z L T-1 ~> m2 s-1]. |
[in] | v0xdz | The initial meridional velocity times dz [Z L T-1 ~> m2 s-1]. |
[in] | t0xdz | The initial temperature times dz [degC Z ~> degC m]. |
[in] | s0xdz | The initial salinity times dz [ppt Z ~> ppt m]. |
[out] | kappa_avg | The time-weighted average of kappa [Z2 T-1 ~> m2 s-1]. |
[out] | tke_avg | The time-weighted average of TKE [Z2 T-2 ~> m2 s-2]. |
[in] | dt | Time increment [T ~> s]. |
[in] | tv | A structure containing pointers to any available thermodynamic fields. Absent fields have NULL ptrs. |
cs | The control structure returned by a previous call to kappa_shear_init. | |
[out] | i_ld2_1d | The inverse of the squared mixing length [Z-2 ~> m-2]. |
[out] | dz_int_1d | The extent of a finite-volume space surrounding an interface, |
Definition at line 666 of file MOM_kappa_shear.F90.
References calculate_projected_state(), and find_kappa_tke().
Referenced by calc_kappa_shear_vertex(), and calculate_kappa_shear().
logical function, public mom_kappa_shear::kappa_shear_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(kappa_shear_cs), pointer | CS | ||
) |
This subroutineinitializesthe parameters that regulate shear-driven mixing.
[in] | time | The current model time. |
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | param_file | A structure to parse for run-time parameters. |
[in,out] | diag | A structure that is used to regulate diagnostic output. |
cs | A pointer that is set to point to the control structure for this module |
Definition at line 1943 of file MOM_kappa_shear.F90.
References mom_error_handler::mom_error().
logical function, public mom_kappa_shear::kappa_shear_is_used | ( | type(param_file_type), intent(in) | param_file | ) |
This function indicates to other modules whether the Jackson et al shear mixing parameterization will be used without needing to duplicate the log entry.
[in] | param_file | A structure to parse for run-time parameters |
Definition at line 2109 of file MOM_kappa_shear.F90.
Referenced by mom_cvmix_shear::cvmix_shear_init(), mom_diabatic_driver::diabatic_driver_init(), mom_set_visc::set_visc_init(), and mom_set_visc::set_visc_register_restarts().