mom_tidal_forcing module reference

Tidal contributions to geopotential.

More…

Data Types

astro_longitudes

Simple type to store astronomical longitudes used to calculate tidal phases.

tidal_forcing_cs

The control structure for the MOM_tidal_forcing module.

Functions/Subroutines

astro_longitudes_init()

Finds astronomical longitudes s, h, p, and N, the mean longitude of the moon, sun, lunar perigee, and ascending node, respectively, at the specified reference time time_ref.

eq_phase()

Calculates the equilibrium phase argument for the given tidal constituent constit and the astronomical longitudes and the reference time.

tidal_frequency()

Looks up angular frequencies for the main tidal constituents.

nodal_fu()

Find amplitude (f) and phase (u) modulation of tidal constituents by the 18.6 year nodal cycle.

tidal_forcing_init()

This subroutine allocates space for the static variables used by this module.

find_in_files()

This subroutine finds a named variable in a list of files and reads its values into a domain-decomposed 2-d array.

tidal_forcing_sensitivity()

This subroutine calculates returns the partial derivative of the local geopotential height with the input sea surface height due to self-attraction and loading.

calc_tidal_forcing()

This subroutine calculates the geopotential anomalies that drive the tides, including self-attraction and loading.

tidal_forcing_end()

This subroutine deallocates memory associated with the tidal forcing module.

Detailed Description

Tidal contributions to geopotential.

Type Documentation

type mom_tidal_forcing/astro_longitudes

Simple type to store astronomical longitudes used to calculate tidal phases.

Type fields
  • % s [real] :: Mean longitude of moon [rad].

  • % h [real] :: Mean longitude of sun [rad].

  • % p [real] :: Mean longitude of lunar perigee [rad].

  • % n [real] :: Longitude of ascending node [rad].

type mom_tidal_forcing/tidal_forcing_cs

The control structure for the MOM_tidal_forcing module.

Type fields
  • % use_sal_scalar [logical] :: If true, use the scalar approximation when calculating self-attraction and loading.

  • % tidal_sal_from_file [logical] :: If true, Read the tidal self-attraction and loading from input files, specified by TIDAL_INPUT_FILE.

  • % use_prev_tides [logical] :: If true, use the SAL from the previous iteration of the tides to facilitate convergence.

  • % use_eq_phase [logical] :: If true, tidal forcing is phase-shifted to match equilibrium tide. Set to false if providing tidal phases that have already been shifted by the astronomical/equilibrium argument.

  • % sal_scalar [real] :: The constant of proportionality between sea surface height (really it should be bottom pressure) anomalies and bottom geopotential anomalies.

  • % nc [integer] :: The number of tidal constituents in use.

  • % freq [real( max_constituents )] :: The frequency of a tidal constituent [s-1].

  • % phase0 [real( max_constituents )] :: The phase of a tidal constituent at time 0, in radians.

  • % amp [real( max_constituents )] :: The amplitude of a tidal constituent at time 0 [m].

  • % love_no [real( max_constituents )] :: The Love number of a tidal constituent at time 0 [nondim].

  • % struct [integer( max_constituents )] :: An encoded spatial structure for each constituent.

  • % const_name [character (len=16)( max_constituents )] :: The name of each constituent.

  • % time_ref [type(time_type)] :: Reference time (t = 0) used to calculate tidal forcing.

  • % tidal_longitudes [type( astro_longitudes )] :: Astronomical longitudes used to calculate tidal phases at t = 0.

  • % sin_struct [real(:,:,:),pointer] :: The sine and cosine based structures that can.

  • % cos_struct [real(:,:,:),pointer] :: be associated with the astronomical forcing.

  • % cosphasesal [real(:,:,:),pointer] :: The cosine and sine of the phase of the.

  • % sinphasesal [real(:,:,:),pointer] :: self-attraction and loading amphidromes.

  • % ampsal [real(:,:,:),pointer] :: The amplitude of the SAL [m].

  • % cosphase_prev [real(:,:,:),pointer] :: The cosine and sine of the phase of the.

  • % sinphase_prev [real(:,:,:),pointer] :: amphidromes in the previous tidal solutions.

  • % amp_prev [real(:,:,:),pointer] :: The amplitude of the previous tidal solution [m].

Function/Subroutine Documentation

subroutine mom_tidal_forcing/astro_longitudes_init(time_ref, longitudes)

Finds astronomical longitudes s, h, p, and N, the mean longitude of the moon, sun, lunar perigee, and ascending node, respectively, at the specified reference time time_ref. These formulas were obtained from Kowalik and Luick, “Modern Theory and Practice of Tide Analysis and Tidal Power”, 2019 (their Equation I.71), which are based on Schureman, 1958. For simplicity, the time associated with time_ref should be at midnight. These formulas also only make sense if the calendar is gregorian.

Called from

mom_open_boundary::initialize_obc_tides tidal_forcing_init

function mom_tidal_forcing/eq_phase(constit, longitudes) [real]

Calculates the equilibrium phase argument for the given tidal constituent constit and the astronomical longitudes and the reference time. These formulas follow Table I.4 of Kowalik and Luick, “Modern Theory and Practice of Tide Analysis and Tidal Power”, 2019.

Call to

mom_error_handler::mom_error

Called from

mom_open_boundary::initialize_obc_tides tidal_forcing_init

function mom_tidal_forcing/tidal_frequency(constit) [real]

Looks up angular frequencies for the main tidal constituents. Values used here are from previous versions of MOM.

Call to

mom_error_handler::mom_error

Called from

mom_open_boundary::initialize_obc_tides tidal_forcing_init

subroutine mom_tidal_forcing/nodal_fu(constit, N, fn, un)

Find amplitude (f) and phase (u) modulation of tidal constituents by the 18.6 year nodal cycle. Values here follow Table I.6 in Kowalik and Luick, “Modern Theory and Practice of Tide Analysis and Tidal Power”, 2019.

Call to

mom_error_handler::mom_error

Called from

mom_open_boundary::initialize_obc_tides

subroutine mom_tidal_forcing/tidal_forcing_init(Time, G, param_file, CS)

This subroutine allocates space for the static variables used by this module. The metrics may be effectively 0, 1, or 2-D arrays, while fields like the background viscosities are 2-D arrays. ALLOC is a macro defined in MOM_memory.h for allocate or nothing with static memory.

Parameters
  • time :: [in] The current model time.

  • g :: [inout] The ocean’s grid structure.

  • param_file :: [in] A structure to parse for run-time parameters.

  • cs :: A pointer that is set to point to the control structure for this module.

Call to

astro_longitudes_init eq_phase find_in_files id_clock_tides max_constituents mom_error_handler::mom_error mom_error_handler::mom_mesg tidal_frequency

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_tidal_forcing/find_in_files(filenames, varname, array, G)

This subroutine finds a named variable in a list of files and reads its values into a domain-decomposed 2-d array.

Parameters
  • filenames :: [in] The names of the files to search for the named variable

  • varname :: [in] The name of the variable to read

  • g :: [in] The ocean’s grid structure

  • array :: [out] The array to fill with the data

Call to

mom_error_handler::mom_error

Called from

tidal_forcing_init

subroutine mom_tidal_forcing/tidal_forcing_sensitivity(G, CS, deta_tidal_deta)

This subroutine calculates returns the partial derivative of the local geopotential height with the input sea surface height due to self-attraction and loading.

Parameters
  • g :: [in] The ocean’s grid structure.

  • cs :: The control structure returned by a previous call to tidal_forcing_init.

  • deta_tidal_deta :: [out] The partial derivative of eta_tidal with the local value of eta [nondim].

Called from

mom_barotropic::barotropic_init mom_barotropic::btstep mom_barotropic::set_dtbt

subroutine mom_tidal_forcing/calc_tidal_forcing(Time, eta, eta_tidal, G, CS, m_to_Z)

This subroutine calculates the geopotential anomalies that drive the tides, including self-attraction and loading. Optionally, it also returns the partial derivative of the local geopotential height with the input sea surface height. For now, eta and eta_tidal are both geopotential heights in depth units, but probably the input for eta should really be replaced with the column mass anomalies.

Parameters
  • g :: [in] The ocean’s grid structure.

  • time :: [in] The time for the caluculation.

  • eta :: [in] The sea surface height anomaly from a time-mean geoid [Z ~> m].

  • eta_tidal :: [out] The tidal forcing geopotential height anomalies [Z ~> m].

  • cs :: The control structure returned by a previous call to tidal_forcing_init.

  • m_to_z :: [in] A scaling factor from m to the units of eta.

Call to

id_clock_tides

Called from

mom_pressureforce_fv::pressureforce_fv_bouss mom_pressureforce_fv::pressureforce_fv_nonbouss mom_pressureforce_mont::pressureforce_mont_bouss mom_pressureforce_mont::pressureforce_mont_nonbouss

subroutine mom_tidal_forcing/tidal_forcing_end(CS)

This subroutine deallocates memory associated with the tidal forcing module.

Parameters

cs :: [inout] The control structure returned by a previous call to tidal_forcing_init; it is deallocated here.

Called from

mom_dynamics_split_rk2::end_dyn_split_rk2