mom_coriolisadv module reference¶
Accelerations due to the Coriolis force and momentum advection.
Data Types¶
Control structure for |
Functions/Subroutines¶
Calculates the Coriolis and momentum advection contributions to the acceleration. |
|
Calculates the acceleration due to the gradient of kinetic energy. |
|
Initializes the control structure for MOM_CoriolisAdv. |
|
Destructor for |
Detailed Description¶
This file contains the subroutine that calculates the time derivatives of the velocities due to Coriolis acceleration and momentum advection. This subroutine uses either a vorticity advection scheme from Arakawa and Hsu, Mon. Wea. Rev. 1990, or Sadourny’s (JAS 1975) energy conserving scheme. Both have been modified to use general orthogonal coordinates as described in Arakawa and Lamb, Mon. Wea. Rev. 1981. Both schemes are second order accurate, and allow for vanishingly small layer thicknesses. The Arakawa and Hsu scheme globally conserves both total energy and potential enstrophy in the limit of nondivergent flow. Sadourny’s energy conserving scheme conserves energy if the flow is nondivergent or centered difference thickness fluxes are used.
A small fragment of the grid is shown below:
j+1 x ^ x ^ x At x: q, CoriolisBu
j+1 > o > o > At ^: v, CAv, vh
j x ^ x ^ x At >: u, CAu, uh, a, b, c, d
j > o > o > At o: h, KE
j-1 x ^ x ^ x
i-1 i i+1 At x & ^:
i i+1 At > & o:
The boundaries always run through q grid points (x).
Type Documentation¶
-
type
mom_coriolisadv/
coriolisadv_cs
¶ Control structure for
mom_coriolisadv()
. .- Type fields:
%
id_rv
[integer] :: Diagnostic IDs.%
id_pv
[integer] :: Diagnostic IDs.%
id_gkeu
[integer] :: Diagnostic IDs.%
id_gkev
[integer] :: Diagnostic IDs.%
id_rvxu
[integer] :: Diagnostic IDs.%
id_rvxv
[integer] :: Diagnostic IDs.%
id_hf_gkeu_2d
[integer] :: Diagnostic IDs.%
id_hf_gkev_2d
[integer] :: Diagnostic IDs.%
id_intz_gkeu_2d
[integer] :: Diagnostic IDs.%
id_intz_gkev_2d
[integer] :: Diagnostic IDs.%
id_hf_rvxu_2d
[integer] :: Diagnostic IDs.%
id_hf_rvxv_2d
[integer] :: Diagnostic IDs.%
id_h_gkeu
[integer] :: Diagnostic IDs.%
id_h_gkev
[integer] :: Diagnostic IDs.%
id_h_rvxu
[integer] :: Diagnostic IDs.%
id_h_rvxv
[integer] :: Diagnostic IDs.%
id_intz_rvxu_2d
[integer] :: Diagnostic IDs.%
id_intz_rvxv_2d
[integer] :: Diagnostic IDs.%
id_caus
[integer] :: Diagnostic IDs.%
id_cavs
[integer] :: Diagnostic IDs.%
initialized
[logical] :: True if this control structure has been initialized.%
coriolis_scheme
[integer] :: Selects the discretization for the Coriolis terms. Valid values are:%
ke_scheme
[integer] :: KE_SCHEME selects the discretization for the kinetic energy. Valid values are: KE_ARAKAWA, KE_SIMPLE_GUDONOV, KE_GUDONOV.%
pv_adv_scheme
[integer] :: PV_ADV_SCHEME selects the discretization for PV advection Valid values are:%
f_eff_max_blend
[real] :: The factor by which the maximum effective Coriolis acceleration from any point can be increased when blending different discretizations with the ARAKAWA_LAMB_BLEND Coriolis scheme [nondim]. This must be greater than 2.0, and is 4.0 by default.%
wt_lin_blend
[real] :: A weighting value beyond which the blending between Sadourny and Arakawa & Hsu goes linearly to 0 [nondim]. This must be between 1 and 1e-15, often 1/8.%
no_slip
[logical] :: If true, no slip boundary conditions are used. Otherwise free slip boundary conditions are assumed. The implementation of the free slip boundary conditions on a C-grid is much cleaner than the no slip boundary conditions. The use of free slip b.c.s is strongly encouraged. The no slip b.c.s are not implemented with the biharmonic viscosity.%
bound_coriolis
[logical] :: If true, the Coriolis terms at u points are bounded by the four estimates of (f+rv)v from the four neighboring v points, and similarly at v points. This option would have no effect on the SADOURNY75_ENERGY scheme if it were possible to use centered difference thickness fluxes.%
coriolis_en_dis
[logical] :: If CORIOLIS_EN_DIS is defined, two estimates of the thickness fluxes are used to estimate the Coriolis term, and the one that dissipates energy relative to the other one is used. This is only available at present if Coriolis scheme is SADOURNY75_ENERGY.%
time
[type(time_type),pointer] :: A pointer to the ocean model’s clock.%
diag
[type( diag_ctrl ),pointer] :: A structure that is used to regulate the timing of diagnostic output.
Function/Subroutine Documentation¶
-
subroutine
mom_coriolisadv/
coradcalc
(u, v, h, uh, vh, CAu, CAv, OBC, AD, G, GV, US, CS, pbv, Waves)¶ Calculates the Coriolis and momentum advection contributions to the acceleration.
- Parameters:
g :: [in] Ocean grid structure
gv :: [in] Vertical grid structure
u :: [in] Zonal velocity [L T-1 ~> m s-1]
v :: [in] Meridional velocity [L T-1 ~> m s-1]
h :: [in] Layer thickness [H ~> m or kg m-2]
uh :: [in] Zonal transport u*h*dy [H L2 T-1 ~> m3 s-1 or kg s-1]
vh :: [in] Meridional transport v*h*dx [H L2 T-1 ~> m3 s-1 or kg s-1]
cau :: [out] Zonal acceleration due to Coriolis and momentum advection [L T-2 ~> m s-2].
cav :: [out] Meridional acceleration due to Coriolis and momentum advection [L T-2 ~> m s-2].
obc :: Open boundary control structure
ad :: [inout] Storage for acceleration diagnostics
us :: [in] A dimensional unit scaling type
cs :: [in] Control structure for MOM_CoriolisAdv
pbv :: [in] porous barrier fractional cell metrics
waves :: An optional pointer to Stokes drift CS
- Call to:
al_blend
arakawa_hsu90
arakawa_lamb81
gradke
mom_error_handler::mom_error
mom_open_boundary::obc_direction_n
pv_adv_centered
pv_adv_upwind1
robust_enstro
sadourny75_energy
sadourny75_enstro
- Called from:
mom_dynamics_unsplit::step_mom_dyn_unsplit
mom_dynamics_unsplit_rk2::step_mom_dyn_unsplit_rk2
-
subroutine
mom_coriolisadv/
gradke
(u, v, h, KE, KEx, KEy, k, OBC, G, GV, US, CS)¶ Calculates the acceleration due to the gradient of kinetic energy.
- Parameters:
g :: [in] Ocean grid structure
gv :: [in] Vertical grid structure
u :: [in] Zonal velocity [L T-1 ~> m s-1]
v :: [in] Meridional velocity [L T-1 ~> m s-1]
h :: [in] Layer thickness [H ~> m or kg m-2]
ke :: [out] Kinetic energy per unit mass [L2 T-2 ~> m2 s-2]
kex :: [out] Zonal acceleration due to kinetic energy gradient [L T-2 ~> m s-2]
key :: [out] Meridional acceleration due to kinetic energy gradient [L T-2 ~> m s-2]
k :: [in] Layer number to calculate for
obc :: Open boundary control structure
us :: [in] A dimensional unit scaling type
cs :: [in] Control structure for MOM_CoriolisAdv
- Call to:
ke_arakawa
ke_gudonov
ke_simple_gudonov
- Called from:
-
subroutine
mom_coriolisadv/
coriolisadv_init
(Time, G, GV, US, param_file, diag, AD, CS)¶ Initializes the control structure for MOM_CoriolisAdv.
- Parameters:
time :: [in] Current model time
g :: [in] Ocean grid structure
gv :: [in] Vertical grid structure
us :: [in] A dimensional unit scaling type
param_file :: [in] Runtime parameter handles
diag :: [inout] Diagnostics control structure
ad :: [inout] Storage for acceleration diagnostics
cs :: [inout] Control structure for MOM_CoriolisAdv
- Call to:
al_blend
al_blend_string
arakawa_hsu90
arakawa_hsu_string
arakawa_lamb81
arakawa_lamb_string
ke_arakawa
ke_arakawa_string
ke_gudonov
ke_gudonov_string
ke_simple_gudonov
ke_simple_gudonov_string
mom_error_handler::mom_error
mom_error_handler::mom_mesg
pv_adv_centered
pv_adv_centered_string
pv_adv_upwind1
pv_adv_upwind1_string
mom_diag_mediator::register_diag_field
robust_enstro
robust_enstro_string
sadourny75_energy
sadourny75_energy_string
sadourny75_enstro
sadourny75_enstro_string
mom_string_functions::uppercase
- Called from:
mom_dynamics_split_rk2::initialize_dyn_split_rk2
mom_dynamics_split_rk2b::initialize_dyn_split_rk2b
mom_dynamics_unsplit::initialize_dyn_unsplit
mom_dynamics_unsplit_rk2::initialize_dyn_unsplit_rk2
-
subroutine
mom_coriolisadv/
coriolisadv_end
(CS)¶ Destructor for
coriolisadv_cs()
. .- Parameters:
cs :: [inout] Control structure for MOM_CoriolisAdv
- Called from:
mom_dynamics_split_rk2::end_dyn_split_rk2
mom_dynamics_split_rk2b::end_dyn_split_rk2b