Module ocean_vert_tidal_mod
OVERVIEW
This module computes a vertical diffusivity and vertical
viscosity deduced from barotropic and baroclinic tidal
dissipation. Assume Prandtl number unity.
This module computes a vertical diffusivity and vertical
viscosity deduced from barotropic and baroclinic tidal
dissipation. For the baroclinic dissipation, we follow
Simmons etal, and for the barotropic dissipation we follow
Lee etal. Assume Prandtl number unity.
This code is more general than that in the ocean_vert_kpp_mom4p0_mod.
The KPP_mom4p0 code remains part of MOM for legacy purposes.
OTHER MODULES USED
constants_mod
diag_manager_mod
fms_mod
mpp_domains_mod
mpp_mod
ocean_domains_mod
ocean_operators_mod
ocean_parameters_mod
ocean_types_mod
ocean_workspace_mod
PUBLIC INTERFACE
PUBLIC ROUTINES
-
ocean_vert_tidal_init
-
DESCRIPTION
-
Initialization for the ocean_vert_tidal module.
-
vert_mix_tidal
-
DESCRIPTION
-
This subroutine computes vertical tracer diffusivity and viscosity
based on one or both of the following dissipation mechanisms:
1. internal wave breaking as parameterized by Simmons etal.
2. barotropic tides feeling the bottom drag, as parameterized by
Lee etal.
-
compute_bvfreq
-
DESCRIPTION
-
This subroutine computes the absolute value of rho*N^2 and abs of
N^2, with N^2 the squared Brunt-Vaisala (or buoyancy) frequency.
-
vert_mix_wave
-
DESCRIPTION
-
This subroutine computes dia-surface tracer diffusivity based on the
methods of Simmons et al., which consider dissipation from breaking
internal gravity waves and their conversion into local dia-surface
mixing, which is parameterized as diffusion.
Also compute a prototype parameterization of mixing due to
breaking leewaves from Nikurashin.
We assume a unit Prandtl number.
Note that if umask(i,j,k) is 1.0, then so is
tmask(i,j,k), tmask(i+1,j,k), tmask(i,j+1,k), and tmask(i+1,j+1,k).
So there is no need to compute the "active_cells" when doing the
space average to go from t-cell to u-cell to compute visc_cbu.
-
vert_mix_drag_bgrid
-
DESCRIPTION
-
This subroutine computes dia-surface tracer diffusivity based on the
methods of Lee etal., which consider the dissipation from barotropic tides
rubbing against the ocean bottom.
We assume B-grid layout for the velocity
We assume a unit Prandtl number, so compute the viscosity as a four-point
average of the diffusivity.
We perform various averages here in order to smooth Richardson number.
1. compute Richardson number on U-cell by averaging bvfreq from T-cell
2. average U-cell Richardson number to then get T-cell diffusivity
3. average T-cell diffusivity to get U-cell viscosity.
Note that if umask(i,j,k)==1.0, then so is tmask(i,j,k), tmask(i+1,j,k),
tmask(i,j+1,k), and tmask(i+1,j+1,k). So there is no need to compute
active_cells when averaging from T-cell to U-cell.
-
vert_mix_drag_cgrid
-
DESCRIPTION
-
This subroutine computes dia-surface tracer diffusivity based on the
methods of Lee etal., which consider the dissipation from barotropic tides
rubbing against the ocean bottom.
We assume a unit Prandtl number, so compute the viscosity as a four-point
average of the diffusivity.
We assume C-grid layout for the velocity, which renders slight
distinctions for the calculation of Richardson number. Otherwise, the
calculations are the same as the Bgrid. We introduce this separate
routine, however, to enable easier bitwise agreement with older
model results. Also, further development of this scheme may lead
to more distinctions from the Bgrid.
-
compute_bvfreq_legacy
-
DESCRIPTION
-
This subroutine computes the absolute value of rho*N^2 and abs of
N^2, with N^2 the squared Brunt-Vaisala (or buoyancy) frequency.
This routine employs a legacy approach, which is not recommended.
It remains solely to allow exact reproduction of older results.
-
vert_mix_wave_legacy
-
DESCRIPTION
-
Legacy routine maintained only to exactly reproduce older results.
It is not recommended for new experiments, as it uses some obsolete
methods.
This subroutine computes dia-surface tracer diffusivity based on the
methods of Simmons etal., which consider the dissipation from breaking
internal gravity waves and their conversion into local dia-surface
diffusion.
We assume a unit Prandtl number, so compute the viscosity as a four-point
average of the diffusivity.
Note that if umask(i,j,k) is 1.0, then so is
tmask(i,j,k), tmask(i+1,j,k), tmask(i,j+1,k), and tmask(i+1,j+1,k).
So there is no need to compute the "active_cells" when doing the
space average to go from t-cell to u-cell to compute viscosity.
-
vert_mix_drag_legacy
-
DESCRIPTION
-
Legacy routine maintained only to exactly reproduce older results.
It is not recommended for new experiments, as it uses some obsolete
methods.
This subroutine computes dia-surface tracer diffusivity based on the
methods of Lee etal., which consider the dissipation from barotropic tides
rubbing against the ocean bottom.
We assume a unit Prandtl number, so compute the viscosity as a four-point
average of the diffusivity.
We perform various averages here in order to smooth Richardson number.
1. compute Richardson number on U-cell by averaging bvfreq from T-cell
2. average U-cell Richardson number to then get T-cell diffusivity
3. average T-cell diffusivity to get U-cell viscosity.
Note that if umask(i,j,k)==1.0, then so is tmask(i,j,k), tmask(i+1,j,k),
tmask(i,j+1,k), and tmask(i+1,j+1,k). So there is no need to compute
active_cells when averaging from T-cell to U-cell.
NAMELIST
&ocean_vert_tidal_nml
-
use_this_module=
Must be .true. to use this module. Default is false.
[logical]
-
debug_this_module
For debugging purposes.
[logical]
-
use_wave_dissipation=
Set to .true. for using the Simmons etal scheme for
obtaining a diffusivity and viscosity based on internal
wave breaking. This is a general form of the KPP
scheme "int_tidal_mix".
Default use_wave_dissipation=.false.
[logical]
-
use_drag_dissipation=
Set to .true. for using the Lee etal scheme for
obtaining a diffusivity and viscosity based on drag
of barotropic tides on bottom. This is a general
form of the KPP scheme "coastal_tidal_mix".
Default use_drag_dissipation=.false.
[logical]
-
use_leewave_dissipation=
Set to .true. for using a prototype Nikurashin scheme for
obtaining a diffusivity and viscosity based on breaking
leewaves. This scheme is not related to tides, but it
is incorporated to the baroclinic tide parameterization scheme
as a prototype. It will be placed into ts own module when
the parameterization matures.
Default use_leewave_dissipation=.false.
[logical]
-
read_leewave_dissipation
If .true. then read in leewave dissipation from a file.
Default read_leewave_dissipation=.false.
[logical]
-
read_wave_dissipation
If .true. then read in wave dissipation computed from
Jayne and St.Laurent (2001) tide model (or another model).
Default read_wave_dissipation=.false.
[logical]
-
fixed_wave_dissipation
If .true. then fix the wave dissipation from that
read in by the tide model, such as Jayne and St.Laurent (2001).
This power dissipation will be employed
for computing wave induced mixing.
Default fixed_wave_dissipation=.false.
[logical]
-
read_roughness
If .true. then read in bottom roughness amplitude h,
where roughness_length = kappa*h^2, with kappa a
representative roughness wavelength and h a
representative topographic amplitude. This information is
used for the Simmons etal wave dissipation parameterization.
[logical]
-
reading_roughness_length
If .true., then the field in the roughness file is
roughness_length = kappa*h^2, with kappa a
representative roughness wavelength and h a
representative topographic amplitude. This information is
used for the Simmons etal wave dissipation parameterization.
Default reading_roughness_length=.false.
[logical]
-
reading_roughness_amp
If .true., then the field in the roughness file is
roughness_amp=h, where roughness_length=kappa*h^2.
This information is used for the Simmons etal wave
dissipation parameterization.
Default reading_roughness_amp=.false.
[logical]
-
default_roughness_length
Default value for kappa*h^2 = roughness length for use
in the absence of a roughness length dataset. MOM default
is default_roughness_length=25.0m.
[real, units: m]
-
read_tide_speed
If .true. then read in tidal speed (m/s) from a tidal model.
This information is used for the computing the energy dissipation
from tides.
scheme.
[logical]
-
tide_speed_data_on_t_grid
To set the input tide speed data on T-grid, set to true.
Otherwise, set to false.
Default tide_speed_data_on_t_grid=.true.
[logical]
-
roughness_scale
Scale for the roughness that characterizes the roughness
affecting the tidal dissipation process. Used for setting
roughness_length via roughness_length = kappa*h^2, with
kappa = 2pi/(roughness_scale) and h=topography amplitude.
Default roughness_scale=1e4 as in Jayne and St. Laurent (2001)
[real, units: m]
-
default_tide_speed
Default value for tidal speed for use in the absence of a
value from a tidal model.
[real, units: m/s]
-
speed_min
For the drag scheme, we set the diffusivity as well as the
Richardson number to zero if the tide speed is less than
speed_min. This serves two purposes: 1/ to reduce overflows
in some of the diagnostics; 2/ to set the drag induced diffusivity
to zero in regions where the tide speed is small. Default
speed_min=5e-3m/s.
[real, units: m/s]
-
shelf_depth_cutoff
For use in defining a mask for the Simmons scheme, with depths
shallower than shelf_depth_cutoff removed from the scheme.
shelf_depth_cutoff=1000m in Simmons etal.
Default shelf_depth_cutoff=-1000m so there is no cutoff.
[real, units: m]
-
decay_scale
In the Simmons etal vertical profile function, the exponential decay
scale is determined by this parameter. Default = 500m as in Simmons
etal (2004). This vertical profile determines how to deposit the
internal wave energy within a vertical column.
[real, units: m]
-
tidal_diss_efficiency
Fraction of barotropic tidal energy that is dissipated locally, as
opposed to that which propagates away. Default=1/3 as in
Simmons etal (2004).
[real, units: dimensionless]
-
mixing_efficiency
Fraction of energy that is dissipated which is converted into dianeutral
diffusion of tracer. Default=0.2 based on Osborn (1980).
[real, units: dimensionless]
-
mixing_efficiency_n2depend
Allow for mixing efficiency to be a function of
N^2/(N^2+Omega^2), which is close to unity except in
regions where N is very small.
Default mixing_efficiency_n2depend=.false.
[logical]
-
wave_energy_flux_max
The maximum mechanical energy from internal tides that is
provided for mixing. Default wave_energy_flux_max=0.1Watt/m^2.
[real, units: W/m2]
-
wave_diffusivity_monotonic
Enforce a monotonic decay of the wave dissipation diffusivity,
with largest values near bottom and smaller as move to shallower
water. This behaviour is not guaranteed in general, since the
division by the buoyancy frequency can give non-monotone diffusivities.
Default wave_diffusivity_monotonic=.true.
[logical]
-
munk_anderson_p
The p constant in the Munk-Anderson scheme employed by Lee etal.
This parameter is minus the "p_tide" parameter in the KPP schemes.
Default munk_anderson_p=0.25
[real, units: dimensionless]
-
munk_anderson_sigma
The sigma constant in the Munk-Anderson scheme employed by Lee etal.
This parameter is called "sigma_tide" in the KPP schemes.
Default munk_anderson_sigma=3.0
[real, units: dimensionless]
-
drag_dissipation_use_cdbot
For using the cdbot_array computed from ocean_bbc.F90 module.
Default drag_dissipation_use_cdbot=.false., as this is consistent
with earlier simulations.
[logical]
-
bottom_drag_cd
Bottom drag coefficient from Lee etal. Default bottom_drag_cd=2.4e-3
[real, units: dimensionless]
-
background_diffusivity
Background vertical diffusivity not accounted for by the tidal schemes
nor any other scheme such as KPP. Default=0.1e-4.
[real, units: m^2/s]
-
background_viscosity
Background vertical viscosity not accounted for by the tidal schemes
nor any other scheme such as KPP. Default=0.1e-4.
[real, units: m^2/s]
-
max_wave_diffusivity
Maximum tracer diffusivity deduced from the wave dissipation
scheme from Simmons etal. Default = 5.e-3 m^2/sec.
[real, units: m^2/s]
-
max_drag_diffusivity
Maximum tracer diffusivity deduced from the drag dissipation scheme
from Lee etal. Default = 5.e-3 m^2/sec.
[real, units: m^2/s]
-
drag_dissipation_efold
For setting an efolding whereby the drag dissipation diffusivity
exponentially decreases as move upward in the water column.
There are good reasons to set this logical to true, as the scheme
can produce unreasonably large diffusivities far from the bottom, if
there are tides in the deep ocean.
Default drag_dissipation_efold=.true.
[logical]
-
drag_dissipation_tide_period
Characteristic tide period for use in computing efolding depth for
the tide drag scheme. Default = 12*60*60 = 12hours for semi-diurnal tide.
[real, units: s]
-
drag_mask_deep
For masking out the deep ocean regions for the drag dissipation
scheme. This scheme is meant to apply only in shallow shelves,
so it is physically relevant to mask it out. We apply a mask as
determined by the ratio of the frictional tide depth scale and the
total ocean depth.
Default drag_mask_deep=.true.
[logical]
-
drag_mask_deep_ratio
For determining the drag dissipation mask.
The mask = 0 in regions where
tide_depth/total_depth < drag_mask_deep_ratio
Default drag_mask_deep_ratio=0.1
[real]
-
smooth_ri_drag_cgrid
For smoothing the raw C-grid Richardson number computed for
the drag scheme on the Cgrid. Default smooth_ri_drag_cgrid=.true.
[logical]
-
use_legacy_methods
To compute all mixing coefficients using legacy methods.
There are good reasons to prefer the newer approaches, which motivates
setting the default use_legacy_methods=.false.
[logical]
-
drhodz_min
Minimum absolute value for the drhodz used to compute N^2 and rhoN2.
This value is needed in order to regularize the diffusivity computed
from the tide mixing schemes. Default is drhodz_min=1e-10, which
is much smaller than the (N^2)min = 10^-8 sec^-2 used by Simmons
etal. There is some sensitivity to the choice of drhodz_min, with
larger values leading to reduced deep diffusivities, due to the
N^-2 dependence in the diffusivity calculation.
[real, units: kg/m^3]
-
smooth_bvfreq_bottom
For smoothing the buoyancy frequency at the bottom.
Default smooth_bvfreq_bottom=.true.
[logical]
-
vel_micom_smooth
Velocity scale that is used for computing the MICOM Laplacian mixing
coefficient used in the Laplacian smoothing of diffusivities.
Default vel_micom_smooth=0.2.
[real, units: m/sec]
-
smooth_rho_N2
For smoothing the rho_N2 field via a 1-2-1 filter in
vertical. This is useful to produce smoother diffusivities.
Default is smooth_rho_N2=.true.
[logical]
-
num_121_passes
Number of passes of 1-2-1 filter in vertical for
smoothing the rho_N2 field. Default num_121_passes=1.
[integer]
REFERENCES
-
Simmons, Jayne, St. Laurent, and Weaver, 2004:
Tidally driven mixing in a numerical model of the ocean
general circulation. Ocean Modelling, vol. 6,
pages 245-263.
-
Jayne and St. Laurent, 2001:
Parameterizing tidal dissipation over rough topography.
Geophysical Research Letters, vol. 28, pages 811-814.
-
Hyun-Chul Lee, A. Rosati, and M.J. Spelman, 2006:
Barotropic tidal mixing effects in a coupled climate model:
ocean conditions in the northern Atlantic
Ocean Modelling, vol 11, pages 464--477
-
Osborn, T.R., 1980: Estimates of the local rate of vertical diffusion
from dissipation measurements. JPO, vol. 10, pages 83-89.
-
Munk and Anderson, 1948: Notes on a theory of the thermocline.
Journal of Marine Research, vol 3. pages 276-295.
-
S.M. Griffies, Elements of MOM (2012)