mom_dynamics_split_rk2 module reference¶
Time step the adiabatic dynamic core of MOM using RK2 method.
Data Types¶
MOM_dynamics_split_RK2 module control structure. |
Functions/Subroutines¶
RK2 splitting for time stepping MOM adiabatic dynamics. |
|
This subroutine sets up any auxiliary restart variables that are specific to the unsplit time stepping scheme. |
|
This subroutine initializes all of the variables that are used by this dynamic core, including diagnostics and the cpu clocks. |
|
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_hf_pfu_2d
[integer] :: Diagnostic IDs.%
id_hf_pfv_2d
[integer] :: Diagnostic IDs.%
id_hf_cau_2d
[integer] :: Diagnostic IDs.%
id_hf_cav_2d
[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_hf_u_bt_accel_2d
[integer] :: Diagnostic IDs.%
id_hf_v_bt_accel_2d
[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_domains::complete_group_pass
mom_continuity::continuity_stencil
mom_coriolisadv::coradcalc
mom_diag_mediator::diag_update_remap_grids
mom_hor_visc::horizontal_viscosity
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_pressureforce::pressureforce
mom_barotropic::set_dtbt
mom_set_visc::set_viscous_ml
mom_domains::start_group_pass
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]
-
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
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
-
subroutine
mom_dynamics_split_rk2/
end_dyn_split_rk2
(CS)¶ Close the dyn_split_RK2 module.
- Parameters
cs :: module control structure