mom_dynamics_split_rk2 module reference

Time step the adiabatic dynamic core of MOM using RK2 method.

More…

Data Types

mom_dyn_split_rk2_cs

MOM_dynamics_split_RK2 module control structure.

Functions/Subroutines

step_mom_dyn_split_rk2()

RK2 splitting for time stepping MOM adiabatic dynamics.

register_restarts_dyn_split_rk2()

This subroutine sets up any auxiliary restart variables that are specific to the unsplit time stepping scheme.

initialize_dyn_split_rk2()

This subroutine initializes all of the variables that are used by this dynamic core, including diagnostics and the cpu clocks.

end_dyn_split_rk2()

Close the dyn_split_RK2 module.

Detailed Description

This file time steps the adiabatic dynamic core by splitting between baroclinic and barotropic modes. It uses a pseudo-second order Runge-Kutta time stepping scheme for the baroclinic momentum equation and a forward-backward coupling between the baroclinic momentum and continuity equations. This split time-stepping scheme is described in detail in Hallberg (JCP, 1997). Additional issues related to exact tracer conservation and how to ensure consistency between the barotropic and layered estimates of the free surface height are described in Hallberg and Adcroft (Ocean Modelling, 2009). This was the time stepping code that is used for most GOLD applications, including GFDL’s ESM2G Earth system model, and all of the examples provided with the MOM code (although several of these solutions are routinely verified by comparison with the slower unsplit schemes).

The subroutine step_MOM_dyn_split_RK2 actually does the time stepping, while register_restarts_dyn_split_RK2 sets the fields that are found in a full restart file with this scheme, and initialize_dyn_split_RK2 initializes the cpu clocks that are used in this module. For largely historical reasons, this module does not have its own control structure, but shares the same control structure with MOM.F90 and the other MOM_dynamics_… modules.

Type Documentation

type mom_dynamics_split_rk2/mom_dyn_split_rk2_cs

MOM_dynamics_split_RK2 module control structure.

Type fields
  • % id_uh [integer] :: Diagnostic IDs.

  • % id_vh [integer] :: Diagnostic IDs.

  • % id_umo [integer] :: Diagnostic IDs.

  • % id_vmo [integer] :: Diagnostic IDs.

  • % id_umo_2d [integer] :: Diagnostic IDs.

  • % id_vmo_2d [integer] :: Diagnostic IDs.

  • % id_pfu [integer] :: Diagnostic IDs.

  • % id_pfv [integer] :: Diagnostic IDs.

  • % id_cau [integer] :: Diagnostic IDs.

  • % id_cav [integer] :: Diagnostic IDs.

  • % id_h_pfu [integer] :: Diagnostic IDs.

  • % id_h_pfv [integer] :: Diagnostic IDs.

  • % id_hf_pfu_2d [integer] :: Diagnostic IDs.

  • % id_hf_pfv_2d [integer] :: Diagnostic IDs.

  • % id_intz_pfu_2d [integer] :: Diagnostic IDs.

  • % id_intz_pfv_2d [integer] :: Diagnostic IDs.

  • % id_pfu_visc_rem [integer] :: Diagnostic IDs.

  • % id_pfv_visc_rem [integer] :: Diagnostic IDs.

  • % id_h_cau [integer] :: Diagnostic IDs.

  • % id_h_cav [integer] :: Diagnostic IDs.

  • % id_hf_cau_2d [integer] :: Diagnostic IDs.

  • % id_hf_cav_2d [integer] :: Diagnostic IDs.

  • % id_intz_cau_2d [integer] :: Diagnostic IDs.

  • % id_intz_cav_2d [integer] :: Diagnostic IDs.

  • % id_cau_visc_rem [integer] :: Diagnostic IDs.

  • % id_cav_visc_rem [integer] :: Diagnostic IDs.

  • % id_uav [integer] :: Diagnostic IDs.

  • % id_vav [integer] :: Diagnostic IDs.

  • % id_u_bt_accel [integer] :: Diagnostic IDs.

  • % id_v_bt_accel [integer] :: Diagnostic IDs.

  • % id_h_u_bt_accel [integer] :: Diagnostic IDs.

  • % id_h_v_bt_accel [integer] :: Diagnostic IDs.

  • % id_hf_u_bt_accel_2d [integer] :: Diagnostic IDs.

  • % id_hf_v_bt_accel_2d [integer] :: Diagnostic IDs.

  • % id_intz_u_bt_accel_2d [integer] :: Diagnostic IDs.

  • % id_intz_v_bt_accel_2d [integer] :: Diagnostic IDs.

  • % id_u_bt_accel_visc_rem [integer] :: Diagnostic IDs.

  • % id_v_bt_accel_visc_rem [integer] :: Diagnostic IDs.

  • % real (* pbce [*, *) :: CAu = f*v - u.grad(u) [L T-2 ~> m s-2].

  • % real :: PFu = -dM/dx [L T-2 ~> m s-2].

  • % real :: Zonal acceleration due to convergence of the along-isopycnal stress tensor [L T-2 ~> m s-2].

  • % real :: CAv = -f*u - u.grad(v) [L T-2 ~> m s-2].

  • % real :: PFv = -dM/dy [L T-2 ~> m s-2].

  • % real :: Meridional acceleration due to convergence of the along-isopycnal stress tensor [L T-2 ~> m s-2].

  • % real :: Both the fraction of the zonal momentum originally in a layer that remains after a time-step of viscosity, and the fraction of a time-step worth of a barotropic acceleration that a layer experiences after viscosity is applied. Nondimensional between 0 (at the bottom) and 1 (far above).

  • % real :: The zonal layer accelerations due to the difference between the barotropic accelerations and the baroclinic accelerations that were fed into the barotopic calculation [L T-2 ~> m s-2].

  • % real :: Both the fraction of the meridional momentum originally in a layer that remains after a time-step of viscosity, and the fraction of a time-step worth of a barotropic acceleration that a layer experiences after viscosity is applied. Nondimensional between 0 (at the bottom) and 1 (far above).

  • % real :: The meridional layer accelerations due to the difference between the barotropic accelerations and the baroclinic accelerations that were fed into the barotopic calculation [L T-2 ~> m s-2].

  • % real :: Instantaneous free surface height (in Boussinesq mode) or column mass anomaly (in non-Boussinesq mode) [H ~> m or kg m-2].

  • % real :: layer x-velocity with vertical mean replaced by time-mean barotropic velocity over a baroclinic timestep [L T-1 ~> m s-1]

  • % real :: layer y-velocity with vertical mean replaced by time-mean barotropic velocity over a baroclinic timestep [L T-1 ~> m s-1]

  • % real :: arithmetic mean of two successive layer thicknesses [H ~> m or kg m-2]

  • % real :: instantaneous SSH used in calculating PFu and PFv [H ~> m or kg m-2]

  • % real :: average x-volume or mass flux determined by the barotropic solver [H L2 T-1 ~> m3 s-1 or kg s-1]. uhbt is roughly equal to the vertical sum of uh.

  • % real :: average y-volume or mass flux determined by the barotropic solver [H L2 T-1 ~> m3 s-1 or kg s-1]. vhbt is roughly equal to vertical sum of vh.

  • % real :: pbce times eta gives the baroclinic pressure anomaly in each layer due to free surface height anomalies [L2 H-1 T-2 ~> m s-2 or m4 kg-1 s-2].

  • % taux_bot [real(:,:),pointer] :: frictional x-bottom stress from the ocean to the seafloor [R L Z T-2 ~> Pa]

  • % tauy_bot [real(:,:),pointer] :: frictional y-bottom stress from the ocean to the seafloor [R L Z T-2 ~> Pa]

  • % bt_cont [type(bt_cont_type),pointer] :: A structure with elements that describe the effective summed open face areas as a function of barotropic flow.

  • % bt_use_layer_fluxes [logical] :: If true, use the summed layered fluxes plus an adjustment due to a changed barotropic velocity in the barotropic continuity equation.

  • % split_bottom_stress [logical] :: If true, provide the bottom stress calculated by the vertical viscosity to the barotropic solver.

  • % calc_dtbt [logical] :: If true, calculate the barotropic time-step dynamically.

  • % be [real] :: A nondimensional number from 0.5 to 1 that controls the backward weighting of the time stepping scheme.

  • % begw [real] :: A nondimensional number from 0 to 1 that controls the extent to which the treatment of gravity waves is forward-backward (0) or simulated backward Euler (1). 0 is almost always used.

  • % debug [logical] :: If true, write verbose checksums for debugging purposes.

  • % debug_obc [logical] :: If true, do debugging calls for open boundary conditions.

  • % module_is_initialized [logical] :: Record whether this mouled has been initialzed.

  • % diag [type(diag_ctrl),pointer] :: A structure that is used to regulate the timing of diagnostic output.

  • % adp [type(accel_diag_ptrs),pointer] :: A structure pointing to the various accelerations in the momentum equations, which can later be used to calculate derived diagnostics like energy budgets.

  • % cdp [type(cont_diag_ptrs),pointer] :: A structure with pointers to various terms in the continuity equations, which can later be used to calculate derived diagnostics like energy budgets.

  • % hor_visc_csp [type(hor_visc_cs),pointer] :: A pointer to the horizontal viscosity control structure.

  • % continuity_csp [type(continuity_cs),pointer] :: A pointer to the continuity control structure.

  • % coriolisadv_csp [type(coriolisadv_cs),pointer] :: A pointer to the CoriolisAdv control structure.

  • % pressureforce_csp [type(pressureforce_cs),pointer] :: A pointer to the PressureForce control structure.

  • % barotropic_csp [type(barotropic_cs),pointer] :: A pointer to the barotropic stepping control structure.

  • % thickness_diffuse_csp [type(thickness_diffuse_cs),pointer] :: A pointer to a structure containing interface height diffusivities.

  • % vertvisc_csp [type(vertvisc_cs),pointer] :: A pointer to the vertical viscosity control structure.

  • % set_visc_csp [type(set_visc_cs),pointer] :: A pointer to the set_visc control structure.

  • % tides_csp [type(tidal_forcing_cs),pointer] :: A pointer to the tidal forcing control structure.

  • % ale_csp [type(ale_cs),pointer] :: A pointer to the ALE control structure.

  • % obc [type(ocean_obc_type),pointer] :: A pointer to an open boundary condition type that specifies whether, where, and what open boundary conditions are used. If no open BCs are used, this pointer stays nullified. Flather OBCs use open boundary_CS as well.

  • % update_obc_csp [type(update_obc_cs),pointer] :: A pointer to the update_OBC control structure.

  • % pass_eta [type(group_pass_type)] :: Structure for group halo pass.

  • % pass_visc_rem [type(group_pass_type)] :: Structure for group halo pass.

  • % pass_uvp [type(group_pass_type)] :: Structure for group halo pass.

  • % pass_hp_uv [type(group_pass_type)] :: Structure for group halo pass.

  • % pass_uv [type(group_pass_type)] :: Structure for group halo pass.

  • % pass_h [type(group_pass_type)] :: Structure for group halo pass.

  • % pass_av_uvh [type(group_pass_type)] :: Structure for group halo pass.

Function/Subroutine Documentation

subroutine mom_dynamics_split_rk2/step_mom_dyn_split_rk2(u, v, h, tv, visc, Time_local, dt, forces, p_surf_begin, p_surf_end, uh, vh, uhtr, vhtr, eta_av, G, GV, US, CS, calc_dtbt, VarMix, MEKE, thickness_diffuse_CSp, Waves)

RK2 splitting for time stepping MOM adiabatic dynamics.

Parameters
  • g :: [inout] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • u :: [inout] zonal velocity [L T-1 ~> m s-1]

  • v :: [inout] merid velocity [L T-1 ~> m s-1]

  • h :: [inout] layer thickness [H ~> m or kg m-2]

  • tv :: [in] thermodynamic type

  • visc :: [inout] vertical visc, bottom drag, and related

  • time_local :: [in] model time at end of time step

  • dt :: [in] time step [T ~> s]

  • forces :: [in] A structure with the driving mechanical forces

  • p_surf_begin :: surf pressure at the start of this dynamic time step [R L2 T-2 ~> Pa]

  • p_surf_end :: surf pressure at the end of this dynamic time step [R L2 T-2 ~> Pa]

  • uh :: [inout] zonal volume/mass transport

  • vh :: [inout] merid volume/mass transport

  • uhtr :: [inout] accumulatated zonal volume/mass transport

  • vhtr :: [inout] accumulatated merid volume/mass transport

  • eta_av :: [out] free surface height or column mass time averaged over time step [H ~> m or kg m-2]

  • cs :: module control structure

  • calc_dtbt :: [in] if true, recalculate barotropic time step

  • varmix :: specify the spatially varying viscosities

  • meke :: related to mesoscale eddy kinetic energy param

  • thickness_diffuse_csp :: Pointer to a structure containing interface height diffusivities

  • waves :: A pointer to a structure containing fields related to the surface wave conditions

Call to

mom_error_handler::calltree_enter mom_error_handler::calltree_leave mom_error_handler::calltree_waypoint mom_continuity::continuity_stencil mom_diag_mediator::diag_update_remap_grids id_clock_btcalc id_clock_btforce id_clock_btstep id_clock_continuity id_clock_cor id_clock_horvisc id_clock_mom_update id_clock_pass id_clock_pres id_clock_vertvisc mom_checksum_packages::mom_accel_chksum mom_open_boundary::open_boundary_test_extern_h mom_set_visc::set_viscous_ml mom_boundary_update::update_obc_data mom_open_boundary::update_obc_ramp mom_vert_friction::updatecfltruncationvalue

subroutine mom_dynamics_split_rk2/register_restarts_dyn_split_rk2(HI, GV, param_file, CS, restart_CS, uh, vh)

This subroutine sets up any auxiliary restart variables that are specific to the unsplit time stepping scheme. All variables registered here should have the ability to be recreated if they are not present in a restart file.

Parameters
  • hi :: [in] Horizontal index structure

  • gv :: [in] ocean vertical grid structure

  • param_file :: [in] parameter file

  • cs :: module control structure

  • restart_cs :: restart control structure

  • uh :: [inout] zonal volume/mass transport [H L2 T-1 ~> m3 s-1 or kg s-1]

  • vh :: [inout] merid volume/mass transport [H L2 T-1 ~> m3 s-1 or kg s-1]

Call to

mom_verticalgrid::get_flux_units mom_io::var_desc

subroutine mom_dynamics_split_rk2/initialize_dyn_split_rk2(u, v, h, uh, vh, eta, Time, G, GV, US, param_file, diag, CS, restart_CS, dt, Accel_diag, Cont_diag, MIS, VarMix, MEKE, thickness_diffuse_CSp, OBC, update_OBC_CSp, ALE_CSp, setVisc_CSp, visc, dirs, ntrunc, calc_dtbt, cont_stencil)

This subroutine initializes all of the variables that are used by this dynamic core, including diagnostics and the cpu clocks.

Parameters
  • g :: [inout] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • u :: [inout] zonal velocity [L T-1 ~> m s-1]

  • v :: [inout] merid velocity [L T-1 ~> m s-1]

  • h :: [inout] layer thickness [H ~> m or kg m-2]

  • uh :: [inout] zonal volume/mass transport [H L2 T-1 ~> m3 s-1 or kg s-1]

  • vh :: [inout] merid volume/mass transport [H L2 T-1 ~> m3 s-1 or kg s-1]

  • eta :: [inout] free surface height or column mass [H ~> m or kg m-2]

  • time :: [in] current model time

  • param_file :: [in] parameter file for parsing

  • diag :: [inout] to control diagnostics

  • cs :: module control structure

  • restart_cs :: restart control structure

  • dt :: [in] time step [T ~> s]

  • accel_diag :: [inout] points to momentum equation terms for budget analysis

  • cont_diag :: [inout] points to terms in continuity equation

  • mis :: [inout] “MOM6 internal state” used to pass diagnostic pointers

  • varmix :: points to spatially variable viscosities

  • meke :: points to mesoscale eddy kinetic energy fields

  • thickness_diffuse_csp :: Pointer to the control structure used for the isopycnal height diffusive transport.

  • obc :: points to OBC related fields

  • update_obc_csp :: points to OBC update related fields

  • ale_csp :: points to ALE control structure

  • setvisc_csp :: points to the set_visc control structure.

  • visc :: [inout] vertical viscosities, bottom drag, and related

  • dirs :: [in] contains directory paths

  • ntrunc :: [inout] A target for the variable that records the number of times the velocity is truncated (this should be 0).

  • calc_dtbt :: [out] If true, recalculate the barotropic time step

  • cont_stencil :: [out] The stencil for thickness from the continuity solver.

Call to

mom_continuity::continuity_stencil mom_coriolisadv::coriolisadv_init mom_verticalgrid::get_flux_units mom_hor_visc::hor_visc_init id_clock_btcalc id_clock_btforce id_clock_btstep id_clock_continuity id_clock_cor id_clock_horvisc id_clock_mom_update id_clock_pass id_clock_pass_init id_clock_pres id_clock_vertvisc mom_restart::is_new_run mom_pressureforce::pressureforce_init mom_tidal_forcing::tidal_forcing_init mom_open_boundary::update_obc_ramp mom_vert_friction::updatecfltruncationvalue

subroutine mom_dynamics_split_rk2/end_dyn_split_rk2(CS)

Close the dyn_split_RK2 module.

Parameters

cs :: module control structure

Call to

mom_barotropic::barotropic_end mom_coriolisadv::coriolisadv_end mom_hor_visc::hor_visc_end mom_pressureforce::pressureforce_end mom_tidal_forcing::tidal_forcing_end