Tidal harmonic analysis · reference & data registry Data access Sign in Contact
tidalcore water-level time-series analysis - documentation & datasets release 0.9.3 · MIT

Home › reference › constituents

Harmonic constituents

The bundled catalogue holds 68 constituents. The 26 below are the ones that carry almost all of the signal in most records, and they are the only ones most analyses should name explicitly. Speeds are angular speeds in degrees per hour; periods are 360 divided by the speed, in hours.

Each name below links to its own page; the whole set is machine-readable at /api/constituents.json.

Catalogue extract, sorted by species then by amplitude in a typical mid-latitude coastal record. Full set from tc.catalogue().
NameSpeed, °/hPeriod, hSpeciesOrigin
M228.984104212.4206semidiurnalprincipal lunar
S230.000000012.0000semidiurnalprincipal solar
N228.439729512.6583semidiurnallarger lunar elliptic
K230.082137311.9672semidiurnallunisolar declinational
L229.528478912.1916semidiurnalsmaller lunar elliptic
T229.958933312.0164semidiurnallarger solar elliptic
NU228.512583112.6260semidiurnallarger lunar evectional
MU227.968208412.8718semidiurnallunar variational
2N227.895354812.9054semidiurnalsecond-order lunar elliptic
K115.041068623.9345diurnallunisolar declinational
O113.943035625.8193diurnalprincipal lunar
P114.958931424.0659diurnalprincipal solar
Q113.398660926.8684diurnallarger lunar elliptic
J115.585443323.0985diurnalsmaller lunar elliptic
S115.000000024.0000diurnalsolar, largely radiational
OO116.139101722.3061diurnalsecond-order lunar declinational
2Q112.854286228.0062diurnalsecond-order lunar elliptic
M457.96820846.2103quarter-diurnalshallow-water overtide of M2
MS458.98410426.1033quarter-diurnalshallow-water compound, M2 plus S2
MN457.42383376.2692quarter-diurnalshallow-water compound, M2 plus N2
M343.47615638.2804terdiurnallunar, third-degree term
M686.95231264.1402sixth-diurnalshallow-water overtide of M2
M8115.93641693.1052eighth-diurnalshallow-water overtide of M2
MSf1.0158958354.3673long periodlunisolar synodic fortnightly
Mf1.0980331327.8590long periodlunar declinational fortnightly
Mm0.5443747661.3092long periodlunar monthly elliptic

Two long-period terms are deliberately absent from the extract and present in the catalogue: Sa and Ssa, at 0.0410686 and 0.0821373 °/h. They are annual and semiannual, mostly meteorological rather than gravitational in a coastal record, and a record shorter than a year cannot say anything about them at all.

What the amplitudes look like in practice

M2S2N2K2 K1O1P1Q1 1.4120.4630.2810.126 0.1090.0820.0360.017 00.51.01.5 amplitude, m
Fitted amplitudes for station-7, the example record used in the tutorial. Dark bars are semidiurnal, pale bars diurnal. The scale is linear on purpose: in a record like this one, M2 is three times the next term and thirty times the fourth, and a logarithmic axis would hide exactly that fact.

How long a record has to be

Two constituents can only be told apart if the record is long enough for their phase difference to complete a full turn. That is the Rayleigh criterion, and in this form it is just a division: the required span in hours is 360 divided by the difference of the two speeds.

Separation requirements for the pairs that decide how an analysis is planned.
PairSpeed difference, °/hSpan needed
K1 and O11.098033113.7 d
M2 and S21.015895814.8 d
M2 and N20.544374727.6 d
K1 and P10.0821372182.6 d
S2 and K20.0821373182.6 d
Sa and Ssa0.0410686365.2 d

From those numbers follows the only planning table that matters, and it is also what tc.resolvable(span) returns:

Counts are for the default catalogue. Longer is always better, and the jumps are not gradual.
Record spanResolvable termsWhat the extra length buys
15 d11the four largest semidiurnal and diurnal terms, nothing elliptic
29 d22N2 and Q1 separate; K2 and P1 must still be inferred
183 d31K2 and P1 resolved directly, no inference needed
371 d37annual and semiannual terms; this is the example record
19 y68the whole catalogue, with the nodal terms fitted rather than corrected

Inference for short records

When a term cannot be resolved, the usual practice is to tie it to a resolved partner at a fixed ratio taken from the equilibrium tide. tidalcore does this only when asked, and marks every inferred term in the solution:

sol = tc.analyse(short_record)
sol = tc.infer(sol)            # uses DEFAULT_PAIRS
# P1 = 0.331 * K1, phase lag copied from K1
# K2 = 0.272 * S2, phase lag copied from S2

An inferred amplitude is an assumption dressed as a measurement. It is usually a good assumption in open coastal water and a poor one in a strongly non-linear estuary. If you publish inferred terms, say which ones were inferred and at what ratio, and never let them into a comparison between two stations analysed over different spans.

The nodal correction

The lunar node completes a cycle in 18.61 years, which modulates the lunar constituents by a few per cent. With nodal=True, which is the default, the standard node factors are applied at the solution's reference time, so amplitudes from records in different years are comparable. Turning it off is appropriate only when you intend to fit the nodal satellites yourself, which needs most of those 19 years of data.

See also: formats and QC for the flag column that decides which samples reach the fit, and the API overview for the exact signatures of resolvable and infer.