Module ocean_submesoscale_mod
OVERVIEW
This module computes a streamfunction within
the upper surface boundary layer, and applies this
streamfunction to all tracers. It also optionally
applies horizontal diffusion in the surface layer
as determined by the strength of the streamfunction.
This module computes a streamfunction within
the upper surface boundary layer, and applies this
streamfunction to all tracers. It also optionally
applies horizontal diffusion in the surface layer
as determined by the strength of the streamfunction.
OTHER MODULES USED
constants_mod
diag_manager_mod
fms_mod
mpp_domains_mod
mpp_mod
time_manager_mod
ocean_domains_mod
ocean_operators_mod
ocean_parameters_mod
ocean_tracer_diag_mod
ocean_tracer_util_mod
ocean_types_mod
ocean_util_mod
ocean_workspace_mod
PUBLIC INTERFACE
PUBLIC ROUTINES
-
ocean_submesoscale_init
-
DESCRIPTION
-
Initialization for the ocean_submesoscale module.
-
submeso_restrat
-
DESCRIPTION
-
This routine computes a thickness and density weighted time tendency
for each tracer, arising from the effects of parameterized
submesoscale eddies acting in the surface mixed layer.
-
compute_bldepth
-
DESCRIPTION
-
Compute the boundary layer depth and kblt.
-
tracer_derivs
-
DESCRIPTION
-
Compute the tracer derivatives, with the
lateral derivatives computed along constant k-level.
-
salinity_derivs
-
DESCRIPTION
-
Compute the density-salinity derivatives, with lateral
derivative computed on constant k-level.
-
compute_psi
-
DESCRIPTION
-
Compute the vector streamfunction from parameterized
submesoscale restratification.
Units of psi are m^2/sec
psix is defined on north face of tracer cell for jq=0,1.
psiy is defined on east face of tracer cell for ip=0,1.
NOTE: the mpp updates for psix and psiy are treated as a
scalar, whereas they are actually components to a pseudo-vector.
Some further thought is required for the tripolar grid. We ignore
this detail in the present implementation.
-
compute_psi_legacy
-
DESCRIPTION
-
Compute the vector streamfunction
Units of psi are m^2/sec
If computing skewsion tendency, then need psi at depth_zt.
If computing advection tendency, then need psi at depth_zwt.
Jan2012: This scheme has problems with the limiters and smoothers.
These problems become particularly egregious when trying to compute
an advective flux rather than a skew flux. This routine is
retained only for legacy purposes.
Stephen.Griffies
-
compute_transport
-
DESCRIPTION
-
Compute the mass transport from submeso.
This routine is a diagnostic routine if skewsion, and
part of the calculation of the eddy-induced velocity if
advective approach used.
Comments on the scheme:
1/ compute vertical component from convergence of horizontal, just
as for the vertical velocity component for the Eulerian transport.
2/ wrho_bt_submeso(:,:,k=0) = 0.0 by definition
3/ expand the BDX_ET and BDY_NT operators for efficiency.
4/ mask to zero those regions where the horizontal divergence
vanishes, as these are regions beneath the submeso boundary
layer. Base the mask on horz divergence rather than kblt(i,j),
since any smoothing performed to uhrho_et_submeso and vhrho_nt_submeso
will modify the region of nonzero submesoscale advection so that
it reaches potentially to below kblt.
-
compute_submeso_skewsion
-
DESCRIPTION
-
Compute tendency from submeso skewsion.
-
compute_flux_x
-
DESCRIPTION
-
Subroutine computes the zonal submesoscale tracer skew flux component.
fx has physical dimensions (area*diffusivity*density*tracer gradient)
-
compute_flux_y
-
DESCRIPTION
-
Subroutine computes the meridional submesoscale tracer skew flux component.
fy has physical dimensions (area*diffusivity*density*tracer gradient)
-
compute_flux_z
-
DESCRIPTION
-
Subroutine computes the vertical submeso tracer skew flux component.
Surface and bottom boundary condition fz(k=0)=fz(k=kmt(i,j))=0
fz has physical dimensions (density*diffusivity*tracer gradient)
-
compute_submeso_upwind
-
DESCRIPTION
-
First order upwind to compute the tendency from submeso advection.
Although this method adds diffusion, some of the mixing
is physically relevant. Absent this mixing, the submesoscale
parameterization is incomplete. The submesoscale parameterization is,
afterall, active only in the mixed layer, where there is lot of
physical mixing.
Use of first order upwind ensures that the tendency computed
from submesoscale parameterization will not, in principle,
introduce extrema. However, there remain some issues with large
tendencies appearing near boundaries that may compromise this
monotonicity property.
Apply masks so that there is no flux leaving cell next to bottom.
-
compute_submeso_sweby
-
DESCRIPTION
-
Sweby scheme to compute the tendency from submeso advection.
Algorithm taken after advect_tracer_sweby_all in the module
ocean_tracers/ocean_tracer_advect.F90.
Jan 2012: Stephen.Griffies
This scheme has known bugs; it is not meant for general use.
-
compute_submeso_diffusion
-
DESCRIPTION
-
Compute tendency from submeso horizontal diffusion.
-
maximum_bottom_w_general
-
DESCRIPTION
-
Compute maximum vertical velocity from submeso.
-
transport_on_nrho_submeso
-
DESCRIPTION
-
Classify horizontal submeso mass transport according to neutral
density classes.
NOTE: This diagnostic works with transport integrated from bottom to
a particular cell depth. To get transport_on_rho_submeso, a remapping is
performed, rather than the binning done for transport_on_nrho_submeso_adv.
This is the same algorithm as used for GM skew fluxes on rho surfaces.
Caveat: Since the submeso scheme operates only in the mixed layer,
there are difficulties mapping this transport to neutral density
layers. The user should be mindful of the problems with this
remapping. An alternative that may be more suitable is to use
Ferret to remap the time mean submeso transport to the time mean
neutral density surfaces. There are missing correlations, but for
many purposes, the Ferret remapping may be preferable.
Briefly, the Ferret command is the following:
let ty_trans_nrho_submeso_new = ZAXREPLACE(TY_TRANS_SUBMESO,NEUTRAL_RHO,TY_TRANS_NRHO)
where TY_TRANS_SUBMESO is the level-space transport
NEUTRAL_RHO is the level space version of the neutral density
TY_TRANS_NRHO is any density space field whose vertical coordinates
are accessed for the remapping.
-
transport_on_nrho_submeso_adv
-
DESCRIPTION
-
Classify horizontal transport according to neutral density classes.
Based on transport_on_nrho in ocean_diag/ocean_adv_diag.F90.
-
watermass_diag_init
-
DESCRIPTION
-
Initialization of watermass diagnostic output files.
-
watermass_diag
-
DESCRIPTION
-
Diagnose effects from submesoscale on watermass transformation.
-
watermass_diag_diffusion
-
DESCRIPTION
-
Diagnose effects from submesoscale horizontal diffusion
on watermass transformation.
NAMELIST
&ocean_submesoscale_nml
-
use_this_module=
Must be .true. to use this module.
[logical]
-
debug_this_module
For debugging purposes.
[logical]
-
diag_step
Number of time steps between computing max bottom value for
wrho_bt_submeso. Default diag_step=1200.
[integer]
-
submeso_skew_flux
For computing the tendency as convergence of skew flux.
This is the recommended method.
Default submeso_skew_flux=.true.
[logical]
-
submeso_advect_flux
For computing the tendency as convergence of advective flux.
This approach uses either a flux limited sweby advection or
first order upwind, both of which ensure that the resulting
tendency will not create extrema in the tracer field.
Default submeso_advect_flux=.false.
[logical]
-
submeso_advect_upwind
For computing the tendency as convergence of a first order
advective flux.
Default submeso_advect_upwind=.true.
[logical]
-
submeso_advect_sweby
For computing the tendency as convergence of a sweby
advective flux. This routine is incomplete and has a bug.
Default submeso_advect_sweby=.false.
[logical]
-
submeso_advect_limit
For limiting the value of the horizontal transports
to be less than a velocity scale set by limit_psi_velocity_scale.
This option is not needed if limit_psi=.true.
Default submeso_advect_limit=.false.
[logical]
-
submeso_advect_zero_bdy
For removing the advective transport next to boundaries.
This is useful since computation of the advective transport
velocity components can be problematic next to boundaries.
Default submeso_advect_zero_bdy=.false.
[logical]
-
smooth_advect_transport
For doing a horizontal 1-2-1 smoothing on the diagnosed
uhrho_et_submeso and vhrho_nt_submeso fields.
Default smooth_advect_transport=.true.
[logical]
-
smooth_advect_transport_num
Number of iterations for the smooothing of horizontal transport.
Default smooth_advect_transport_num=2.
[integer]
-
submeso_diag_advect_transport
For diagnosing the advective mass transport even when
using the skew approach.
Default submeso_diag_advect_transport=.false.
[logical]
-
submeso_diffusion
For computing a horizontal diffusive flux in the boundary layer
as determined by the strength of the vector streamfunction.
Default submeso_diffusion=.false.
[logical]
-
submeso_diffusion_biharmonic
The default submeso diffusion is Laplacian. However, one may wish to
use a biharmonic mixing operator instead.
Default submeso_diffusion_biharmonic=.false.
[logical]
-
submeso_diffusion_scale
A dimensionless scaling to be used for scaling up or down the effects from
horizontal diffusion in the boundary layer. Default submeso_diffusion_scale=1.0.
[real, units: dimensionless]
-
use_hblt_constant
For running with a constant boundary layer depth. This for the case when
not using a realistic mixed layer scheme. Default use_hblt_constant=.false.
[logical]
-
constant_hblt
The boundary layer depth for the case when use_hblt_constant=.true.
Default constant_hblt=100.0.
[real, units: metre]
-
use_hblt_equal_mld
For using the diagnosed mld as the hblt for submeso.
This is useful for those test models that do not have a mixed layer
scheme enabled, such as KPP, where the mixed layer scheme provides a
boundary layer depth. In this case, it is sensible to employ the diagnosed
mixed layer depth for the submeso scheme. Additionally, in general it is
more physical to use the mld than the KPP hblt as the depth over which
the submesoscale eddies act. Hence, default use_hblt_equal_mld=.true.
[logical]
-
min_kblt
The minimum number of vertical cells in the surface boundary layer
that are required in order to compute the submesoscale streamfunction.
Default min_kblt=4. Need at least three to fit a parabola with zero
streamfunction at the top and bottom of the boundary layer.
[integer, units: dimensionless]
-
minimum_hblt
For setting a floor to the hblt used for submesoscale scheme.
Default minimum_hblt=0.0.
[real, units: metre]
-
smooth_hblt
For smoothing on the submeso bldepth field. This is useful
since the bldepth obtained from KPP or diagnosed mld can
have some grid noise.
Default smooth_hblt=.false. since this agrees with legacy.
Note that this scheme fails to reproduce across
processor layout, so it remains broken.
[logical]
-
smooth_hblt_num
Number of iterations for the smooothing of bldepth.
Default smooth_hblt_num=1.
[integer]
-
use_psi_legacy
For computing psi using older legacy methods.
These methods are not ideal, and can be problematic
depending on nml settings for the limiters and smoothers.
This option is retained only for legacy purposes.
Default use_psi_legacy=.false.
[logical]
-
smooth_psi
For doing a horizontal 1-2-1 smoothing on the
psix_horz and psiy_horz fields.
Default smooth_psi=.true.
[logical]
-
smooth_psi_num
Number of iterations for the smooothing of psi.
Default smooth_psi_num=2.
[integer]
-
limit_psi
For limiting the magnitude of psi in order to reduce possibility of
model crashes. Rescales the full psi to maintain vertical structure
but to keep overall magnitude within bounds.
Default limit_psi=.false.
[logical]
-
limit_psi_velocity_scale
Velocity scale used to limit the value of psi when limit_psi=.true.
Default limit_psi_velocity_scale=5.0
[real, units: metre/sec]
-
submeso_limit_flux
For limiting the fluxes arising from submeso scheme, according to
tmask_limit. When reach a point where tmask_limit=1.0, then set
the submeso flux for this cell to zero.
Default submeso_limit_flux=.true.
[logical]
-
coefficient_ce
The dimensionless coefficient from the Fox-Kemper etal scheme.
They recommend setting coefficient_ce between 0.06 and 0.08.
Default coefficient_ce=0.07.
[real, units: dimensionless]
-
time_constant
Timescale to mix momentum across the mixed layer.
Default time_constant=86400.0 = 1day.
[real, units: seconds]
-
front_length_const
Take constant horizontal length scale of submesoscale front.
Default front_length_const=5e3.
[real, units: metre]
-
front_length_deform_radius
To compute the front length using the mixed layer deformation
radius. Default front_length_deform_radius=.true. Note,
will have a floor on the variable front length set by the
nml setting for front_length_const.
[logical]
REFERENCES
-
Fox-Kemper, Ferrari, and Hallberg 2008: Parameterization of
mixed layer eddies. Part I: theory and diagnosis
Journal of Physical Oceanography, vol. 38, pages 1145-1165.
-
Fox-Kemper, Danabasoglu, Ferrari, and Hallberg 2008:
Parameterizing submesoscale physics in global models.
Clivar Exchanges, vol 13, no.1, Jan2008. pages 3-5.
-
Fox-Kemper, Danabasoglu, Ferrari, Griffies, Hallberg,
Holland, Peacock, Samuels, 2011: Parameterization of
Mixed Layer Eddies. III: Global Implementation and
Impact on Ocean Climate Simulations, Ocean Modelling,
vol. 39, pages 61-78.
-
Griffies, 2012: Elements of MOM