FES Constituents#

This page documents all tidal constituents supported by the FES prediction engine.

Accessing Constituents Programmatically#

To retrieve the wave properties of the constituents supported by the FES engine, you can use the pyfes.darwin.WaveTable() class, which provides a mapping of constituent names to their corresponding properties.

import pyfes

# Get the constituent map for the FES engine
wt = pyfes.darwin.WaveTable()

# Access a specific constituent by name
m2 = wt['M2']
# Print the name and frequency of the M2 constituent
print(f"Name: {m2.name()}, Frequency: {m2.freq}")

# Iterate over all constituents
for wave in wt:
    print(f"Constituent: {wave.name()}, Frequency: {wave.freq}")

Available Constituents#

The FES engine supports the following tidal constituents:

Name

Speed (deg/h)

XDO

M0

0.0000000

Z ZZZ ZZZ

Sa1

0.0410667

Z ZAZ ZYZ

Sa

0.0410686

Z ZAZ ZZZ

Ssa

0.0821373

Z ZBZ ZZZ

Sta

0.1232040

Z ZCZ ZYZ

Mm

0.5443747

Z AZY ZZZ

Mm2

0.5490165

Z AZZ ZZA

Mm1

0.5536583

Z AZA ZZB

A5

1.0158958

Z BXZ ZZZ

MSf

1.0158958

Z BXZ ZZZ

Mf1

1.0887494

Z BZX ZZZ

Mf2

1.0933912

Z BZY ZZA

Mf

1.0980330

Z BZZ ZZZ

Mtm

1.6424077

Z CZY ZZZ

MSqm

2.1139288

Z DXZ ZZZ

2Q1

12.8542862

A WZB ZZY

Sigma1 (\({\sigma}1\))

12.9271398

A WBZ ZZY

Q1

13.3986609

A XZA ZZY

Rho1 (\({\rho}1\))

13.4715145

A XBY ZZY

O1

13.9430356

A YZZ ZZY

MP1

14.0251729

A YBZ ZZA

M11

14.4874103

A ZZY ZZA

M13

14.4920521

A ZZZ ZZZ

M1

14.4966939

A ZZA ZZA

M12

14.4966939

A ZZA ZZA

Chi1 (\({\chi}1\))

14.5695476

A ZBY ZZA

Pi1 (\({\pi}1\))

14.9178647

A AWZ ZAY

P1

14.9589314

A AXZ ZZY

S1

15.0000000

A AYZ ZZZ

K1

15.0410686

A AZZ ZZA

Psi1 (\({\psi}1\))

15.0821353

A AAZ ZYA

Phi1 (\({\phi}1\))

15.1232059

A ABZ ZZA

Theta1 (\({\theta}1\))

15.5125897

A BXA ZZA

J1

15.5854433

A BZY ZZA

SO1

16.0569644

A CXZ ZZA

OO1

16.1391017

A CZZ ZZA

2NS2

26.8794591

B VBB ZZZ

OQ2

27.3416965

B WZA ZZB

Eps2 (\({\epsilon}2\))

27.4238338

B WBA ZZZ

MNS2

27.4238338

B WBA ZZZ

MNuS2 (\(M{\nu}S2\))

27.4966874

B WDY ZZZ

2MK2

27.8860712

B XZZ ZZZ

2N2

27.8953548

B XZB ZZZ

2MS2

27.9682085

B XBZ ZZZ

Mu2 (\({\mu}2\))

27.9682085

B XBZ ZZZ

N2P

28.4350877

B YZZ ZZY

N2

28.4397295

B YZA ZZZ

Nu2 (\({\nu}2\))

28.5125832

B YBY ZZZ

MSK2

28.9019670

B ZXZ ZZZ

M2

28.9841042

B ZZZ ZZZ

MKS2

29.0662415

B ZBZ ZZZ

Lambda2 (\({\lambda}2\))

29.4556253

B AXA ZZB

2MN2

29.5284789

B AZY ZZB

L2

29.5284789

B AZY ZZB

L2P

29.5331208

B AZZ ZZA

NKM2

29.5377626

B AZA ZZZ

T2

29.9589333

B BWZ ZAZ

S2

30.0000000

B BXZ ZZZ

R2

30.0410667

B BYZ ZYB

K2

30.0821373

B BZZ ZZZ

MSN2

30.5443747

B CXY ZZZ

Eta2 (\({\eta}2\))

30.6265120

B CZY ZZZ

2SM2

31.0158958

B DVZ ZZZ

SKM2

31.0980330

B DXZ ZZZ

2SMu2 (\(2S{\mu}2\))

32.0317915

B FTZ ZZZ

2MK3

42.9271398

C YZZ ZZY

MO3

42.9271398

C YZZ ZZY

M3

43.4761564

C ZZZ ZZZ

SO3

43.9430356

C AXZ ZZY

MK3

44.0251729

C AZZ ZZA

SK3

45.0410686

C CXZ ZZA

2MNS4

56.4079380

D WBA ZZZ

N4

56.8794591

D XZB ZZZ

3MS4

56.9523127

D XBZ ZZZ

MN4

57.4238338

D YZA ZZZ

MNu4 (\(M{\nu}4\))

57.4966874

D YBY ZZZ

M4

57.9682085

D ZZZ ZZZ

SN4

58.4397295

D AXA ZZZ

ML4

58.5125832

D AZY ZZZ

NK4

58.5218668

D AZA ZZZ

MS4

58.9841042

D BXZ ZZZ

MK4

59.0662415

D BZZ ZZZ

2MSN4

59.5284789

D CXY ZZZ

S4

60.0000000

D DVZ ZZZ

R4

60.0821334

D DXZ ZXZ

SK4

60.0821373

D DXZ ZZZ

2MP5

72.9271398

E AXZ ZZY

2NM6

85.8635633

F XZB ZZZ

2MN6

86.4079380

F YZA ZZZ

M6

86.9523127

F ZZZ ZZZ

MSN6

87.4238338

F AXA ZZZ

MNK6

87.5059711

F AZA ZZZ

2MS6

87.9682085

F BXZ ZZZ

2MK6

88.0503458

F BZZ ZZZ

2SM6

88.9841042

F DVZ ZZZ

MSK6

89.0662415

F DXZ ZZZ

S6

90.0000000

F FTZ ZZZ

M8

115.9364170

H ZZZ ZZZ

3MS8

116.9523127

H BXZ ZZZ

For detailed information about each constituent’s mathematical formulation, and reference, see the FES constituent implementation details page.

Class Documentation#

class pyfes.darwin.WaveTable#

Bases: pybind11_object

Properties of the tide waves handled by FES

admittance(self: pyfes.core.darwin.WaveTable) None#

Compute waves by admittance from the 7 major constituents: O1, Q1, K1, 2N2, N2, M2, K2.

compute_nodal_corrections(self: pyfes.core.darwin.WaveTable, angles: pyfes.core.AstronomicAngle) None#

Compute nodal corrections.

Parameters:

angles – Astronomical angle indicating the date for which to calculate the tide.

compute_nodal_modulations(self: pyfes.core.darwin.WaveTable, dates: numpy.ndarray, formulae: pyfes.core.Formulae = <Formulae.SCHUREMAN_ORDER_3: 1>) tuple[Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]'], Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']]#

Compute nodal modulations for amplitude and phase.

Parameters:
  • dates – Desired UTC time. The array must be one-dimensional and of type numpy.datetime64.

  • formulae – Astronomic formulae used to calculate the astronomic angles. Defaults to pyfes.Formulae.kSchuremanOrder3.

Returns:

the nodal correction for amplitude, v (greenwich argument) + u (nodal correction for phase)

Return type:

tuple

static harmonic_analysis(h: Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]'], f: Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]'], vu: Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']) Annotated[numpy.typing.NDArray[numpy.complex128], '[m, 1]']#

Harmonic Analysis.

Parameters:
  • h – Sea level.

  • f – Nodal correction coefficient applied to the amplitude of the constituents analyzed.

  • vu – Astronomical argument at time \(t\) + the nodal correction coefficient applied to the phase of the constituents analyzed.

Returns:

The complex number representing the different reconstructed waves.

keys(self: pyfes.core.darwin.WaveTable) list[str]#

Return the list of tidal constituents handled by this instance.

Returns:

List of tidal constituents.

static select_waves_for_analysis(duration: SupportsFloat, f: SupportsFloat = 2.0) list[str]#

Return the list of tidal waves such that their period is more than twice the duration of the time series analyzed.

Parameters:
  • duration – Duration of the time series analyzed in seconds

  • f – Number of times the period of the wave is greater than the duration of the time series analyzed

Returns:

List of selected tidal waves.

tide_from_mapping(self: pyfes.core.darwin.WaveTable, date: object, mapping: typing.Annotated[numpy.typing.NDArray[numpy.complex128], "[m, n]"], formulae: pyfes.core.Formulae = <Formulae.SCHUREMAN_ORDER_3: 1>, num_threads: typing.SupportsInt = 0) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']#

Calculates the tide for a given date from a grid describing the wave properties over an area of interest.

Parameters:
  • date – UTC date.

  • mapping – Mapping of the wave properties over an area of interest.

  • formulae – Astronomic formulae used to calculate the astronomic angles. Defaults to pyfes.Formulae.kSchuremanOrder3.

  • num_threads – Number of threads to use. If 0, the number of threads is automatically determined.

Returns:

The tide calculated for the mapping provided at the given date.

tide_from_tide_series(self: pyfes.core.darwin.WaveTable, dates: numpy.ndarray, wave: typing.Annotated[numpy.typing.NDArray[numpy.complex128], "[m, 1]"], formulae: pyfes.core.Formulae = <Formulae.SCHUREMAN_ORDER_3: 1>) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']#

Calculates the tide of a given time series.

Parameters:
  • dates – UTC dates. The array must be one-dimensional and of type numpy.datetime64.

  • wave – Tidal wave properties computed by pyfes.WaveTable.harmonic_analysis.

  • formulae – Astronomic formulae used to calculate the astronomic angles. Defaults to pyfes.Formulae.kSchuremanOrder3.

Returns:

The tide calculated for the time series provided.

values(self: pyfes.core.darwin.WaveTable) list[pyfes.core.darwin.Wave]#

Return the list of tidal waves handled by this instance.

Returns:

List of tidal waves.

class pyfes.darwin.Wave#

Bases: pybind11_object

Wave definition

property admittance#

Returns True if the wave is computed by admittance.

doodson_numbers(self: pyfes.core.darwin.Wave) Annotated[list[int], 'FixedSize(7)']#

Gets the Doodson representation of the wave.

Note

The 7th number follows the convention established in Doodson & Warburg’s 1941 book. This number can be 0, 1, 2, or -1, representing multiples of 90 degrees added to the tidal argument when using cosine functions.

Returns:

Doodson numbers.

property dynamic#

Returns True if the wave is computed by dynamically.

property f#

Gets the nodal correction for amplitude

property freq#

Gets the wave frequency (radians per seconds)

name(self: pyfes.core.darwin.Wave) str#

Gets the wave name

nodal_a(self: pyfes.core.darwin.Wave, a: pyfes.core.AstronomicAngle) None#

Compute nodal corrections from SCHUREMAN (1958).

Parameters:

a – Astronomic angle

nodal_g(self: pyfes.core.darwin.Wave, a: pyfes.core.AstronomicAngle) None#

Compute nodal corrections from SCHUREMAN (1958).

Parameters:

a – Astronomic angle

period(self: pyfes.core.darwin.Wave) float#

Gets the wave period in hours.

property tide#

Gets the tide associated to the wave.

property type#

Gets the wave type

property u#

Gets the nodal correction for phase

v(self: pyfes.core.darwin.Wave) float#

Gets \(v\) (greenwich argument)

vu(self: pyfes.core.darwin.Wave) float#

Gets \(v\) (greenwich argument) + \(u\) (nodal correction for phase)

xdo_alphabetical(self: pyfes.core.darwin.Wave) str#

Gets the XDO alphabetical representation of the wave.

Returns:

XDO alphabetical representation.

xdo_numerical(self: pyfes.core.darwin.Wave) str#

Gets the XDO numerical representation of the wave.

Returns:

XDO numerical representation.