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 in one layer. |
|
Reconstruct the scalar (e.g., pv, vorticity) onto point i-1/2 using a third-order upwind scheme. |
|
Reconstruct the scalar (e.g., PV, vorticity) onto point i-1/2 using a third-order upwind scheme with the Koren flux limiter. |
|
Compute the factor for the WENO weights. |
|
Reconstruct the tracer (e.g., PV, vorticity) onto the point i-1/2 using a third-order WENO scheme This reconstruction is thickness-weighted. |
|
Compute the smoothness indicator for the two-point stencil of the third-order WENO scheme. |
|
Reconstruction in the second upwind stencil of the third-order WENO scheme. |
|
Reconstruction in the first upwind stencil for third-order WENO scheme. |
|
Reconstruct the tracer (e.g., PV, vorticity) onto point i-1/2 using a fifth-order WENO scheme The reconstruction is weighted by the thickness. |
|
Compute the smoothness indicator for the third upwind stencil of the fifth-order WENO scheme. |
|
Compute the smoothness indicator for the second upwind stencil of the fifth-order WENO scheme. |
|
Compute the smoothness indicator for the first upwind stencil of the fifth-order WENO scheme. |
|
Reconstruction in the third upwind stencil of the fifth-order WENO scheme. |
|
Reconstruction in the second upwind stencil of the fifth-order WENO scheme. |
|
Reconstruction in the first upwind stencil of the fifth-order WENO scheme. |
|
Reconstruct the tracer (e.g., PV, vorticity) onto point i-1/2 using a seventh-order WENO scheme This reconstruction computes a thickness weighted average of PV. |
|
Compute the smoothness indicator for the fourth upwind stencil of the seventh-order WENO scheme. |
|
Compute the smoothness indicator for the third upwind stencil of the seventh-order WENO scheme. |
|
Compute the smoothness indicator for the second upwind stencil of the seventh-order WENO scheme. |
|
Compute smoothness indicator for the first upwind stencil of the seventh-order WENO scheme. |
|
Reconstruction in the fourth upwind stencil for seventh-order WENO scheme. |
|
Reconstruction in the third upwind stencil for seventh-order WENO scheme. |
|
Reconstruction in the second upwind stencil for seventh-order WENO scheme. |
|
Reconstruction in the first upwind stencil for seventh-order WENO scheme. |
|
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 ::
integerDiagnostic IDs.% id_pv ::
integerDiagnostic IDs.% id_gkeu ::
integerDiagnostic IDs.% id_gkev ::
integerDiagnostic IDs.% id_rvxu ::
integerDiagnostic IDs.% id_rvxv ::
integerDiagnostic IDs.% id_hf_gkeu_2d ::
integerDiagnostic IDs.% id_hf_gkev_2d ::
integerDiagnostic IDs.% id_intz_gkeu_2d ::
integerDiagnostic IDs.% id_intz_gkev_2d ::
integerDiagnostic IDs.% id_hf_rvxu_2d ::
integerDiagnostic IDs.% id_hf_rvxv_2d ::
integerDiagnostic IDs.% id_h_gkeu ::
integerDiagnostic IDs.% id_h_gkev ::
integerDiagnostic IDs.% id_h_rvxu ::
integerDiagnostic IDs.% id_h_rvxv ::
integerDiagnostic IDs.% id_intz_rvxu_2d ::
integerDiagnostic IDs.% id_intz_rvxv_2d ::
integerDiagnostic IDs.% id_caus ::
integerDiagnostic IDs.% id_cavs ::
integerDiagnostic IDs.% initialized ::
logicalTrue if this control structure has been initialized.% coriolis_scheme ::
integerSelects the discretization for the Coriolis terms. Valid values are:% ke_scheme ::
integerKE_SCHEME selects the discretization for the kinetic energy. Valid values are: KE_ARAKAWA, KE_SIMPLE_GUDONOV, KE_GUDONOV.% ke_use_limiter ::
logicalIf true, use the Koren limiter for KE_UP3 scheme.% pv_adv_scheme ::
integerPV_ADV_SCHEME selects the discretization for PV advection Valid values are:% f_eff_max_blend ::
realThe 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 ::
realA 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 ::
logicalIf 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 ::
logicalIf 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 ::
logicalIf 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.% weno_velocity_smooth ::
logicalIf true, use velocity to compute the smoothness indicator for WENO.% time ::
type(time_type), pointerA pointer to the ocean model’s clock.% diag ::
type(diag_ctrl), pointerA 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 ::
u[in] Zonal velocity [L T-1 ~> m s-1]v ::
v[in] Meridional velocity [L T-1 ~> m s-1]h ::
h[in] Layer thickness [H ~> m or kg m-2]uh ::
uh[in] Zonal transport u*h*dy [H L2 T-1 ~> m3 s-1 or kg s-1]vh ::
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 ::
pbv[in] porous barrier fractional cell metricswaves :: An optional pointer to Stokes drift CS
- Call to:
al_blendarakawa_hsu90arakawa_lamb81coriolisadv_stencilgradkemom_error_handler::mom_errormom_open_boundary::obc_vorticity_computedmom_open_boundary::obc_vorticity_specifiedpv_adv_centeredpv_adv_upwind1robust_enstrosadourny75_energysadourny75_enstroweno_five_h_weight_reconstructionweno_seven_h_weight_reconstructionweno_three_h_weight_reconstructionwenovi3rd_pv_enstrowenovi5th_pv_enstrowenovi7th_pv_enstro- Called from:
mom_dynamics_unsplit::step_mom_dyn_unsplitmom_dynamics_unsplit_rk2::step_mom_dyn_unsplit_rk2
- subroutine mom_coriolisadv/gradke(u, v, h, KE, KEx, KEy, G, GV, US, CS)
Calculates the acceleration due to the gradient of kinetic energy in one layer.
- Parameters:
g :: [in] Ocean grid structure
gv :: [in] Vertical grid structure
u ::
u[in] Zonal velocity [L T-1 ~> m s-1]v ::
v[in] Meridional velocity [L T-1 ~> m s-1]h ::
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]
us :: [in] A dimensional unit scaling type
cs :: [in] Control structure for MOM_CoriolisAdv
- Call to:
ke_arakawake_gudonovke_simple_gudonovke_up3up3_koren_limiter_reconstructionup3_reconstruction- Called from:
- subroutine mom_coriolisadv/up3_reconstruction(q4, u, qr)
Reconstruct the scalar (e.g., pv, vorticity) onto point i-1/2 using a third-order upwind scheme.
- Parameters:
q4 ::
q4[in] Tracer values on points i-2, i-1, i, i+1 [A ~> a]u ::
u[in] Velocity or thickness flux on point i-1/2 [l t-1 ~> m s-1] or [l2 t-1 ~> m2 s-1]qr ::
qr[inout] Reconstruction of tracer q at point i-1/2 [A ~> a]
- Called from:
- subroutine mom_coriolisadv/up3_koren_limiter_reconstruction(q4, u, qr)
Reconstruct the scalar (e.g., PV, vorticity) onto point i-1/2 using a third-order upwind scheme with the Koren flux limiter.
- Parameters:
q4 ::
q4[in] Tracer values on points i-2, i-1, i, i+1 [A ~> a]u ::
u[in] Velocity or thickness flux on point i-1/2 [L T-1 ~> m s-1] or [L2 T-1 ~> m2 s-1]qr ::
qr[inout] Reconstruction of tracer q on point i-1/2 [A ~> a]
- Called from:
- function mom_coriolisadv/fac_fn(tau, b)
Compute the factor for the WENO weights.
- Parameters:
tau ::
tau[in] Difference of the smoothness indicator [A ~> a]b ::
b[in] The smoothness indicator [A ~> a]
- Return:
undefined :: The factor for the weight [nondim]
- Called from:
weno_five_h_weight_reconstructionweno_seven_h_weight_reconstructionweno_three_h_weight_reconstruction
- subroutine mom_coriolisadv/weno_three_h_weight_reconstruction(q4, h4, u4, h_tiny, u, qr, velocity_smoothing)
Reconstruct the tracer (e.g., PV, vorticity) onto the point i-1/2 using a third-order WENO scheme This reconstruction is thickness-weighted.
- Parameters:
q4 ::
q4[in] Tracer value times thickness on points i-2, i-1, i, i+1 [A ~> a]h4 ::
h4[in] Thickness values on points i-2, i-1, i, i+1 [L ~> m]u4 ::
u4[in] Velocity values on points i-2, i-1, i, i+1 [L T-1 ~> m s-1]h_tiny ::
h_tiny[in] A tiny thickness to prevent division by zero [L ~> m]u ::
u[in] Velocity or thickness flux on point i-1/2 [L T-1 ~> m s-1] or [L2 T-1 ~> m2 s-1]qr ::
qr[inout] Reconstruction of tracer q on point i-1/2 [A ~> a]velocity_smoothing ::
velocity_smoothing[in] If true, use velocity to compute smoothness indicator
- Call to:
fac_fnweno_three_reconstruction_0weno_three_reconstruction_1weno_three_weight- Called from:
- subroutine mom_coriolisadv/weno_three_weight(q2, w0)
Compute the smoothness indicator for the two-point stencil of the third-order WENO scheme.
- Parameters:
q2 ::
q2[in] Tracer values on the two-point stencil [A ~> a]w0 ::
w0[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_three_reconstruction_0(q2, w0)
Reconstruction in the second upwind stencil of the third-order WENO scheme.
- Parameters:
q2 ::
q2[in] Tracer values on the two-point stencil [A ~> a]w0 ::
w0[inout] Reconstruction of the quantity [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_three_reconstruction_1(q2, w0)
Reconstruction in the first upwind stencil for third-order WENO scheme.
- Parameters:
q2 ::
q2[in] Tracer values on the two-point stencil [A ~> a]w0 ::
w0[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- subroutine mom_coriolisadv/weno_five_h_weight_reconstruction(q6, h6, u6, h_tiny, u, qr, velocity_smoothing)
Reconstruct the tracer (e.g., PV, vorticity) onto point i-1/2 using a fifth-order WENO scheme The reconstruction is weighted by the thickness.
- Parameters:
q6 ::
q6[in] Tracer values on points i-3, i-2, i-1, i, i+1, i+2 [A ~> a]h6 ::
h6[in] Thickness values on points i-3, i-2, i-1, i, i+1, i+2 [L ~> m]u6 ::
u6[in] Velocity values on points i-3, i-2, i-1, i, i+1, i+2 [L T-1 ~> m s-1]h_tiny ::
h_tiny[in] A tiny thickness to prevent division by zero [L ~> m]u ::
u[in] Velocity or thickness flux on point i-1/2 [L T-1 ~> m s-1] or [L2 T-1 ~> m2 s-1]velocity_smoothing ::
velocity_smoothing[in] If ture, use velocity to compute the smoothness indicatorqr ::
qr[inout] Reconstruction of tracer q on point i-1/2 [A ~> a]
- Call to:
fac_fnweno_five_reconstruction_0weno_five_reconstruction_1weno_five_reconstruction_2weno_five_weight_0weno_five_weight_1weno_five_weight_2- Called from:
- subroutine mom_coriolisadv/weno_five_weight_0(q3, w0)
Compute the smoothness indicator for the third upwind stencil of the fifth-order WENO scheme.
- Parameters:
q3 ::
q3[in] Tracer values on the three-point stencil [A ~> a]w0 ::
w0[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_five_weight_1(q3, w1)
Compute the smoothness indicator for the second upwind stencil of the fifth-order WENO scheme.
- Parameters:
q3 ::
q3[in] Tracer values on the three-point stencil [A ~> a]w1 ::
w1[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_five_weight_2(q3, w2)
Compute the smoothness indicator for the first upwind stencil of the fifth-order WENO scheme.
- Parameters:
q3 ::
q3[in] Tracer values on the three-point stencil [A ~> a]w2 ::
w2[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_five_reconstruction_0(q3, p0)
Reconstruction in the third upwind stencil of the fifth-order WENO scheme.
- Parameters:
q3 ::
q3[in] Tracer values on three points [A ~> a]p0 ::
p0[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- subroutine mom_coriolisadv/weno_five_reconstruction_1(q3, p1)
Reconstruction in the second upwind stencil of the fifth-order WENO scheme.
- Parameters:
q3 ::
q3[in] Tracer values on the three-point stencil [A ~> a]p1 ::
p1[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- subroutine mom_coriolisadv/weno_five_reconstruction_2(q3, p2)
Reconstruction in the first upwind stencil of the fifth-order WENO scheme.
- Parameters:
q3 ::
q3[in] Tracer values on the three-point stencil [A ~> a]p2 ::
p2[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- subroutine mom_coriolisadv/weno_seven_h_weight_reconstruction(q8, h8, u8, h_tiny, u, qr, velocity_smoothing)
Reconstruct the tracer (e.g., PV, vorticity) onto point i-1/2 using a seventh-order WENO scheme This reconstruction computes a thickness weighted average of PV.
- Parameters:
q8 ::
q8[in] Tracer values on points i-4, i-3, i-2, i-1, i, i+1, i+2, i+3h8 ::
h8[in] Thickness on the same tracer points i-4, i-3, i-2, i-1, i, i+1, i+2, i+3 [L ~> m]u8 ::
u8[in] Velocity values on points i-4, i-3, i-2, i-1, i, i+1, i+2, i+3 [L T-1 ~> m s-1]h_tiny ::
h_tiny[in] A tiny thickness to prevent division by zero [L ~> m]u ::
u[in] Velocity or thickness flux on point i-1/2 [L T-1 ~> m s-1] or [L2 T-1 ~> m2 s-1]velocity_smoothing ::
velocity_smoothing[in] If true, use velocity to compute the smoothness indicatorqr ::
qr[inout] Reconstruction of tracer q on point i-1/2 [A ~> a]
- Call to:
fac_fnweno_seven_reconstruction_0weno_seven_reconstruction_1weno_seven_reconstruction_2weno_seven_reconstruction_3weno_seven_weight_0weno_seven_weight_1weno_seven_weight_2weno_seven_weight_3- Called from:
- subroutine mom_coriolisadv/weno_seven_weight_0(q4, w0)
Compute the smoothness indicator for the fourth upwind stencil of the seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]w0 ::
w0[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_seven_weight_1(q4, w1)
Compute the smoothness indicator for the third upwind stencil of the seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]w1 ::
w1[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_seven_weight_2(q4, w2)
Compute the smoothness indicator for the second upwind stencil of the seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]w2 ::
w2[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_seven_weight_3(q4, w3)
Compute smoothness indicator for the first upwind stencil of the seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]w3 ::
w3[inout] Smoothness indicator for this stencil [A2 ~> a2]
- Called from:
- subroutine mom_coriolisadv/weno_seven_reconstruction_0(q4, p0)
Reconstruction in the fourth upwind stencil for seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]p0 ::
p0[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- subroutine mom_coriolisadv/weno_seven_reconstruction_1(q4, p1)
Reconstruction in the third upwind stencil for seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]p1 ::
p1[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- subroutine mom_coriolisadv/weno_seven_reconstruction_2(q4, p2)
Reconstruction in the second upwind stencil for seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]p2 ::
p2[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- subroutine mom_coriolisadv/weno_seven_reconstruction_3(q4, p3)
Reconstruction in the first upwind stencil for seventh-order WENO scheme.
- Parameters:
q4 ::
q4[in] Tracer values on the four-point stencil [A ~> a]p3 ::
p3[inout] Reconstruction of the quantity [A ~> a]
- Called from:
- function mom_coriolisadv/coriolisadv_stencil(CS)
- Parameters:
cs :: [in] Control structure for MOM_CoriolisAdv
- Return:
undefined :: The halo stencil size for the Coriolis advection scheme
- Call to:
wenovi5th_pv_enstrowenovi7th_pv_enstro- Called from:
coradcalcmom_dynamics_split_rk2::initialize_dyn_split_rk2mom_dynamics_split_rk2b::initialize_dyn_split_rk2bmom_dynamics_unsplit::initialize_dyn_unsplitmom_dynamics_unsplit_rk2::initialize_dyn_unsplit_rk2mom_dynamics_split_rk2::step_mom_dyn_split_rk2mom_dynamics_split_rk2b::step_mom_dyn_split_rk2bmom_dynamics_unsplit::step_mom_dyn_unsplitmom_dynamics_unsplit_rk2::step_mom_dyn_unsplit_rk2
- 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 ::
param_file[in] Runtime parameter handlesdiag ::
diag[inout] Diagnostics control structuread :: [inout] Storage for acceleration diagnostics
cs :: [inout] Control structure for MOM_CoriolisAdv
- Call to:
al_blendal_blend_stringarakawa_hsu90arakawa_hsu_stringarakawa_lamb81arakawa_lamb_stringke_arakawake_arakawa_stringke_gudonovke_gudonov_stringke_simple_gudonovke_simple_gudonov_stringke_up3ke_up3_stringmom_error_handler::mom_errormom_error_handler::mom_mesgpv_adv_centeredpv_adv_centered_stringpv_adv_upwind1pv_adv_upwind1_stringmom_diag_mediator::register_diag_fieldrobust_enstrorobust_enstro_stringsadourny75_energysadourny75_energy_stringsadourny75_enstrosadourny75_enstro_stringmom_string_functions::uppercasewenovi3rd_pv_enstrowenovi3rd_pv_enstro_stringwenovi5th_pv_enstrowenovi5th_pv_enstro_stringwenovi7th_pv_enstrowenovi7th_pv_enstro_string- Called from:
mom_dynamics_split_rk2::initialize_dyn_split_rk2mom_dynamics_split_rk2b::initialize_dyn_split_rk2bmom_dynamics_unsplit::initialize_dyn_unsplitmom_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_rk2mom_dynamics_split_rk2b::end_dyn_split_rk2b