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 |
|
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_hf_rvxu_2d
[integer] :: Diagnostic IDs.%
id_hf_rvxv_2d
[integer] :: Diagnostic IDs.%
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. 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. 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)¶ Calculates the Coriolis and momentum advection contributions to the acceleration.
- Parameters
g :: [in] Ocen 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 :: Control structure for MOM_CoriolisAdv
- 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_split_rk2::step_mom_dyn_split_rk2
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, US, CS)¶ Calculates the acceleration due to the gradient of kinetic energy.
- Parameters
g :: [in] Ocen 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 :: 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
coriolisadv_cs()
. .- 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] Strorage for acceleration diagnostics
cs :: Control structure fro 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
-
subroutine
mom_coriolisadv/
coriolisadv_end
(CS)¶ Destructor for
coriolisadv_cs()
. .- Parameters
cs :: Control structure fro MOM_CoriolisAdv