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.

calc_tidal_forcing()

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

calc_tidal_forcing_legacy()

This subroutine functions the same as calc_tidal_forcing but outputs a field that combines previously calculated self-attraction and loading (SAL) and tidal forcings, so that old answers can be preserved bitwise before SAL is separated out as an individual module.

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_tidal_sal_file [logical] :: If true, Read the tidal self-attraction and loading from input files, specified by TIDAL_INPUT_FILE.

  • % use_tidal_sal_prev [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 [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].

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 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_split_rk2b::initialize_dyn_split_rk2b 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, 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/calc_tidal_forcing(Time, e_tide_eq, e_tide_sal, G, US, CS)

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

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

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

  • e_tide_eq :: [out] The geopotential height anomalies due to the equilibrium tides [Z ~> m].

  • e_tide_sal :: [out] The geopotential height anomalies due to the tidal SAL [Z ~> m].

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

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

Call to:

id_clock_tides

Called from:

mom_pressureforce_mont::pressureforce_mont_bouss mom_pressureforce_mont::pressureforce_mont_nonbouss

subroutine mom_tidal_forcing/calc_tidal_forcing_legacy(Time, e_sal, e_sal_tide, e_tide_eq, e_tide_sal, G, US, CS)

This subroutine functions the same as calc_tidal_forcing but outputs a field that combines previously calculated self-attraction and loading (SAL) and tidal forcings, so that old answers can be preserved bitwise before SAL is separated out as an individual module.

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

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

  • e_sal :: [in] The self-attraction and loading fields calculated previously used to initialized e_sal_tide [Z ~> m].

  • e_sal_tide :: [out] The total geopotential height anomalies due to both SAL and tidal forcings [Z ~> m].

  • e_tide_eq :: [out] The geopotential height anomalies due to the equilibrium tides [Z ~> m].

  • e_tide_sal :: [out] The geopotential height anomalies due to the tidal SAL [Z ~> m].

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

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

Call to:

id_clock_tides

Called from:

mom_pressureforce_fv::pressureforce_fv_bouss mom_pressureforce_fv::pressureforce_fv_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 mom_dynamics_split_rk2b::end_dyn_split_rk2b mom_dynamics_unsplit::end_dyn_unsplit mom_dynamics_unsplit_rk2::end_dyn_unsplit_rk2