Breakthroughs in Oceanography#

Physical oceanography started with the tides and the waves that anyone on a shore can see. Newton and Laplace turned the tides into a problem of gravitation and then of dynamics, and Gerstner and Stokes solved the first water waves. Measurement at sea came later: the Challenger soundings, then Scandinavian hydrographers who turned temperature and salinity into density and density into currents. The 20th century added rotation and wind, Ekman’s spiral and Sverdrup’s and Stommel’s gyres, and then the slow interior circulation set by heating, salt and mixing. This chronology traces the results behind earthsciencekit.oceanography. Every example uses deterministic synthetic inputs; none inverts real observations.

1687 – Newton’s Equilibrium Tide#

Isaac Newton explained the tides as the difference between the Moon’s attraction on the near and far sides of the Earth, with a smaller share from the Sun. An ocean that adjusted instantly would form two bulges whose semidiurnal amplitude at the equator is (3/4) (M/E) (R/d)**3 R: about 27 cm for the Moon and 12 cm for the Sun. When the two line up they add (spring tides), and when they are in quadrature they partly cancel (neap tides).

Implementation: tidal_elevation(). The example adds the lunar and solar constituents and checks the 14.77-day spring-neap cycle.

References: I. Newton, Philosophiæ Naturalis Principia Mathematica (London, 1687), Book III, Propositions 24 and 36-37.

Newton’s equilibrium tide (1687)

Newton's equilibrium tide (1687)

1776 – Laplace’s Tidal Equations#

Pierre-Simon Laplace wrote the equations of motion for a thin layer of ocean on a rotating sphere, forced by the tidal potential. Long waves in that layer travel at sqrt(g h). An ocean about 4 km deep moves them at about 200 m/s, less than half the speed of the Earth’s surface at the equator, so the ocean cannot keep up with the equilibrium bulge. Real tides are the ocean’s forced dynamic response.

Implementation: shallow_wave_speed(). The example finds the depth, about 22 km, at which the long-wave speed would match the Earth’s rotation.

References: P.-S. Laplace, “Recherches sur plusieurs points du système du monde,” Mémoires de l’Académie royale des sciences de Paris (1775, published 1778): 75-182, and (1776, published 1779): 177-267.

Laplace’s tidal equations (1776)

Laplace's tidal equations (1776)

1802 – Gerstner’s Trochoidal Wave#

Franz Josef von Gerstner found the first exact solution for waves of finite height in deep water. Each particle moves on a circle whose radius decays as exp(-k b) with its rest depth b, and the surface traces a trochoid with sharp crests and flat troughs. The orbits close exactly, so Gerstner’s wave carries no mass forward, and it is steepest when k a = 1, where the crest becomes a cusp.

Implementation: gerstner_orbit_radius() (new). The example draws the trochoid and the orbits and checks that the mean surface lies k a**2 / 2 below the orbit centres.

References: F. J. Gerstner, “Theorie der Wellen,” Abhandlungen der Königlichen Böhmischen Gesellschaft der Wissenschaften (Prague, 1802).

Gerstner’s trochoidal wave (1802)

Gerstner's trochoidal wave (1802)

1847 – Stokes’s Deep-Water Waves#

George Gabriel Stokes derived the dispersion relation omega**2 = g k tanh(k h) for small waves and extended it to waves of finite height. In deep water the crests travel at sqrt(g / k) and the energy at half that speed, so the long waves from a distant storm arrive first. In shallow water every wave travels at sqrt(g h).

Implementation: wave_angular_frequency(), deep_wave_speed() and deep_group_speed(). The example checks the numerical group speed d omega / d k against the deep-water limit.

References: G. G. Stokes, “On the theory of oscillatory waves,” Transactions of the Cambridge Philosophical Society 8 (1847): 441-455.

Stokes’s deep-water waves (1847)

Stokes's deep-water waves (1847)

1872 – The Challenger Soundings#

HMS Challenger left Portsmouth in December 1872 on a voyage of nearly four years that founded deep-sea oceanography. It sounded the depth, sampled the water and dredged the floor at 362 stations, and in 1875 measured 4475 fathoms (8184 m) in the Mariana Trench. At that depth the hydrostatic pressure exceeds 800 atmospheres.

Implementation: hydrostatic_pressure().

References: C. W. Thomson and J. Murray, Report on the Scientific Results of the Voyage of H.M.S. Challenger during the Years 1873-76: Narrative, vol. 1 (London: HMSO, 1885).

The Challenger soundings (1872)

The Challenger soundings (1872)

1901 – Knudsen’s Equation of State#

Martin Knudsen, with Carl Forch and Søren Sørensen, defined salinity and chlorinity and measured seawater density against temperature and salinity. Their Hydrographical Tables were the standard until 1980. Near a reference state the density is linear: warming makes water lighter and adding salt makes it heavier.

Implementation: linear_density(). The example checks that isopycnals in the temperature-salinity plane have slope alpha / beta.

References: M. Knudsen (ed.), Hydrographical Tables (Copenhagen: G. E. C. Gad; London: Williams & Norgate, 1901).

Knudsen’s equation of state (1901)

Knudsen's equation of state (1901)

1903 – Sandström and Helland-Hansen’s Dynamic Method#

Johan Sandström and Bjørn Helland-Hansen applied Vilhelm Bjerknes’s circulation theorem to the sea. If the pressure is the same under two stations at a deep level of no motion, the lighter column must stand higher. The resulting slope of the sea surface balances a geostrophic current, so currents can be computed from temperature and salinity profiles alone.

Implementation: geostrophic_current(), with linear_density() and hydrostatic_pressure(). The example checks that the two columns have equal pressure at the reference level.

References: J. W. Sandström and B. Helland-Hansen, “Über die Berechnung von Meeresströmungen,” Report on Norwegian Fishery and Marine Investigations 2, no. 4 (1903).

Sandström and Helland-Hansen’s dynamic method (1903)

Sandström and Helland-Hansen's dynamic method (1903)

1904 – Ekman’s Dead Water#

Fridtjof Nansen’s Fram lost most of its speed in waters where a thin layer of meltwater lay over salty sea water. Ekman showed in laboratory tanks that the ship was generating waves on the density jump below it. Such internal waves travel at about sqrt(g' h) with the reduced gravity g' = g d_rho / rho, ten or more times slower than surface waves on the same layer.

Implementation: reduced_gravity() and internal_wave_speed(). The example checks that the ratio of internal to surface wave speed is sqrt(d_rho / rho).

References: V. W. Ekman, “On dead-water,” in The Norwegian North Polar Expedition 1893-1896: Scientific Results, ed. F. Nansen, vol. 5, no. 15 (Christiania, 1904).

Ekman’s dead water (1904)

Ekman's dead water (1904)

1905 – Ekman’s Spiral#

Nansen also noticed that Arctic ice drifted 20 to 40 degrees to the right of the wind. Ekman showed that turbulent friction carries the wind stress downward while the Coriolis force turns each layer to the right. The current spirals and decays with depth, the surface current lies 45 degrees to the right of the wind, and the net transport is at right angles to it.

Implementation: ekman_spiral_velocity() (new) and ekman_transport(). The example checks that the integrated spiral equals the Ekman transport.

References: V. W. Ekman, “On the influence of the earth’s rotation on ocean-currents,” Arkiv för Matematik, Astronomi och Fysik 2, no. 11 (1905): 1-53.

Ekman’s spiral (1905)

Ekman's spiral (1905)

1936 – Gustafson and Kullenberg’s Inertial Oscillations#

Torsten Gustafson and Börje Kullenberg recorded currents in the Baltic off Gotland for days and found them turning clockwise with a period of about 14 hours. That is the inertial period 2 pi / f: once the wind has set the water moving, nothing but the Coriolis force acts on it, and friction damps the circles slowly.

Implementation: inertial_period() and simulate_inertial_current(). The example checks the simulated period against 2 pi / f at 57.8 N.

References: T. Gustafson and B. Kullenberg, “Untersuchungen von Trägheitsströmungen in der Ostsee,” Svenska Hydrografisk-Biologiska Kommissionens Skrifter, Ny Serie: Hydrografi 13 (1936).

Gustafson and Kullenberg’s inertial oscillations (1936)

Gustafson and Kullenberg's inertial oscillations (1936)

1938 – Rossby’s Adjustment Radius#

Carl-Gustaf Rossby studied how a rotating fluid adjusts after a disturbance. Gravity waves radiate the imbalance away, but rotation brings the fluid to geostrophic balance over a distance equal to the wave speed divided by f. In the stratified ocean the first baroclinic deformation radius is a few tens of kilometres at mid-latitudes, the scale of ocean eddies.

Implementation: rossby_radius(). The example compares it with a two-layer estimate from internal_wave_speed().

References: C.-G. Rossby, “On the mutual adjustment of pressure and velocity distributions in certain simple current systems, II,” Journal of Marine Research 1 (1938): 239-263.

Rossby’s adjustment radius (1938)

Rossby's adjustment radius (1938)

1947 – Sverdrup’s Balance#

Harald Sverdrup showed that away from boundaries the curl of the wind stress is balanced by flow across latitude circles, where the Coriolis parameter changes at the rate beta: V = curl(tau) / (rho beta). Under the subtropical winds the whole interior drifts toward the equator, and the transport must return in a boundary current.

Implementation: sverdrup_transport() (new) and volume_transport(). The example integrates the interior transport across a 6000 km basin and sizes the boundary current that returns it.

References: H. U. Sverdrup, “Wind-driven currents in a baroclinic ocean; with application to the equatorial currents of the eastern Pacific,” Proceedings of the National Academy of Sciences 33 (1947): 318-326.

Sverdrup’s balance (1947)

Sverdrup's balance (1947)

1948 – Stommel’s Western Intensification#

Henry Stommel solved the wind-driven circulation in a rectangular basin with bottom friction. With uniform rotation the gyre is symmetric. When the Coriolis parameter increases northward, the return flow crowds into a western boundary layer of width friction / beta, which explains why the Gulf Stream and the Kuroshio run along the western sides of their oceans.

Implementation: stommel_streamfunction() (new). The tests check that its interior matches sverdrup_transport().

References: H. Stommel, “The westward intensification of wind-driven ocean currents,” Transactions, American Geophysical Union 29 (1948): 202-206.

Stommel’s western intensification (1948)

Stommel's western intensification (1948)

1961 – Stommel’s Two-Box Thermohaline Circulation#

Stommel linked a warm, salty box to a cold, fresh one. Temperature drives sinking in the cold box, and salinity opposes it. Because the flow carries the salt that sets its own strength, the steady states fold: for moderate freshwater forcing a strong thermal overturning and a weak reversed haline one are both stable. This is the root of the idea that the Atlantic overturning could switch state.

Implementation: thermohaline_forcing() (new) and simulate_thermohaline_boxes() (new). The example runs the boxes from three initial states under the same forcing and checks that each ends on the equilibrium curve.

References: H. Stommel, “Thermohaline convection with two stable regimes of flow,” Tellus 13 (1961): 224-230.

Stommel’s two-box thermohaline circulation (1961)

Stommel's two-box thermohaline circulation (1961)

1966 – Munk’s Abyssal Recipes#

Walter Munk modelled the deep Pacific as a balance between slow upwelling w and downward turbulent mixing kappa, which gives an exponential profile with scale height kappa / w. Fitting a scale of about 1 km with an upwelling of about 1.2 cm per day needs a diffusivity of about 1e-4 m^2/s, ten times what was later measured in the open interior. The missing mixing was found decades later over rough topography.

Implementation: abyssal_temperature() (new) and buoyancy_frequency_squared(). The example recovers kappa / w from the slope of the log temperature gradient.

References: W. H. Munk, “Abyssal recipes,” Deep-Sea Research 13 (1966): 707-730.

Munk’s abyssal recipes (1966)

Munk's abyssal recipes (1966)

2010 – TEOS-10#

The Thermodynamic Equation of Seawater 2010 derives every property of seawater from a single Gibbs function, in Absolute Salinity and Conservative Temperature. Its density is nonlinear: it curves with temperature (cabbeling) and its thermal expansion grows with pressure (thermobaricity). Mixing two water masses of equal density therefore gives a denser mixture, which a linear equation of state cannot show.

Implementation: simplified_seawater_density() (new), the simplified fit of Roquet et al. (2015), compared with linear_density(). It is not the full TEOS-10 polynomial.

References: IOC, SCOR and IAPSO, The International Thermodynamic Equation of Seawater – 2010: Calculation and Use of Thermodynamic Properties, Intergovernmental Oceanographic Commission, Manuals and Guides 56 (UNESCO, 2010). F. Roquet, G. Madec, L. Brodeau and J. Nycander, “Defining a simplified yet ‘realistic’ equation of state for seawater,” Journal of Physical Oceanography 45 (2015): 2564-2579.

TEOS-10 (2010)

TEOS-10 (2010)

See also#