Lecture note · Fig. 5 · fluid dynamics
Deep-water waves: the sea moves in circles
Numa Koudsie · for school students and first- and second-year undergraduates
01A gull on the swell
Watch a gull resting on the sea beyond the breakers. A swell lifts it, carries it a little forward, lowers it into the trough and carries it back. When the wave has passed, the gull is almost exactly where it was.
A floating bottle does the same, and so does the water itself. The wave that runs towards the shore is a pattern of motion handed on from water to water, not a current. If it were a current, the sea would pile up on every beach. What the wave does carry is energy: energy that a storm put into the sea hundreds or thousands of kilometres away.
Two more facts are familiar to anyone who swims or dives. A diver five metres down hardly notices short, choppy waves overhead, yet still feels the slow back-and-forth surge of a long ocean swell. And long waves are fast: after a distant storm, the first waves to reach the coast are the longest ones, with the longest periods, and the shorter ones follow hours or days later.
All three facts follow from one model: water without friction, moved by gravity alone, in waves that are low compared with their length. This note builds the model, solves it, and follows it all the way to the circling dots in the figure above, where every dot is a parcel of water and the burgundy column follows one vertical line of parcels from the surface down.
02The model
Take the crests to be long and straight, like a swell rolling in parallel lines, so that nothing changes along them. Two coordinates are then enough: \(x\) horizontal, in the direction the wave travels, and \(z\) vertical, pointing up, with \(z = 0\) at the calm surface. The water fills the region \(z < \eta(x,t)\), where \(\eta\) is the height of the surface above its calm level (Figure 1). The velocity of the water at a point is \(\mathbf{u} = (u, w)\), with \(u\) horizontal and \(w\) vertical.
The circles drawn on the page are the leading-order particle paths of small-amplitude, irrotational theory. To first order, horizontal and vertical oscillations are a quarter cycle apart and combine into a circle of radius \(a e^{kz_0}\). The default \(ak\approx0.58\) exaggerates the motion for visibility; use \(ak\ll1\) for quantitative Airy-wave predictions. Section 7 explains the forward drift omitted by the closed circles, and Section 6 distinguishes Gerstner’s exact, rotational wave.
A wave is described by its wavelength \(\lambda\), the distance from crest to crest, and its amplitude \(a\), the height of a crest above the calm level. It is convenient to use the wave number \(k = 2\pi/\lambda\) in place of \(\lambda\), and the angular frequency \(\omega = 2\pi f = 2\pi/T\) in place of the frequency \(f\) or the period \(T\). The page’s default wave has \(\lambda = 260\ \mathrm{px} = 2.6\ \mathrm{m}\) (the drawing uses \(100\ \mathrm{px} = 1\ \mathrm{m}\)), so \(k = 2.42\ \mathrm{rad/m}\), and \(a = 24\ \mathrm{px} = 0.24\ \mathrm{m}\). Gravity is \(g = 9.81\ \mathrm{m/s^2}\). The model keeps only what matters for waves of this size:
- Water is incompressible: its density \(\rho\) is the same everywhere.
- Water is inviscid: it has no internal friction.
- The flow is irrotational: no small parcel of water spins (Section 03 gives the reason).
- The wave is small: \(a\) is much less than \(\lambda\), or \(ak \ll 1\). This is linear theory, also called Airy theory.
- The water is deep: the bottom lies more than about half a wavelength down.
- Gravity and pressure are the only forces: no surface tension, no wind, no current.
There are two unknowns: the shape of the surface, \(\eta(x,t)\), and the flow beneath it, \(\mathbf{u}(x,z,t)\). Each must be found together with the other, because the flow moves the surface and the surface, through its weight, drives the flow.
03Potential flow: Laplace’s equation
Two properties of water turn the flow into a single, well-behaved equation.
The first is incompressibility. Imagine a small box in the water, \(\delta x\) wide and \(\delta z\) high. Water flows in through some faces and out through others; since none can be stored or squeezed, the net flow out must be zero. The flow out through the right face exceeds the flow in through the left face by \(\tfrac{\partial u}{\partial x}\,\delta x\,\delta z\) per unit length of crest, and the top and bottom faces contribute \(\tfrac{\partial w}{\partial z}\,\delta x\,\delta z\), so
\[ \frac{\partial u}{\partial x} + \frac{\partial w}{\partial z} = 0 . \tag{1} \]The second is the absence of spin. The spin of a small parcel of water is measured by its vorticity, \(\partial u/\partial z - \partial w/\partial x\), twice its angular velocity (the sign follows the orientation of the \(x\) and \(z\) axes). Think of what could set a parcel spinning. Pressure pushes on every bit of its surface, straight inwards; when the density is the same everywhere, the net push acts through the parcel’s centre of mass and turns nothing. Gravity pulls at that same centre. Only friction between neighbouring parcels could twist it, and an inviscid fluid has none. So a parcel without spin keeps none. This is Kelvin’s circulation theorem: for a fluid of constant density and no viscosity, under a force with a potential, as gravity is, the circulation round any loop of water particles stays what it was. A sea that was calm before the wave arrived therefore stays without spin as long as the flow is smooth, and that gives
\[ \frac{\partial u}{\partial z} - \frac{\partial w}{\partial x} = 0 . \tag{2} \]Equation (2) holds automatically if both velocity components are slopes of a single function \(\phi(x,z,t)\), the velocity potential:
\[ u = \frac{\partial\phi}{\partial x}, \qquad w = \frac{\partial\phi}{\partial z} , \tag{3} \]because then \(\partial u/\partial z\) and \(\partial w/\partial x\) are both equal to \(\partial^2\phi/\partial x\,\partial z\). The velocity points up the steepest slope of \(\phi\), and its size is that slope. Putting (3) into (1) gives Laplace’s equation:
\[ \frac{\partial^2\phi}{\partial x^2} + \frac{\partial^2\phi}{\partial z^2} = 0 \qquad \text{for } z < \eta(x,t) . \tag{4} \]One unknown function now replaces two, and it obeys the same equation as the electric potential in empty space or the temperature in a slab that conducts heat steadily. Solutions of Laplace’s equation are as smooth as functions can be: the value of \(\phi\) at any point is the average of its values on any circle drawn around that point inside the water. A flow that obeys (4) therefore has no hidden bumps; everything inside the water is fixed by what happens at its edges.
04Three conditions at the edges★
Laplace’s equation alone allows countless flows. The moving surface and the still water far below pick out the one that belongs to a wave, and all of the gravity in the problem enters here.
4.1The surface moves with the water
The surface is made of water, so a parcel on the surface stays on the surface. Its height and the height of the surface beneath it must therefore change at the same rate. The parcel rises at speed \(w\). The surface under it rises at the rate \(\partial\eta/\partial t\), plus \(u\,\partial\eta/\partial x\), because the parcel also slides sideways along the slope. This is the kinematic condition:
\[ \frac{\partial\eta}{\partial t} + u\,\frac{\partial\eta}{\partial x} = w \qquad \text{at } z = \eta . \tag{5} \]For a small wave two simplifications are allowed. The term \(u\,\partial\eta/\partial x\) is the product of a parcel speed, of order \(a\omega\), and a slope, of order \(ak\); it is \(ak\) times smaller than \(\partial\eta/\partial t\), which is of order \(a\omega\), and we drop it. And \(w\) may be taken at the calm level \(z = 0\) instead of at the moving surface: by Taylor’s theorem \(w(\eta) = w(0) + \eta\,\partial w/\partial z + \dots\), and the correction is again \(ak\) times smaller. With (3), what remains is
\[ \frac{\partial\eta}{\partial t} = \frac{\partial\phi}{\partial z} \qquad \text{at } z = 0 . \tag{6} \]4.2The pressure at the surface is the air’s
Newton’s second law for the water, per unit volume, reads \(\rho\,\mathrm{D}\mathbf{u}/\mathrm{D}t = -\nabla p - \rho g\,\hat{\mathbf{z}}\): the pressure \(p\) pushes from high to low, and gravity pulls down. Here \(\mathrm{D}/\mathrm{D}t = \partial/\partial t + \mathbf{u}\cdot\nabla\) is the rate of change seen by a moving parcel. For an irrotational flow the identity \((\mathbf{u}\cdot\nabla)\,\mathbf{u} = \nabla\bigl(\tfrac12|\mathbf{u}|^2\bigr)\) holds, and with \(\mathbf{u} = \nabla\phi\) every term becomes a gradient:
\[ \nabla\left[ \frac{\partial\phi}{\partial t} + \tfrac12|\nabla\phi|^2 + \frac{p}{\rho} + g z \right] = 0 . \tag{7} \]The bracket therefore has the same value everywhere in the water at a given moment. This is Bernoulli’s equation for unsteady flow. The value it takes can depend on time, but that dependence can be absorbed into \(\phi\) without changing any velocity. At the surface the pressure is the air pressure, which we take as constant and absorb in the same way. Dropping the small term \(\tfrac12|\nabla\phi|^2\), of order \((a\omega)^2\), and again moving the condition from \(z = \eta\) to \(z = 0\), leaves the dynamic condition
\[ \frac{\partial\phi}{\partial t} + g\,\eta = 0 \qquad \text{at } z = 0 . \tag{8} \]This is where gravity enters: a raised surface means extra weight on the water beneath it.
4.3Deep water stays still
\[ \nabla\phi \to 0 \qquad \text{as } z \to -\infty . \tag{9} \]In practice “infinitely deep” means deeper than about half a wavelength; Section 10 measures how good that is.
05Gravity sets the pace: the dispersion relation
5.1A travelling wave
Look for a wave of a single wavelength that travels without changing shape:
\[ \eta = a\cos(kx - \omega t) . \tag{10} \]A crest sits where \(kx - \omega t = 0\), that is at \(x = (\omega/k)\,t\), so the crests move at the speed \(\omega/k\). Condition (6) needs \(\partial\phi/\partial z\) to vary like \(\partial\eta/\partial t\), which is proportional to \(\sin(kx - \omega t)\), so we try \(\phi = Z(z)\sin(kx - \omega t)\). Laplace’s equation (4) then requires \(Z'' - k^2 Z = 0\), whose solutions are
\[ Z(z) = A\,e^{kz} + B\,e^{-kz} . \tag{11} \]Below the surface \(z\) is negative, so \(e^{-kz}\) grows without bound with depth; condition (9) forbids it, and \(B = 0\). The kinematic condition (6) reads \(a\omega\sin(kx - \omega t) = kA\sin(kx - \omega t)\), so \(A = a\omega/k\) and
\[ \phi = \frac{a\omega}{k}\,e^{kz}\sin(kx - \omega t) . \tag{12} \]The factor \(e^{kz}\) was not put in by hand. Laplace’s equation forces it: a pattern that repeats every \(\lambda\) along \(x\) must die away over a depth of about \(\lambda/2\pi\).
5.2The dispersion relation
Only the dynamic condition (8) is left. At \(z = 0\), \(\partial\phi/\partial t = -(a\omega^2/k)\cos(kx - \omega t)\), and (8) becomes \(\left(g - \omega^2/k\right)a\cos(kx - \omega t) = 0\) for every \(x\) and \(t\). The wave exists only if the bracket vanishes.
Frequency and wavelength are not independent: gravity fixes how fast a wave of a given length must oscillate, and the amplitude drops out. For the page’s default \(\lambda = 2.6\ \mathrm{m}\), \(\omega = 4.87\ \mathrm{rad/s}\) and \(f = 0.775\ \mathrm{Hz}\).
There is a simple picture behind (13). Under a crest the water carries the weight of the hump above it; under a trough it carries less. The pressure therefore falls from crest to trough, and by (7) and (8) the horizontal push it gives the water at the surface is, per kilogram, \(g\) times the slope of the surface, at most \(g\,ak\). That push keeps the surface water moving on its circle of radius \(a\) (Section 06), which needs an acceleration \(a\omega^2\). Setting \(a\omega^2 = g\,ak\) gives (13). At the page’s default, \(ak = 0.58\), so the surface water accelerates at \(0.58\,g\).
5.3Long waves are fast
From (13), the speed of the crests and the period are
\[ \begin{aligned} c &= \frac{\omega}{k} = \sqrt{\frac{g}{k}} = \sqrt{\frac{g\lambda}{2\pi}}, \\ T &= \frac{2\pi}{\omega} = \sqrt{\frac{2\pi\lambda}{g}} . \end{aligned} \tag{14} \]Waves whose speed depends on their wavelength are called dispersive: a mixture of wavelengths spreads out as it travels, sorted by length. Deep-water waves are strongly dispersive. The page’s default wave, \(\lambda = 2.6\ \mathrm{m}\), runs at \(c = 2.01\ \mathrm{m/s}\) with period \(T = 1.29\ \mathrm{s}\); an ocean swell of \(100\ \mathrm{m}\) runs at \(12.5\ \mathrm{m/s}\) with a period of \(8.0\ \mathrm{s}\).
Energy does not travel at \(c\). A real wave train is a group: a few crests that grow and then shrink. The group, and with it the energy, moves at the group velocity
\[ c_g = \frac{\mathrm{d}\omega}{\mathrm{d}k} = \frac12\sqrt{\frac{g}{k}} = \frac{c}{2} . \tag{15} \]Each crest therefore runs through its group at twice the group’s speed: it appears at the rear, grows as it moves forward, and fades away at the front. The group velocity also sets the arrival times after a storm. From a storm \(2000\ \mathrm{km}\) away, swell with a period of \(16\ \mathrm{s}\) (\(\lambda = 400\ \mathrm{m}\)) travels at \(c_g = 12.5\ \mathrm{m/s}\) and arrives after about 44 hours; swell with a period of \(8\ \mathrm{s}\) (\(\lambda = 100\ \mathrm{m}\)) travels at \(6.25\ \mathrm{m/s}\) and needs about 89 hours. The long, slow-rolling swell comes first. The table collects these speeds, all from (14) and (15).
| wave | \(\lambda\) (m) | \(T\) (s) | \(c\) (m/s) | \(c_g\) (m/s) |
|---|---|---|---|---|
| page, shortest | 1.2 | 0.88 | 1.37 | 0.68 |
| page, default | 2.6 | 1.29 | 2.01 | 1.01 |
| page, longest | 4.0 | 1.60 | 2.50 | 1.25 |
| wind waves | 10 | 2.53 | 3.95 | 1.98 |
| ocean swell | 100 | 8.00 | 12.5 | 6.25 |
| long swell | 400 | 16.0 | 25.0 | 12.5 |
The page draws a single wave that never ends, so it has no groups: \(c_g\) appears in its data panel as a prediction, not as something you can watch. With the dispersion switch off, the frequency is whatever you set, the wave is no longer a water wave, and \(c_g = c/2\) no longer applies.
Leave Deep-water dispersion \(\omega^2 = gk\) switched on and move Wavelength \(\lambda\) from \(120\ \mathrm{px}\) to \(400\ \mathrm{px}\), that is from \(1.2\) to \(4.0\ \mathrm{m}\). The Phase speed \(c\) readout rises from \(1.37\) to \(2.50\ \mathrm{m/s}\), a factor of 1.83, which is \(\sqrt{400/120}\); the Period \(T\) rises from \(0.88\) to \(1.60\ \mathrm{s}\) by the same factor, and the Frequency \(f\) slider follows by itself. Now switch dispersion off, return to \(260\ \mathrm{px}\) and set Frequency \(f\) to \(0.50\ \mathrm{Hz}\). The wave now runs at \(1.30\ \mathrm{m/s}\). The picture still moves, but no water wave could: a \(2.6\ \mathrm{m}\) wave on deep water must oscillate at \(0.77\ \mathrm{Hz}\).
06Every parcel runs in a circle
The velocity of the water follows from (3) and (12):
\[ \begin{aligned} u &= a\omega\,e^{kz}\cos(kx - \omega t), \\ w &= a\omega\,e^{kz}\sin(kx - \omega t) . \end{aligned} \tag{16} \]Now follow one parcel. Let \((x_0, z_0)\) be its rest position, where it sits when the sea is calm. It never moves far from there compared with \(\lambda\), so we may evaluate (16) at \((x_0, z_0)\) instead of at its actual position. This is the step that defines linear theory: the error it makes is smaller by a further factor \(ak\), and Section 07 shows what it hides. Integrating in time, with \(\tfrac{\mathrm{d}}{\mathrm{d}t}\sin(kx_0 - \omega t) = -\omega\cos(kx_0 - \omega t)\) and \(\tfrac{\mathrm{d}}{\mathrm{d}t}\cos(kx_0 - \omega t) = \omega\sin(kx_0 - \omega t)\),
\[ \begin{aligned} x &= x_0 - a\,e^{kz_0}\sin(kx_0 - \omega t), \\ z &= z_0 + a\,e^{kz_0}\cos(kx_0 - \omega t) . \end{aligned} \tag{17} \]Squaring and adding the two lines of (17) gives \((x - x_0)^2 + (z - z_0)^2 = a^2 e^{2kz_0}\): every parcel moves on a circle around its rest position, of radius
\[ r(z_0) = a\,e^{kz_0} , \tag{18} \]once per period, at the constant speed \(r\omega\). Under a crest, where the phase \(kx_0 - \omega t\) is zero, the parcel is at the top of its circle and moves forward with the wave; under a trough it is at the bottom and moves backward; ahead of a crest it rises, behind it it sinks. With the wave moving to the right, the circling is clockwise. This is the gull of Section 01.
At the surface the parcel speed is \(a\omega\), which is \(ak\) times the wave speed \(c\). At the page’s default, \(a\omega = 1.17\ \mathrm{m/s}\) against \(c = 2.01\ \mathrm{m/s}\): the water moves, but the pattern moves faster.
6.1Decay with depth
The radius (18) falls by a factor \(e\) for every \(\lambda/2\pi\) of depth. Half a wavelength down it is \(e^{-\pi} = 4.3\ \%\) of its surface value, one wavelength down \(e^{-2\pi} = 0.19\ \%\), one part in 535. Figure 3 shows it for the shortest, the default and the longest wavelength the page allows.
On the page the layers are \(56\ \mathrm{px} = 0.56\ \mathrm{m}\) apart, so at the default wavelength each orbit is \(e^{-k \cdot 0.56\ \mathrm{m}} = 0.258\) times the one above: the radii are 24, 6.2, 1.6, 0.41 and 0.11 px. The fifth layer, \(2.24\ \mathrm{m}\) down, moves on a circle 0.45 % the size of the surface one; the Deepest orbit readout rounds this to 0.4 %. Only \(z_0/\lambda\) enters (18), so the same curves tell the diver’s story. Five metres under choppy \(10\ \mathrm{m}\) waves, \(z_0/\lambda = -0.5\), and the water moves only 4.3 % as far as at the surface. Five metres under a \(100\ \mathrm{m}\) swell, the circles are still 73 % of the surface ones, and the diver must go down \(50\ \mathrm{m}\) to reach 4.3 %.
Set Depth layers to 5 and watch the Deepest orbit readout as you move Wavelength \(\lambda\). At \(400\ \mathrm{px}\) the deepest layer, \(2.24\ \mathrm{m}\) down, still circles at 3.0 % of \(a\); at \(120\ \mathrm{px}\) the readout shows 0.0 %, because \(e^{-2\pi \cdot 2.24/1.2} = 8 \times 10^{-6}\). With Show orbits on, count the layers whose circles you can see at each wavelength, and compare with Figure 3. The page stops drawing a circle once its radius falls below 1.2 screen pixels.
6.2The shape of the surface
The surface is the top row of parcels, \(z_0 = 0\). By (17), with \(\theta = kx_0 - \omega t\), it is the curve traced by
\[ \begin{aligned} x &= x_0 - a\sin\theta, \\ \eta &= a\cos\theta , \end{aligned} \tag{19} \]as the rest position \(x_0\) runs along the sea.
This is a trochoid, the curve traced by a point on the spoke of a rolling wheel. Near a crest the surface parcels crowd together and near a trough they spread apart, so crests are sharper and troughs flatter than in the sine (10); the two agree as \(ak \to 0\). At the default \(ak = 0.58\), the crest, the part of the surface above the line of orbit centres, spans a fraction \(\tfrac12 - ak/\pi = 31.5\ \%\) of each wavelength, and the surface averaged along \(x\) lies \(\tfrac12 a^2 k = 7.0\ \mathrm{px}\) below that line. The dashed line in the figure marks the orbit centres, not this average.
Along (19), \(\mathrm{d}x/\mathrm{d}x_0 = 1 - ak\cos\theta\). At \(ak = 1\) this vanishes at the crest, and the crest becomes a sharp cusp; beyond that the curve would loop through itself. At the same point the surface water at the crest moves as fast as the crest itself, \(a\omega = c\). The page therefore caps the amplitude at \(a = 0.9/k\), so that \(ak \le 0.9\). Raise Amplitude \(a\) (orbit radius) to \(50\ \mathrm{px}\) at \(\lambda = 260\ \mathrm{px}\): the requested steepness would be 1.21, the cap holds the amplitude at \(37.2\ \mathrm{px}\), the Steepness ak readout shows 0.90 (cap), and the crests turn narrow while the troughs flatten. Real waves break long before: the steepest wave water can hold is about 0.14 wavelengths high from trough to crest, so \(ak = \pi H/\lambda \approx 0.44\) with \(H = 2a\). The page’s default, \(ak = 0.58\), is steeper than any real sea wave; it was chosen so that the circles are large enough to see. The trochoid is also the exact shape of Gerstner’s wave, a nonlinear solution with exactly circular orbits; but the water in Gerstner’s wave spins, so it is not the potential flow derived here.
07Stokes drift: the circles do not quite close★
The gull of Section 01 comes back almost, but not exactly, to where it started. Linear theory hides the difference; one more term of the calculation brings it back.
The circles (17) use the velocity at the rest position. A real parcel feels the velocity where it actually is, displaced from \((x_0, z_0)\) by \(\xi = -r\sin\theta\) horizontally and \(\zeta = r\cos\theta\) vertically, with \(r = a\,e^{kz_0}\) and \(\theta = kx_0 - \omega t\). Expanding the horizontal velocity (16) to first order in the displacement,
\[ \begin{aligned} u(x_0 + \xi,\ z_0 + \zeta) &\approx u + \xi\,\frac{\partial u}{\partial x} + \zeta\,\frac{\partial u}{\partial z}, \\ \xi\,\frac{\partial u}{\partial x} &= (-r\sin\theta)\,(-a\omega k\,e^{kz_0}\sin\theta) \\ &= a^2\omega k\,e^{2kz_0}\sin^2\theta, \\ \zeta\,\frac{\partial u}{\partial z} &= (r\cos\theta)\,(a\omega k\,e^{kz_0}\cos\theta) \\ &= a^2\omega k\,e^{2kz_0}\cos^2\theta . \end{aligned} \tag{20} \]The first term, \(u\) at the rest position, averages to zero over a period. The two corrections add up to a constant, because \(\sin^2\theta + \cos^2\theta = 1\). The parcel therefore drifts forward, on average, at the Stokes drift velocity
\[ U_S = a^2\omega k\,e^{2kz_0} = c\,(ak)^2\,e^{2kz_0} . \tag{21} \]The picture is this. Under a crest the parcel is at the top of its circle, where the forward flow is a little stronger because \(e^{kz}\) is larger; under a trough it is at the bottom, where the backward flow is a little weaker. Forward wins, and each loop ends slightly ahead of where it began. In one period the parcel advances \(U_S T = (ak)^2 e^{2kz_0}\lambda\), since \(cT = \lambda\). The drift is second order in the steepness, and it fades with depth as \(e^{2kz_0}\), twice as fast as the circles. For \(\lambda = 2.6\ \mathrm{m}\) and a moderate steepness \(ak = 0.2\) (\(a = 8.3\ \mathrm{cm}\)), (21) gives \(U_S = 0.081\ \mathrm{m/s}\) at the surface: \(10.4\ \mathrm{cm}\), or 4 % of a wavelength, per period.
Figure 4 tests (21). The loops do not close. Each lasts \(1.043\,T\), a little longer than a period because the parcel travels along with the wave, and ends \(11.2\ \mathrm{cm}\) further on, so the mean forward speed is \(0.0835\ \mathrm{m/s}\), 3.6 % more than (21). The gap is the next term of the series: the same calculation gives 0.93 % at \(ak = 0.1\) and 0.24 % at \(ak = 0.05\), so the gap shrinks about fourfold each time \(ak\) halves, as a correction of order \((ak)^2\) should. At \(z_0 = -0.56\ \mathrm{m}\), the page’s first layer below the surface, the computed drift is \(5.39\ \mathrm{mm/s}\) and (21) gives \(5.38\ \mathrm{mm/s}\).
The page draws the closed circles (17) and leaves the drift out on purpose; its data panel stores \(U_S\) from (21) as theory, not as motion. At the default steepness (21) gives \(0.68\ \mathrm{m/s}\), a third of \(c\), far outside the range of small \(ak\) where the formula holds. Gerstner’s wave of Section 6.2 has closed orbits and no drift; the drift belongs to irrotational waves like the ones derived here. In the real sea it is one of the ways floating objects, from bottles to oil slicks, are slowly carried along in the direction the waves travel.
08Computing the picture
The positions (17) are known in closed form, so the page never steps a differential equation forward in time: each frame evaluates the formulas afresh. Only the phase is accumulated, from the time \(\Delta t\) between frames:
\[ \begin{aligned} \omega t &\;\leftarrow\; \omega t + 2\pi f\,\Delta t, \\ f &= \frac{\sqrt{g\,k_\mathrm{m}}}{2\pi}, \qquad k_\mathrm{m} = 100\,k . \end{aligned} \tag{22} \]The page measures \(\lambda\) in pixels, so \(k = 2\pi/\lambda\) is in radians per pixel and \(k_\mathrm{m}\) is the same wave number in radians per metre. With Deep-water dispersion on, \(f\) comes from (13) at full precision; the Frequency \(f\) slider only displays it, rounded to \(0.01\ \mathrm{Hz}\). With the switch off, \(f\) is the slider value. Adding up the phase frame by frame, rather than computing \(\omega t\) from the clock, keeps the motion smooth when \(f\) changes. Each frame then computes, for every layer \(j\) and every parcel \(i\) in it:
- the rest position \(X_0 = 30 + (W_\mathrm{field}-60)\,i/(N - 1)\) px and the depth \(z_0 = -56\,j\) px, where \(N\) is set by Particles per layer;
- the orbit radius \(r = a\,e^{kz_0}\) and the phase \(\theta = kX_0 - \omega t\);
- the displacement \(\xi = -r\sin\theta\), \(\zeta = r\cos\theta\), and the velocity \(u = r\omega\cos\theta\), \(w = r\omega\sin\theta\).
At the defaults that is 90 parcels, plus 307 points along the surface on a wide canvas or 174 on a narrow one. Each of these numbers is written into the page’s data store at the line that computes it, and the data panel reads them from there. Nothing is integrated, so nothing accumulates error: the positions are exact up to the rounding of double-precision arithmetic, however long the page runs. The amplitude used is \(a = \min(A, 0.9/k)\), where \(A\) is the value of the Amplitude slider.
09From metres to pixels
The drawing has field width \(W_\mathrm{field}=800\ \mathrm{px}=8\ \mathrm{m}\), or \(400\ \mathrm{px}=4\ \mathrm{m}\) when the canvas is narrower than 560 screen pixels, with \(100\ \mathrm{px} = 1\ \mathrm{m}\) throughout, scaled to the width \(W\) of the canvas on your screen. A canvas \(H\) pixels tall places a parcel of layer \(j\) at
\[ \begin{aligned} s &= W/W_\mathrm{field}, \\ y_s &= \max(a s + 34,\ 0.28\,H), \\ x_\text{screen} &= (X_0 + \xi)\,s, \\ y_\text{screen} &= y_s + 56\,j\,s - \zeta\,s . \end{aligned} \tag{23} \]Here \(s\) is the number of screen pixels per field pixel and \(y_s\) the height of the calm surface, measured down from the top of the canvas; screen \(y\) points down, which is why \(\zeta\) is subtracted. The calm level sits at 28 % of the height, or lower when the crests would otherwise come within 34 screen pixels of the top. The layers are \(0.56\ \mathrm{m}\) apart and labelled with their depth.
- The surface is a line in the accent colour through surface parcels of (19), one for every \(3\ \mathrm{px}\) of rest position from \(-60\) to \(W_\mathrm{field}+60\ \mathrm{px}\), so that its ends lie outside the frame. A dashed line marks the calm level, the centres of the surface orbits.
- The water under the surface is tinted rose, from 36 % opacity at crest height to 5 % at the bottom of the canvas.
- Each parcel is a dot, \(3.8\ \mathrm{px}\) in radius at the surface and \(3.1\ \mathrm{px}\) below. The followed column is the middle one (\(i = 8\), counting from zero, at \(X_0 = 378.2\ \mathrm{px}\) on the wide field or \(190\ \mathrm{px}\) on the narrow field for 18 parcels per layer): burgundy, with larger dots and a line from each orbit centre to its parcel.
- With Show orbits on, each orbit is a dotted circle, solid for the followed column, drawn only while its radius exceeds 1.2 screen pixels.
The drawing differs from the stored numbers in three small ways. The surface line passes through points every \(3\ \mathrm{px}\) that are not stored parcels; the canvas rounds every position to its own pixel grid; and layers that fall below the bottom of the canvas are computed and stored but not drawn.
10What the model leaves out
- Stokes drift (Section 07) is not drawn: the circles on screen close exactly.
- Finite depth. Over a bottom at depth \(h\) the dispersion relation becomes \(\omega^2 = gk\tanh(kh)\), and the circles flatten into ellipses; at the bottom itself the water only slides back and forth. At \(h = \lambda/2\), \(\tanh(kh) = \tanh\pi = 0.9963\), and the wave is only 0.19 % slower than on infinitely deep water; this is why half a wavelength counts as deep. In very shallow water \(c \to \sqrt{gh}\) for every wavelength, and the waves stop being dispersive.
- Surface tension adds its own restoring force: \(\omega^2 = gk + \sigma k^3/\rho\), with \(\sigma = 0.0728\ \mathrm{N/m}\) for clean water at \(20\ ^\circ\mathrm{C}\). It dominates below \(\lambda = 2\pi\sqrt{\sigma/(\rho g)} = 1.71\ \mathrm{cm}\), where ripples become capillary waves, and no wave on deep water is slower than \(0.231\ \mathrm{m/s}\), the speed at that wavelength.
- Steep waves are no longer sinusoidal: their crests sharpen, and their speed grows by a factor of about \(1 + \tfrac12(ak)^2\), 2 % at \(ak = 0.2\). Real waves break near \(ak \approx 0.44\); the page allows up to 0.9.
- Viscosity damps the amplitude as \(e^{-2\nu k^2 t}\), with kinematic viscosity \(\nu = 1.0 \times 10^{-6}\ \mathrm{m^2/s}\) for water. For the default \(2.6\ \mathrm{m}\) wave, reducing the amplitude by a factor \(e\) takes 24 hours: over a few periods, friction really is negligible.
- Wind, currents and breaking are absent, and so is the random mixture of wavelengths and directions that makes up a real sea.
10.1Further reading
- R. P. Feynman, R. B. Leighton and M. Sands, The Feynman Lectures on Physics, Vol. I, Addison-Wesley, 1963: chapter 51, section 51-4 (water waves), a short and vivid first account.
- D. J. Acheson, Elementary Fluid Dynamics, Oxford University Press, 1990: chapter 3 (waves), including deep-water waves, dispersion and group velocity.
- P. K. Kundu, I. M. Cohen and D. R. Dowling, Fluid Mechanics, 6th edition, Academic Press, 2016: chapter 8 (gravity waves), including surface tension, group velocity and nonlinear waves.
- L. D. Landau and E. M. Lifshitz, Fluid Mechanics, 2nd edition, Pergamon, 1987: §12 (gravity waves) and §25 (damping of gravity waves by viscosity).