Harmonic Development and the Doodson Classification#
The positions of the Moon and Sun vary quasi-periodically in time, causing the tide-generating potential to oscillate with a rich spectrum of discrete frequencies. The harmonic development consists of expanding this potential into a sum of cosine terms — the tidal constituents — each characterised by a unique frequency derived from the rates of change of six astronomical angles. This section presents the derivation of the Doodson classification system that systematically encodes these frequencies.
The Six Fundamental Variables#
All tidal frequencies can be expressed as integer linear combinations of the rates of change of six independent astronomical angles, ranked by decreasing angular velocity:
Symbol |
Physical meaning |
Angular velocity (°/h) |
Period |
|---|---|---|---|
\(\tau\) |
Mean lunar time at Greenwich (hour angle of the mean Moon minus 180°) |
14.492052 |
1.035 days |
\(s\) |
Mean longitude of the Moon |
0.549017 |
27.322 days |
\(h\) |
Mean longitude of the Sun |
0.041069 |
365.242 days |
\(p\) |
Mean longitude of the lunar perigee |
0.004642 |
8.847 years |
\(N'\) |
Negative longitude of the Moon’s ascending node (\(-N\)) |
0.002206 |
18.613 years |
\(p_1\) |
Mean longitude of the solar perihelion |
0.000002 |
20,940 years |
The mean lunar time \(\tau\) is related to universal time \(\mathrm{UT}\) (in hours) and the mean longitudes by:
where \(t = 180° + 15° \cdot \mathrm{UT}\) is the hour angle of the
mean Sun at Greenwich (AstronomicAngle.t in PyFES). The term
\(15° \cdot \mathrm{UT}\) is the mean solar time counted from midnight,
that is the hour angle of the mean Sun minus 180°; adding the difference in
mean longitudes (\(h - s\)) gives the hour angle of the mean Moon minus
180°. Like the whole argument, \(\tau\) is referred to the Greenwich
meridian, not to the local one. These six variables are mutually independent
— no exact rational relationship exists between any pair of their periods —
which is why the tide is technically not periodic but merely
quasi-periodic.
General Form of a Tidal Argument#
Each tidal constituent \(k\) has an astronomical argument of the form:
where \(n_1\) to \(n_6\) are small integers (typically in the range \(-5\) to \(+6\) for potential-derived constituents) and \(n_7\) is a constant phase offset described in Extended Doodson Number. The constituent’s angular frequency is:
where the dots denote the constant angular velocities listed in the table above.
The coefficient \(n_1\) determines the tidal species: constituents with \(n_1 = 0\) are long-period, \(n_1 = 1\) diurnal, \(n_1 = 2\) semidiurnal, and so on.
Doodson Number Encoding#
To obtain a compact notation avoiding negative digits, Doodson (1921) proposed adding 5 to each coefficient \(n_i\) (for \(i \geq 2\)), while leaving the species coefficient \(n_1\) unchanged. The resulting six-digit integer is the Doodson number:
where a dot conventionally separates the first three digits from the last
three. For digits exceeding 9, special symbols are used: X for 10,
E for 11, T for 12.
Example — M₂ (principal lunar semidiurnal):
The \(M_2\) constituent has the argument \(\theta = 2\tau\), meaning \((n_1, n_2, n_3, n_4, n_5, n_6) = (2, 0, 0, 0, 0, 0)\). Adding 5 to each coefficient except the first:
Example — S₂ (principal solar semidiurnal):
The \(S_2\) argument is \(\theta = 2\tau + 2s - 2h = 2 \cdot 15° \cdot \mathrm{UT}\) (since \(\tau = 15° \cdot \mathrm{UT} + h - s\)), giving \((n_1, n_2, n_3, n_4, n_5, n_6) = (2, 2, -2, 0, 0, 0)\):
Example — K₁ (lunisolar diurnal):
The \(K_1\) argument is \(\theta = \tau + s\), giving \((n_1, n_2, n_3, n_4, n_5, n_6) = (1, 1, 0, 0, 0, 0)\):
Example — O₁ (principal lunar diurnal):
\((n_1, n_2, n_3, n_4, n_5, n_6) = (1, -1, 0, 0, 0, 0)\):
Extended Doodson Number#
In practice, an additional seventh digit is appended to encode a phase offset \(n_7 \times 90°\) that ensures all potential terms appear as positive cosines: 0 or 2 (180°) for cosine terms with a positive or negative coefficient, 1 or -1 (90° or 270°) for sine terms. The offset is defined modulo 360°, so \(n_7\) is defined modulo 4. PyFES reports it in \(\{-1, 0, 1, 2\}\) for the Darwin engine, as in the XDO tables (e.g. \(O_1\): \(n_7 = -1\)), while the PERTH engine writes -1 as 3. With the same offset convention, the seventh digit is \(n_7 + 5\).
Species, Groups, and Subgroups#
The Doodson classification introduces a natural hierarchy:
Species: constituents sharing the same \(n_1\) (number of cycles per lunar day).
Group: constituents within a species sharing the same \(n_2\) (same \(n_1\) and \(n_2\)).
Subgroup: constituents within a group sharing the same \(n_3\).
Since constituents are sorted by ascending Doodson number, they are automatically ordered by increasing frequency within each species.
XDO Notation#
Because compound waves arising from non-linear hydrodynamic interactions can have coefficients outside the \([-5, +6]\) range of the original Doodson encoding, an extended alphabetical notation was developed. In this XDO (Extended Doodson Ordering) system, each coefficient \(n_i\) (including \(n_1\)) is mapped to a letter:
Coefficient value |
Letter |
|---|---|
\(\ldots, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, \ldots\) |
\(\ldots,\) W, X, Y, Z, A, B, C, D, E, F, G, \(\ldots\) |
The mapping uses the sequence R S T U V W X Y Z A B C D E F G H I J ...
with Z at coefficient 0. For example:
\(M_2\) with coefficients (2, 0, 0, 0, 0, 0, 0) becomes
BZZZZZZ\(S_2\) with coefficients (2, 2, -2, 0, 0, 0, 0) becomes
BBXZZZZ\(O_1\) with coefficients (1, -1, 0, 0, 0, 0, -1) becomes
AYZZZZY
In PyFES, the xdo_numerical() and xdo_alphabetical() methods on
WaveInterface return these representations.
Darwin versus Doodson Notation#
The two notation systems are mathematically equivalent but differ in philosophy:
Darwin notation assigns mnemonic names to individual constituents (\(M_2\), \(S_2\), \(K_1\), etc.) and defines each constituent’s argument, speed, and nodal corrections explicitly. This is the approach used by the FES/Darwin engine (
engine: darwin).Doodson notation uses the systematic six-digit code to identify constituents by their astronomical argument coefficients, enabling mechanical enumeration of all possible tidal frequencies. This is the approach used by the PERTH/Doodson engine (
engine: perth).
PyFES supports both via its dual-engine architecture: the darwin.WaveTable
stores constituents with their Darwin-style argument definitions, while the
perth.WaveTable uses the Doodson coefficient representation internally.
The Harmonic Prediction Equation#
Combining the potential development with the ocean’s response at a given location yields the harmonic tidal equation. The tidal height at a given location at universal time \(t\) is:
where:
\(H_0\) is the mean water level above the datum,
\(H_k\) and \(G_k\) are the amplitude and phase lag (harmonic constants) of constituent \(k\) at the given location,
\(V_k(t_0)\) is the astronomical argument at the Greenwich meridian at a reference epoch \(t_0\),
\(\omega_k\) is the angular speed of constituent \(k\), so that \(V_k(t_0) + \omega_k (t - t_0)\) is the astronomical argument \(V_k(t)\) at time \(t\),
\(f_k\) and \(u_k\) are the nodal corrections (see Nodal Corrections: Amplitude and Phase Modulations).
The harmonic constants \((H_k, G_k)\) are provided by tidal atlases (FES2022, GOT5.6, etc.) or determined from tide gauge observations via harmonic analysis.
References#
Simon, B. (2013). Marées Océaniques et Côtières (943-MOC), Ch. V, pp. 102–125.
Schureman, P. (1940). Manual of Harmonic Analysis and Prediction of Tides, SP 98, pp. 3–9.
Doodson, A. T. (1921). The Harmonic Development of the Tide-Generating Potential. Proc. Roy. Soc. London A, 100(704), 305–329.