MOM6
|
Calculates various values related to the bottom boundary layer, such as the viscosity and thickness of the BBL (set_viscous_BBL).
This would also be the module in which other viscous quantities that are flow-independent might be set. This information is transmitted to other modules via a vertvisc type structure.
The same code is used for the two velocity components, by indirectly referencing the velocities and defining a handful of direction-specific defined variables.
Data Types | |
type | set_visc_cs |
Control structure for MOM_set_visc. More... | |
Functions/Subroutines | |
subroutine, public | set_viscous_bbl (u, v, h, tv, visc, G, GV, US, CS, symmetrize) |
Calculates the thickness of the bottom boundary layer and the viscosity within that layer. A drag law is used, either linearized about an assumed bottom velocity or using the actual near-bottom velocities combined with an assumed unresolved velocity. The bottom boundary layer thickness is limited by a combination of stratification and rotation, as in the paper of Killworth and Edwards, JPO 1999. It is not necessary to calculate the thickness and viscosity every time step; instead previous values may be used. More... | |
real function | set_v_at_u (v, h, G, i, j, k, mask2dCv, OBC) |
This subroutine finds a thickness-weighted value of v at the u-points. More... | |
real function | set_u_at_v (u, h, G, i, j, k, mask2dCu, OBC) |
This subroutine finds a thickness-weighted value of u at the v-points. More... | |
subroutine, public | set_viscous_ml (u, v, h, tv, forces, visc, dt, G, GV, US, CS, symmetrize) |
Calculates the thickness of the surface boundary layer for applying an elevated viscosity. More... | |
subroutine, public | set_visc_register_restarts (HI, GV, param_file, visc, restart_CS) |
Register any fields associated with the vertvisc_type. More... | |
subroutine, public | set_visc_init (Time, G, GV, US, param_file, diag, visc, CS, restart_CS, OBC) |
Initializes the MOM_set_visc control structure. More... | |
subroutine, public | set_visc_end (visc, CS) |
This subroutine dellocates any memory in the set_visc control structure. More... | |
|
private |
This subroutine finds a thickness-weighted value of u at the v-points.
[in] | g | The ocean's grid structure |
[in] | u | The zonal velocity [L T-1 ~> m s-1] or other units. |
[in] | h | Layer thicknesses [H ~> m or kg m-2] |
[in] | i | The i-index of the u-location to work on. |
[in] | j | The j-index of the u-location to work on. |
[in] | k | The k-index of the u-location to work on. |
[in] | mask2dcu | A multiplicative mask of the u-points |
obc | A pointer to an open boundary condition structure |
Definition at line 971 of file MOM_set_viscosity.F90.
Referenced by set_viscous_bbl(), and set_viscous_ml().
|
private |
This subroutine finds a thickness-weighted value of v at the u-points.
[in] | g | The ocean's grid structure |
[in] | v | The meridional velocity [L T-1 ~> m s-1] |
[in] | h | Layer thicknesses [H ~> m or kg m-2] |
[in] | i | The i-index of the u-location to work on. |
[in] | j | The j-index of the u-location to work on. |
[in] | k | The k-index of the u-location to work on. |
[in] | mask2dcv | A multiplicative mask of the v-points |
obc | A pointer to an open boundary condition structure |
Definition at line 927 of file MOM_set_viscosity.F90.
Referenced by set_viscous_bbl(), and set_viscous_ml().
subroutine, public mom_set_visc::set_visc_end | ( | type(vertvisc_type), intent(inout) | visc, |
type(set_visc_cs), pointer | CS | ||
) |
This subroutine dellocates any memory in the set_visc control structure.
[in,out] | visc | A structure containing vertical viscosities and related fields. Elements are deallocated here. |
cs | The control structure returned by a previous call to vertvisc_init. |
Definition at line 2082 of file MOM_set_viscosity.F90.
subroutine, public mom_set_visc::set_visc_init | ( | type(time_type), intent(in), target | 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(vertvisc_type), intent(inout) | visc, | ||
type(set_visc_cs), pointer | CS, | ||
type(mom_restart_cs), pointer | restart_CS, | ||
type(ocean_obc_type), pointer | OBC | ||
) |
Initializes the MOM_set_visc control structure.
[in] | time | The current model time. |
[in,out] | 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. |
[in,out] | visc | A structure containing vertical viscosities and related fields. Allocated here. |
cs | A pointer that is set to point to the control structure for this module | |
restart_cs | A pointer to the restart control structure. | |
obc | A pointer to an open boundary condition structure |
Definition at line 1782 of file MOM_set_viscosity.F90.
References mom_cvmix_ddiff::cvmix_ddiff_is_used(), mom_kappa_shear::kappa_shear_at_vertex(), mom_kappa_shear::kappa_shear_is_used(), mom_error_handler::mom_error(), and mom_restart::register_restart_field_as_obsolete().
subroutine, public mom_set_visc::set_visc_register_restarts | ( | type(hor_index_type), intent(in) | HI, |
type(verticalgrid_type), intent(in) | GV, | ||
type(param_file_type), intent(in) | param_file, | ||
type(vertvisc_type), intent(inout) | visc, | ||
type(mom_restart_cs), pointer | restart_CS | ||
) |
Register any fields associated with the vertvisc_type.
[in] | hi | A horizontal index type structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | param_file | A structure to parse for run-time parameters. |
[in,out] | visc | A structure containing vertical viscosities and related fields. Allocated here. |
restart_cs | A pointer to the restart control structure. |
Definition at line 1696 of file MOM_set_viscosity.F90.
References mom_cvmix_conv::cvmix_conv_is_used(), mom_cvmix_shear::cvmix_shear_is_used(), mom_kappa_shear::kappa_shear_at_vertex(), and mom_kappa_shear::kappa_shear_is_used().
Referenced by mom::initialize_mom().
subroutine, public mom_set_visc::set_viscous_bbl | ( | real, dimension(szib_(g),szj_(g),szk_(g)), intent(in) | u, |
real, dimension(szi_(g),szjb_(g),szk_(g)), intent(in) | v, | ||
real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | h, | ||
type(thermo_var_ptrs), intent(in) | tv, | ||
type(vertvisc_type), intent(inout) | visc, | ||
type(ocean_grid_type), intent(inout) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(set_visc_cs), pointer | CS, | ||
logical, intent(in), optional | symmetrize | ||
) |
Calculates the thickness of the bottom boundary layer and the viscosity within that layer. A drag law is used, either linearized about an assumed bottom velocity or using the actual near-bottom velocities combined with an assumed unresolved velocity. The bottom boundary layer thickness is limited by a combination of stratification and rotation, as in the paper of Killworth and Edwards, JPO 1999. It is not necessary to calculate the thickness and viscosity every time step; instead previous values may be used.
[in,out] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | u | The zonal velocity [L T-1 ~> m s-1]. |
[in] | v | The 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.. |
[in,out] | visc | A structure containing vertical viscosities and related fields. |
cs | The control structure returned by a previous call to vertvisc_init. | |
[in] | symmetrize | If present and true, do extra calculations of those values in visc that would be calculated with symmetric memory. |
Definition at line 110 of file MOM_set_viscosity.F90.
References mom_error_handler::mom_error(), set_u_at_v(), and set_v_at_u().
subroutine, public mom_set_visc::set_viscous_ml | ( | real, dimension(szib_(g),szj_(g),szk_(g)), intent(in) | u, |
real, dimension(szi_(g),szjb_(g),szk_(g)), intent(in) | v, | ||
real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | h, | ||
type(thermo_var_ptrs), intent(in) | tv, | ||
type(mech_forcing), intent(in) | forces, | ||
type(vertvisc_type), intent(inout) | 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(set_visc_cs), pointer | CS, | ||
logical, intent(in), optional | symmetrize | ||
) |
Calculates the thickness of the surface boundary layer for applying an elevated viscosity.
A bulk Richardson criterion or the thickness of the topmost NKML layers (with a bulk mixed layer) are currently used. The thicknesses are given in terms of fractional layers, so that this thickness will move as the thickness of the topmost layers change.
[in,out] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | u | The zonal velocity [L T-1 ~> m s-1]. |
[in] | v | The 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. |
[in] | forces | A structure with the driving mechanical forces |
[in,out] | visc | A structure containing vertical viscosities and related fields. |
[in] | dt | Time increment [T ~> s]. |
cs | The control structure returned by a previous call to vertvisc_init. | |
[in] | symmetrize | If present and true, do extra calculations of those values in visc that would be calculated with symmetric memory. |
Definition at line 1019 of file MOM_set_viscosity.F90.
References mom_error_handler::mom_error(), set_u_at_v(), and set_v_at_u().
Referenced by mom_dynamics_split_rk2::step_mom_dyn_split_rk2(), mom_dynamics_unsplit::step_mom_dyn_unsplit(), and mom_dynamics_unsplit_rk2::step_mom_dyn_unsplit_rk2().