PUBLIC INTERFACE ~ PUBLIC DATA ~ PUBLIC ROUTINES ~ NAMELIST ~ DIAGNOSTIC FIELDS ~ ERROR MESSAGES ~ REFERENCES ~ NOTES

Module ocean_model_mod

Contact:  Stephen M. Griffies Matt Harrison
Reviewers: 
Change History: WebCVS Log


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

ocean_model_init:
update_ocean_model:
get_ocean_grid_size:
get_ocean_domain:
ocean_model_end:
write_ice_ocean_boundary:
read_ice_ocean_boundary:
init_default_ice_ocean_boundary:
time_filter:


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. ocean_model_init

    DESCRIPTION
    Initialize the ocean model.


  2. update_ocean_model

    DESCRIPTION
    Update in time the ocean model fields.


  3. get_ocean_grid_size

    DESCRIPTION
    Obtain the ocean grid size.


  4. get_ocean_domain

    DESCRIPTION
    Obtain the ocean domain size.


  5. ocean_model_end

    DESCRIPTION
    Close down the ocean model


  6. write_ice_ocean_boundary

    DESCRIPTION
    Write the surface boundary conditions for use in coupled modeling.


  7. read_ice_ocean_boundary

    DESCRIPTION
    Read the surface boundary conditions for use in coupled modeling.


  8. init_default_ice_ocean_boundary

    DESCRIPTION
    Default surface boundary conditions for use in coupled modeling.


  9. 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.


top