Module ocean_model_mod
OVERVIEW
Time step the ocean model using either a twolevel staggered scheme
(the default) or threelevel leap-frog scheme (the older approach).
Top level module for ocean model. Contains routines for
initialization, termination and update of ocean model state.
Design consideration: declarations of top level ocean variables
are private to this module and hence are only available to other routines
through argument lists. For instance, timestep information is passed to
the various modules on the initialization call and stored internally
in the respective modules. This is a crucial design consideration sinces
it maintains modularity and hence maintainability of the code. (mjh)
OTHER MODULES USED
constants_mod
diag_manager_mod
fms_mod
mpp_domains_mod
mpp_mod
time_interp_external_mod
time_manager_mod
ocean_advection_velocity_mod
ocean_bbc_mod
ocean_bih_friction_mod
ocean_convect_mod
ocean_coriolis_mod
ocean_density_mod
ocean_diagnostics_mod
ocean_domains_mod
ocean_freesurf_mod
ocean_grids_mod
ocean_horz_diffuse_mod
ocean_lap_friction_mod
ocean_neutral_physics_mod
ocean_obc_mod
ocean_operators_mod
ocean_overflow_mod
ocean_polar_filter_mod
ocean_pressure_mod
ocean_rivermix_mod
ocean_riverspread_mod
ocean_sbc_mod
ocean_shortwave_pen_mod
ocean_sigma_diffuse_mod
ocean_sponge_mod
ocean_thickness_mod
ocean_topog_mod
ocean_tracer_advect_mod
ocean_tracer_mod
ocean_tracer_util_mod
ocean_tpm_mod
ocean_types_mod
ocean_util_mod
ocean_velocity_advect_mod
ocean_velocity_diag_mod
ocean_velocity_mod
ocean_vert_mix_coeff_mod
ocean_vert_mix_mod
ocean_workspace_mod
ocean_xlandinsert_mod
ocean_xlandmix_mod
oda_driver_mod
PUBLIC INTERFACE
PUBLIC DATA
None.
PUBLIC ROUTINES
-
ocean_model_init
-
DESCRIPTION
- Initialize the ocean model.
-
update_ocean_model
-
DESCRIPTION
- Update in time the ocean model fields.
-
get_ocean_grid_size
-
DESCRIPTION
- Obtain the ocean grid size.
-
get_ocean_domain
-
DESCRIPTION
- Obtain the ocean domain size.
-
ocean_model_end
-
DESCRIPTION
- Close down the ocean model
-
write_ice_ocean_boundary
-
DESCRIPTION
- Write the surface boundary conditions for use in coupled modeling.
-
read_ice_ocean_boundary
-
DESCRIPTION
- Read the surface boundary conditions for use in coupled modeling.
-
init_default_ice_ocean_boundary
-
DESCRIPTION
- Default surface boundary conditions for use in coupled modeling.
-
time_filter
-
DESCRIPTION
- When threelevel time tendency is used, perform Robert-Asselin time
filtering on velocity and tracer.
Also perform time filter on surface height by replacing eta_t(tau)
with eta_t_bar(tau).
NAMELIST
&ocean_model_nml
-
layout
Processor domain layout for ocean model.
[integer]
-
time_tendency
Possible time stepping schemes are the following.
1. "threelevel" has the following characteristics
leap-frog for the time tendency which means the
inviscid/nondissipative processes are at time tau.
forward for lateral mixing processes (dissipation at taum1)
implicit for vertical dissipative (with aidif = 1.0)
semi-implicit for Coriolis (with acor>0)
Because of the need to apply time filters to suppress
leap-frog splitting, the threelevel time stepping scheme
does not conserve total tracer content in the model.
2. "twolevel" has the following characteristics:
staggered 2nd order forward time tendency, which means
that tracer advection, lateral tracer and velocity mixing,
are at time tau, and pressure gradients at taup1.
Adams-Bashforth (either 2nd or 3rd order) for velocity advection
implicit vertical mixing (with aidif = 1.0)
semi-implicit for Coriolis (with acor > 0)
This scheme conserves total volume and tracer in the model.
[character]
-
threelevel_time_filter
For running with time filtering applied to the threelevel time
tendency scheme. Without time filtering, the model soon goes unstable.
[logical]
-
robert
Parameter setting the strength of the time filtering applied via the
Robert-Asselin filter when using threelevel_time_filter=.true.
Typically taken as robert ~ 0.05 for global models.
[real]
-
baroclinic_split
Ratio baroclinic_split = dtts/dtuv.
Transients corrupted if baroclinic_split > 1.
[integer]
-
barotropic_split
Ratio barotropic_split = dtuv/dtfs. Must be
large enough to resolve the barotropic gravity waves
captured by the barotropic part of the model.
[integer]
-
surface_height_split
Ratio surface_height_split = dtts/dteta.
Typically unity for models where baroclinic_split=1,
but something larger when baroclinic_split order 10. dteta is the time
step used for update of eta_t. If surface_height_split is not equal to
unity, then tracer conservation properties are compromised.
[integer]
-
aidif
aidif=1 for implicit in time solution of the vertical mixing equation.
aidif=0 for explicit in time solution of the vertical mixing equation.
semi-implicit method with 0 < aidif < 1 is not fully supported in mom4.
[real]
-
acor
acor=0.0 means explicit Coriolis force. 0.5 le acor le 1.0 means semi-implicit.
semi-implicit removes dtuv time step constraint associated with intertial oscillations,
but it leads to Coriolis force affecting energy balances.
[real]
-
velocity_change_diag_freq
perform velocity_change_check every n timesteps (1 == every_tstep).
[integer]
-
velocity_change_check
For checking to see whether the abs(vel(tau)-vel(tam1))
is greater than velocity_delta_max. If so, then we likely have
problems with leap-frog noise.
[logical]
-
velocity_change_max
For checking to see whether the abs(vel(tau)-vel(taum1)) >velocity_change_max.
If so, then will bring the model down if have problems in too many places.
[real, units: meter/sec]
-
velocity_change_max_num
Maximum number of points allowed where abs(vel(tau)-vel(taum1)) >velocity_change_max.
[integer]
-
energy_diag_freq
perform energy analysis every n timesteps (1 == every_tstep).
[integer]
-
debug
For overall model debugging. Set true to print cksums at
each timestep for debugging purposes.
[logical]
DATA SETS
None.
ERROR MESSAGES
None.