mom_coriolisadv module reference

Accelerations due to the Coriolis force and momentum advection.

More…

Data Types

coriolisadv_cs

Control structure for mom_coriolisadv().

Functions/Subroutines

coradcalc()

Calculates the Coriolis and momentum advection contributions to the acceleration.

gradke()

Calculates the acceleration due to the gradient of kinetic energy.

coriolisadv_init()

Initializes the control structure for coriolisadv_cs().

coriolisadv_end()

Destructor for coriolisadv_cs().

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.

  • % 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_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] 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]

  • 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

coradcalc

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

Called from

mom_dynamics_split_rk2::initialize_dyn_split_rk2 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 fro MOM_CoriolisAdv

Called from

mom_dynamics_split_rk2::end_dyn_split_rk2