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.

calc_love_scaling()

This subroutine calculates coefficients of the spherical harmonic modes for self-attraction and loading.

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.

calc_sal_sht()

This subroutine calculates self-attraction and loading using the spherical harmonics method.

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.

  • % tidal_sal_sht [logical] :: If true, use online spherical harmonics to calculate SAL.

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

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

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

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

  • % amp [real( max_constituents )] :: The amplitude of a tidal constituent at time 0 [Z ~> 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(:,:,:),allocatable] :: The sine based structures that can be associated with.

  • % cos_struct [real(:,:,:),allocatable] :: The cosine based structures that can be associated with.

  • % cosphasesal [real(:,:,:),allocatable] :: The cosine of the phase of the self-attraction and loading amphidromes [nondim].

  • % sinphasesal [real(:,:,:),allocatable] :: The sine of the phase of the self-attraction and loading amphidromes [nondim].

  • % ampsal [real(:,:,:),allocatable] :: The amplitude of the SAL [Z ~> m].

  • % cosphase_prev [real(:,:,:),allocatable] :: The cosine of the phase of the amphidromes in the previous tidal solutions [nondim].

  • % sinphase_prev [real(:,:,:),allocatable] :: The sine of the phase of the amphidromes in the previous tidal solutions [nondim].

  • % amp_prev [real(:,:,:),allocatable] :: The amplitude of the previous tidal solution [Z ~> m].

  • % sht [type( sht_cs )] :: Spherical harmonic transforms (SHT) for SAL.

  • % sal_sht_nd [integer] :: Maximum degree for SHT [nondim].

  • % love_scaling [real(:),allocatable] :: Love number for each SHT mode [nondim].

  • % snm_re [real(:),allocatable] :: Real SHT coefficient for SHT SAL [Z ~> m].

  • % snm_im [real(:),allocatable] :: Imaginary SHT coefficient for SHT SAL [Z ~> 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, nodelon, 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, US, 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.

  • us :: [in] A dimensional unit scaling type

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

  • cs :: [inout] Tidal forcing control structure

Call to:

astro_longitudes_init calc_love_scaling eq_phase find_in_files id_clock_sal 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/calc_love_scaling(nlm, rhoW, rhoE, Love_Scaling)

This subroutine calculates coefficients of the spherical harmonic modes for self-attraction and loading. The algorithm is based on the SAL implementation in MPAS-ocean, which was modified by Kristin Barton from routine written by K. Quinn (March 2010) and modified by M. Schindelegger (May 2017).

Parameters:
  • nlm :: [in] Maximum spherical harmonics degree [nondim]

  • rhow :: [in] The average density of sea water [R ~> kg m-3]

  • rhoe :: [in] The average density of Earth [R ~> kg m-3]

  • love_scaling :: [out] Scaling factors for inverse SHT [nondim]

Call to:

mom_load_love_numbers::love_data mom_error_handler::mom_error

Called from:

tidal_forcing_init

subroutine mom_tidal_forcing/find_in_files(filenames, varname, array, G, scale)

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 [arbitrary]

  • scale :: [in] A factor by which to rescale the array to translate it into its desired units [arbitrary]

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 :: [in] 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, US, CS)

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 calculation.

  • 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].

  • us :: [in] A dimensional unit scaling type

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

Call to:

calc_sal_sht 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/calc_sal_sht(eta, eta_sal, G, CS)

This subroutine calculates self-attraction and loading using the spherical harmonics method.

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

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

  • eta_sal :: [out] The sea surface height anomaly from self-attraction and loading [Z ~> m].

  • cs :: [inout] Tidal forcing control structure

Call to:

id_clock_sal

Called from:

calc_tidal_forcing

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