Module ocean_barotropic_mod
OVERVIEW
Update the vertically integrated dynamics using a
split-explicit algorithm.
This module time steps the vertically integrated dynamics.
Two explicit time stepping schemes are available:
A. Leap-frog with optional Robert-Asselin time filter
B. Predictor-Corrector with adjustable dissipation
Both use a split-explicit method.
There is no rigid lid available in mom4.
OTHER MODULES USED
constants_mod
diag_manager_mod
fms_mod
fms_io_mod
mpp_domains_mod
mpp_mod
time_manager_mod
ocean_bih_friction_mod
ocean_domains_mod
ocean_lap_friction_mod
ocean_obc_mod
ocean_operators_mod
ocean_parameters_mod
ocean_types_mod
ocean_util_mod
ocean_workspace_mod
PUBLIC INTERFACE
PUBLIC DATA
None.
PUBLIC ROUTINES
-
ocean_barotropic_init
-
DESCRIPTION
- Initialize the barotropic module
-
eta_and_pbot_update
-
DESCRIPTION
- Time step the surface height or pbot using a "big" time step.
These fields are coincident in time with tracers.
NOTE: For pbot_t updates, we time step anompb for accuracy, then
add rho0grav*ht to get pbot_t.
-
eta_and_pbot_diagnose
-
DESCRIPTION
- Diagnose surface height or pbot depending on the vertical coordinate.
Note that dzt has been updated to taup1 before this routine is called
since we have already called update_tcell_thickness.
Also, compute geodepth_zt in this routine. It is necessary to do
do this step here, since for pressure coordinate models we do not
know eta_t(taup1) until this routine...
-
eta_and_pbot_tendency
-
DESCRIPTION
- Compute tendency for surface height or bottom pressure.
-
update_ocean_barotropic
-
DESCRIPTION
- Time step the external mode fields using either a leap-frog scheme
or a predictor-corrector scheme. Time average these fields to
update the vertically integrated density weighted velocity
(urhod,vrhod) and the time averaged surface height eta_t_bar
or bottom pressure anompb_bar.
NOTE: surface pressure gradient and gradient of anomalous
bottom pressure are needed for the energy analysis.
Also, if splitting=false or update_velocity_via_uprime=.false.,
use these for velocity update in ocean_velocity_mod.
Include the tidal forcing if present.
Include geoid perturbation if present.
Use time averaged eta and pbot to ensure the most stable pressure
gradient for use with splitting=false or update_velocity_via_uprime=.false.
-
ocean_barotropic_forcing
-
DESCRIPTION
- Construct the vertically integrated forcing. This forcing is to be
held constant over the barotropic timesteps. At the time of calling
this routine, accel has the contributions from explicit-time
forcing, except for the following:
1. Coriolis force is updated on the barotropic time steps when
integrating the barotropic dynamics. So it should not
be included in forcing_bt.
2. Contributions from smf and bmf are added to forcing_bt to allow
for simpler handling of vertical friction implicitly in time.
3. The accel array is already thickness and density weighted, so
a vertical density weighted integral is here just a vertical sum.
-
ocean_mass_forcing
-
DESCRIPTION
- Construct the vertically integrated mass source for
evolution of the free surface and/or bottom pressure.
Also construct the time tendency for the atmospheric pressure.
-
leap_frog_barotropic_depth
-
DESCRIPTION
- Integrate barotropic dynamics for "nts" timesteps using leapfrog.
Assume a depth-like vertical coordinate, so solve for surface height.
-
pred_corr_barotropic_depth
-
DESCRIPTION
- Integrate barotropic dynamics for "nts" timesteps using
predictor-corrector. Assume depth-like vertical coordinate
so solve for surface height.
This scheme is more stable than the leap_frog since it can run with
longer time steps to resolve external mode gravity waves. It also
provides some extra smoothing when pred_corr_gamma > 0 and so the options
smooth_eta_t_bt_laplacian and smooth_eta_t_bt_biharmonic may not be
needed.
Note that OBC has not been tested for use with predictor-corrector.
-
pred_corr_barotropic_press
-
DESCRIPTION
- Integrate barotropic dynamics for "nts" timesteps using
predictor-corrector. Assume pressure-like vertical coordinate
so solve here for the bottom pressure.
This scheme provides some smoothing of small spatial scales
when pred_corr_gamma > 0.
NOTE: the pressure gradient force is based on gradients of
(pbot_t_bt - rho0*grav*ht) rather than gradients of pbot_t_bt.
This approach aims to improve accuracy of the pressure force.
-
eta_smooth_diagnosed
-
DESCRIPTION
- Smooth eta_t for case when running with pressure models and wish
to have a diagnostic eta field smoothed.
-
ocean_eta_smooth
-
DESCRIPTION
- Compute tendency for smoothing eta and tracer.
Use either a laplacian or a biharmonic smoothing operator.
Recommend against using the biharmonic, since it is not a
positive definite operator and so can lead to extrema.
-
ocean_pbot_smooth
-
DESCRIPTION
- Compute tendency for diffusion of (pbot_t-pbot0) in both pbot_t
and tracer. Need to consider tracer in order to maintain compability
between tracer and mass conservation equations.
Use either a laplacian or a biharmonic smoother.
Recommend against using the biharmonic, since it is
NOT a positive definite operator and so can lead to extrema.
-
barotropic_integrals
-
DESCRIPTION
- Compute area averaged fresh water and surface height and ocean mass.
-
barotropic_energy
-
DESCRIPTION
- Compute energetics of vertically integrated flow.
-
read_barotropic
-
DESCRIPTION
- Read in external mode fields from restart file.
-
ocean_barotropic_restart
-
DESCRIPTION
- Write out restart files registered through register_restart_file
Call to reset_field_pointer only needed for fields with a time index.
-
ocean_barotropic_end
-
DESCRIPTION
- Write out external mode fields to restart file.
-
maximum_convrhoud
-
DESCRIPTION
- Compute maximum convergence(rho_ud,rho_vd).
-
barotropic_chksum
-
DESCRIPTION
- Compute checksum for external mode fields.
-
psi_compute
-
DESCRIPTION
- Compute quasi-barotropic streamfunctions for diagnostic purposes.
When no fresh water and steady state, these two streamfunctions
will be equal, and they will be equal to the rigid lid barotropic
streamfunction in the Boussinesq case.
Original algorithm: Stephen.Griffies@noaa.gov
Modifications for parallel efficiency: Giang.Nong@noaa.gov
13MAR2007: Change units to 10^9 kg/s, which is a "mass Sv"
This is the natural unit of transport for a mass-based
vertical coordinate model.
Updated Dec2009 to be compatible with tx_trans and ty_trans
calculation.
-
eta_terms_diagnose
-
DESCRIPTION
- Diagnose various contributions to the sea level.
WARNING: The steric diagnostics from this subroutine are confusing
when evaluated in a Boussinesq model. The reason is that volume
conserving Boussinesq models have spurious mass sources, which
corrupt the bottom pressure signal. One needs to apply corrections
to make sense of the Boussinesq models for purposes of studying
mass budgets, including the local contribution to steric effects.
A/ contributions from dynamics, eustatic, and steric:
eta_nonbouss = (eta_dynamic + eta_water + eta_source) + eta_steric
= eta_nonsteric + eta_steric
The time stepping diagnosed in this subroutine can lead to individual
components to etanb that are quite huge. The resulting sum, however,
should be quite close to eta_t. In particular, locations of fresh
water input can create eta_water that grows unboundedely, with
a compenstating eta_dynamic that is negative, accounting for the
dynamical adjustment accuring in the presence of water introduced to
the ocean.
For PRESSURE_BASED vertical coordinates, eta_smooth_tend has
already been computed in subroutine eta_smooth_diagnosed.
We do not add this contribution to eta_nonbouss, since this
piece is not part of the tendencies affecting bottom pressure.
It is only added for cosmetic reasons. It is for this reason
that eta_smooth is NOT included in the restart file.
For calculation of the steric contribution, a single time step
scheme is assumed, which is the recommended time stepping in
MOM4p1.
For DEPTH_BASED models, the smoothing of eta is included in
Ext_mode%source, so eta_smooth_tend is zero for depth-based models.
For PRESSURE_BASED vertical coordinates, eta_nonbouss as computed
in this routine is very close to the prognostic eta_t. Differences
arise from any possible smoothing applied to the diagnosed eta_t.
B/ contributions from boundary fluxes, with residual due to
SGS fluxes and nonlinear equation of state.
-
eta_truncate
-
DESCRIPTION
- Truncate eta_t to keep
dzt(1) + eta_t >= frac_crit_cell_height*dzt(1)
and
eta_t <= eta_max
May be needed when run GEOPOTENTIAL models.
-
eta_check
-
DESCRIPTION
- Perform diagnostic check on top cell thickness. Useful when
when use GEOPOTENTIAL vertical coordinate.
-
tidal_forcing_init
-
DESCRIPTION
- Initialize fields needed for lunar and solar tidal forcing.
-
geoid_forcing_init
-
DESCRIPTION
- Initialize fields needed for modifying the geoid, relative to the
standard geoid.
-
get_tidal_forcing
-
DESCRIPTION
- Compute equilibrium tidal forcing.
-
ideal_initialize_eta
-
DESCRIPTION
- Idealized initial condition for eta.
-
REMAP_BT_TO_BU_LOCAL
-
DESCRIPTION
- Local version of the operator, needed here for initialization
when read in eta information from an initialization file.
Since barotropic is initialized prior to operators, we need
to have this operator here locally.
NAMELIST
&ocean_barotropic_nml
-
write_a_restart
Set true to write a restart. False setting only for rare
cases where wish to benchmark model without measuring the cost
of writing restarts and associated chksums.
Default is write_a_restart=.true.
[logical]
-
zero_tendency
If true, will not integrate the barotropic fields.
[logical]
-
zero_forcing_bt
Will set to zero all of the terms forcing the barotropic velocity.
[logical]
-
zero_nonlinear_forcing_bt
Will set to zero the nonlinear forcing terms, leaving only the smf and bmf
terms to force the barotropic velocity.
[logical]
-
zero_eta_ic
To initialize eta_t to zero.
[logical]
-
zero_eta_t
To maintain eta_t at zero, but to allow other fields to evolve
For debugging. Default zero_eta_t=.false.
[logical]
-
zero_eta_u
To maintain eta_u at zero, but to allow other fields to evolve
For debugging. Default zero_eta_u=.false.
[logical]
-
zero_eta_tendency
To maintain deta_dt at zero. For debugging. Default zero_eta_t=.false.
[logical]
-
ideal_initial_eta
To initialize eta_t to an ideal profile. This overrides
all other initialization that may have occurred.
Default=.false.
[logical]
-
ideal_initial_eta_amplitude
Amplitude for initializing eta with an ideal profile.
Default ideal_initial_eta_amplitude = 5.0
[real, units: metre]
-
ideal_initial_eta_xwidth
Width in x-direction for sine-wave profile.
Default xwidth=100e3
[real, units: metre]
-
ideal_initial_eta_ywidth
Width in y-direction for sine-wave profile.
Default ywidth=100e3
[real, units: metre]
-
barotropic_time_stepping_mom4p0
Use the general approach from mom4p0, in which the eta_t and
pbot_t fields are updated with a big time step. This approach
can be used with either barotropic predictor-corrector or
barotropic leap-frog.
Default barotropic_time_stepping_mom4p0=.false.
[logical]
-
barotropic_time_stepping_mom4p1
Use the alternative approach in which we assume the barotropic
scheme is a predictor-corrector. In this way, the eta_t and
pbot_t fields are updated with a time average. This approach
is only available when using barotropic_pred_corr=.true.
Default barotropic_time_stepping_mom4p1=.false.
[logical]
-
barotropic_leap_frog
Use leap-frog scheme for barotropic time stepping.
Not the recommended method, since it requires smaller time
steps. It is maintained for legacy purposes.
Default barotropic_leap_frog=.false.
[logical]
-
robert_asselin_bt
Robert time filter for use with leap-frog scheme for barotropic.
[real]
-
barotropic_pred_corr
Use preditor-corrector for barotropic time stepping.
This is the recommended method.
Default barotropic_pred_corr=.true.
[logical]
-
pred_corr_gamma
Dimensionless dissipation parameter for the preditor-corrector
scheme. Setting pred_corr_gamma=0.0 reduces the scheme to a
forward-backward, but it has been found to be unstable.
So pred_corr_gamma > 0.0 is recommended. Note that
pred_corr_gamma > 0.25 may be over-dissipated and so may
go unstable.
[real, units: dimensionless]
-
smooth_eta_t_bt_laplacian
For spatially smoothing the eta_t field at each barotropic
time step using a Laplacian operator. May not be necessary when running
with barotropic_pred_corr=.true. and pred_corr_gamma > 0.0, since
predictor-corrector has dissipation from pred_corr_gamma > 0.0.
Applicable just for DEPTH_BASED vertical coordinates.
[logical]
-
smooth_eta_t_bt_biharmonic
For spatially smoothing the eta_t field at each barotropic
time step using a biharmonic operator. May not be necessary when running
with barotropic_pred_corr=.true. and pred_corr_gamma > 0.0, since
predictor-corrector has dissipation from pred_corr_gamma > 0.0.
Applicable just for DEPTH_BASED vertical coordinates.
WARNING: This operator is NOT positive definite, and so can
produce spurious extrema. It is not recommended just for this
reason.
[logical]
-
smooth_eta_t_laplacian
For spatially smoothing the eta_t field on the big time step
by using a laplacian operator. For compatibility
and global conservation, must also introduce a mixing
to the thickness weighted tracer concentration in the k=1 cell.
Applicable just for DEPTH_BASED vertical coordinates.
[logical]
-
smooth_eta_t_biharmonic
For spatially smoothing the eta_t field on the big time step
by using a biharmonic operator. For compatibility
and global conservation, must also introduce a mixing
to the thickness weighted tracer concentration in the k=1 cell.
Applicable just for DEPTH_BASED vertical coordinates.
WARNING: This operator is NOT positive definite, and so can
produce spurious extrema. It is not recommended just for this
reason.
[logical]
-
eta_offset
Uniform offset for use in determining the filter
acting on tracer when smoothing the surface height.
Default eta_offset=1e-12.
[real, units: metre]
-
smooth_eta_diag_laplacian
For spatially smoothing the diagnosed eta_t field
using a laplacian operator. Default
smooth_eta_diag_laplacian=.true.
[logical]
-
smooth_eta_diag_biharmonic
For spatially smoothing the diagnosed eta_t field
using a biharmonic operator. Default
smooth_eta_diag_biharmonic=.false.
[logical]
-
vel_micom_lap_diag
Velocity scale that is used for computing the MICOM Laplacian mixing
coefficient used in the Laplacian smoothing of diagnosed surface height.
[real, units: m/sec]
-
vel_micom_bih_diag
Velocity scale that is used for computing the MICOM biharmonic mixing
coefficient used in the biharmonic smoothing of diagnosed surface height.
[real, units: m/sec]
-
smooth_anompb_bt_laplacian
For spatially smoothing anomalous pbot_t at each barotropic
time step using a Laplacian operator. May not be necessary when running
with barotropic_pred_corr=.true. and pred_corr_gamma > 0.0, since
predictor-corrector has dissipation from pred_corr_gamma > 0.0.
Applicable just for PRESSURE_BASED vertical coordinates.
[logical]
-
smooth_anompb_bt_biharmonic
For spatially smoothing the anomalous pbot_t field at each barotropic
time step using a biharmonic operator. May not be necessary when running
with barotropic_pred_corr=.true. and pred_corr_gamma > 0.0, since
predictor-corrector has dissipation from pred_corr_gamma > 0.0.
Applicable just for PRESSURE_BASED vertical coordinates.
WARNING: This operator is NOT positive definite, and so can
produce spurious extrema. It is not recommended just for this
reason.
[logical]
-
smooth_pbot_t_laplacian
For spatially smoothing pbot_t-pbot0 on the big time step
using a laplacian operator. For compatibility
and global conservation, must also introduce a mixing
to the thickness weighted tracer concentration in the k=kbot cell.
Applicable just for PRESSURE_BASED vertical coordinates.
[logical]
-
smooth_pbot_t_biharmonic
For spatially smoothing pbot_t-pbot0 on the big time step
by using a biharmonic operator. For compatibility
and global conservation, must also introduce a mixing
to the thickness weighted tracer concentration in the k=kbot cell.
Applicable just for PRESSURE_BASED vertical coordinates.
WARNING: This operator is NOT positive definite, and so can
produce spurious extrema. It is not recommended just for this
reason.
[logical]
-
pbot_offset
Uniform offset for use in determining the filter
acting on tracer when smoothing the bottom pressure anomaly.
Default pbot_offset=1e-12.
[real, units: Pa]
-
vel_micom_lap
Velocity scale that is used for computing the MICOM Laplacian mixing
coefficient used in the Laplacian smoothing of surface height
or anomalous bottom pressure.
[real, units: m/sec]
-
vel_micom_bih
Velocity scale that is used for computing the MICOM biharmonic mixing
coefficient used in the biharmonic smoothing of surface height
or anomalous bottom pressure.
[real, units: m/sec]
-
udrho_bt_lap
For non-geopotential vertical coordinates, the vertically
integrated horizontal momentum can be noisy. It is therefore
useful to add a smoothing operator. Here, we apply the
laplacian friction as coded in the friction module using
the vertically averaged isotropic viscosity as well as a
background. Do so on each barotropic time step.
Default udrho_bt_lap=.false.
[logical]
-
udrho_bt_bih
For non-geopotential vertical coordinates, the vertically
integrated horizontal momentum can be noisy. It is therefore
useful to add a smoothing operator. Here, we apply the
biharmonic friction as coded in the friction module using
the vertically averaged isotropic viscosity as well as a
background. Do so on each barotropic time step.
Default udrho_bt_bih=.false.
[logical]
-
udrho_lap
For non-geopotential vertical coordinates, the vertically
integrated horizontal momentum can be noisy. It is therefore
useful to add a smoothing operator. Here, we apply the
laplacian friction as coded in the friction module using
the vertically averaged isotropic viscosity as well as a
background. Do so just on the baroclinic time step.
Default udrho_lap=.false.
[logical]
-
udrho_bih
For non-geopotential vertical coordinates, the vertically
integrated horizontal momentum can be noisy. It is therefore
useful to add a smoothing operator. Here, we apply the
biharmonic friction as coded in the friction module using
the vertically averaged isotropic viscosity as well as a
background. Do so just on the baroclinic time step.
Default udrho_bih=.false.
[logical]
-
udrho_lap_vel_micom
Velocity scale that is used for computing the MICOM Laplacian mixing
coefficient used in the Laplacian smoothing of udrho.
Default udrho_lap_vel_micom=.05
[real, units: m/sec]
-
udrho_bih_vel_micom
Velocity scale that is used for computing the MICOM biharmonic mixing
coefficient used in the biharmonic smoothing of udrho.
Default udrho_bih_vel_micom=.01
[real, units: m/sec]
-
tidal_forcing_m2
Forces from lunar M2 tidal constituent.
[logical]
-
tidal_forcing_8
Forces from 8 lunar and solar tidal constituents.
[logical]
-
tidal_forcing_ideal
For ideal tidal forcing, which has a bump configuration.
[logical]
-
geoid_forcing
For modifying the geoid, implemented as a time independent
tidal forcing. Need to read in a file to obtain the offset
geoid profile.
Default geoid_forcing=.false.
[logical]
-
barotropic_bmf
To apply bottom drag over each barotropic time step.
Note that enhanced drag from unresolved tides is not
facilitated with this approach.
Default barotropic_bmf=.false.
[logical]
-
barotropic_bmf_cdbot
Dimensionless bottom drag coefficient for applying the bottom drag
on the barotropic time step. Default barotropic_bmf_cdbot=1e-3.
[real, units: dimensionless]
-
truncate_eta
To truncate the surface height deviation so to ensure positive thickness
within the top cell. This method will not conserve volume or tracer.
It is coded for cases when conservation is not critical but wish to
run GEOPOTENTIAL models w/ large free surface height deviations, such
as when running with tides and very fine vertical resolution.
[logical]
-
verbose_truncate
For verbose printout on truncate_eta
[logical]
-
frac_crit_cell_height
When use GEOPOTENTIAL vertical coordinate, the
top model tracer grid cell has thickness dzt(i,j,1) = dzt(1) + eta_t(i,j).
0 < frac_crit_cell_height <= 1 sets the fraction of dzt(1) that is allowed
prior to bringing the model down due to overly small dzt(i,j,1).
[real, units: dimensionless]
-
eta_max
The maximum positive eta_t allowed when truncate_eta is true.
[real, units: meter]
-
debug_this_module
Print out lots of diagnostics of use for debugging.
[logical]
-
verbose_init
For brief or full printout on initialization
[logical]
-
diag_step
Frequency for output of ascii barotropic diagnostics.
[integer]
DATA SETS
None.
ERROR MESSAGES
None.
REFERENCES
- S.M. Griffies, R.C. Pacanowski, R.M. Schmidt, and V. Balaji
Tracer Conservation with an Explicit Free Surface Method for
Z-coordinate Ocean Models
Monthly Weather Review (2001) vol 129 pages 1081--1098
- S.M. Griffies
Fundamentals of Ocean Climate Models
Princeton University Press (2004)
- S.M. Griffies, M.J. Harrison, R.C. Pacanowski, and A. Rosati
A Technical Guide to MOM4 (2004)
- S.M. Griffies: Elements of MOM4p1 (2006)
COMPILER SPECIFICS
None.
PRECOMPILER OPTIONS
None.
LOADER OPTIONS
None.
TEST PROGRAM
None.
KNOWN BUGS
None.
NOTES
None.
FUTURE PLANS
None.