Wave Dynamics and Nearshore Transformation
modelling Level 4

Wave Dynamics and Nearshore Transformation

A wave generated by a storm a thousand kilometres offshore arrives at a beach having sorted itself by frequency, slowed as the seafloor rose to meet it, and steepened until it broke in a line of white water. Every step of that journey is governed by the linear wave dispersion relation — one of the most productive equations in physical oceanography. This essay derives it, applies it to compute shoaling coefficients and breaking conditions, and introduces radiation stress as the mechanism driving wave setup.

Prerequisites: dispersion relations, differential equations, energy conservation, hyperbolic functions

Updated 16 min read

Watch a breaking wave carefully. It arrives from offshore as a smooth, rolling swell. As the water shallows, the crest rises, the trough deepens, and the wave steepens until, at a depth roughly equal to its own height, the crest pitches forward and the wave collapses. The energy that left a storm hundreds of kilometres away is dissipated in a few metres of white water.

This transformation — from deep-water swell to breaking surf — is one of the most precisely understood processes in geomorphology. The governing physics is the linear wave theory, first formalised by Airy (1845), and it predicts the wave’s speed, wavelength, energy flux, and breaking depth from three inputs: wave period, wave height, and water depth. The predictive power is remarkable given the complexity of what we are actually watching.


1. The Question

How does wave speed depend on water depth and wave frequency? How does wave height change as a wave shoals from deep water onto a beach? At what depth does a wave break? And what force does the wave exert on the water column as it does so?


2. The Conceptual Model

We model the ocean surface as a small-amplitude sinusoidal wave propagating in the $x$-direction over a fluid of variable depth $h(x)$ [m]. The water is incompressible and irrotational (no vorticity), and the wave amplitude is much smaller than the wavelength (the linear assumption).

The key insight of linear wave theory: the wave speed (phase velocity) $C$ depends on both the wave’s own wavelength $L$ and the water depth $h$. In deep water, long waves travel faster than short waves — this is dispersion, the separation of waves by frequency that produces the organised swell we see arriving at beaches. In shallow water, all waves travel at the same speed regardless of wavelength — waves become non-dispersive.

As a wave enters shallow water, it must conserve energy flux (energy per unit time crossing a unit width of coastline). Since the group velocity (the speed at which energy travels) decreases in shallow water, wave height must increase — shoaling. Eventually, the wave becomes geometrically unstable and breaks.


3. Building the Mathematical Model

3.1 The Linear Wave Dispersion Relation

For a small-amplitude sinusoidal wave with angular frequency $\omega = 2\pi/T$ [rad s⁻¹] (where $T$ is the wave period) and wavenumber $k = 2\pi/L$ [rad m⁻¹] (where $L$ is wavelength), the governing equations of fluid mechanics (continuity + Euler equations with linearised free surface boundary conditions) yield the dispersion relation:

\[\omega^2 = gk \tanh(kh)\]

This is the fundamental result of linear wave theory. Let us understand it in its limiting cases.

Deep water ($kh \gg 1$, typically $h > L/2$): $\tanh(kh) \to 1$, so:

\[\omega^2 = gk \implies C = \frac{\omega}{k} = \sqrt{\frac{g}{k}} = \frac{gT}{2\pi}\]

Phase velocity increases with period: a 15-second swell travels at $C = 9.81 \times 15 / (2\pi) = 23.4$ m s⁻¹ = 84 km hr⁻¹; a 5-second wind chop travels at 7.8 m s⁻¹. Long-period swells outrun short-period waves — the dispersion that organises storm-generated chaos into the clean swell that arrives at a beach days later.

Shallow water ($kh \ll 1$, typically $h < L/20$): $\tanh(kh) \approx kh$, so:

\[\omega^2 = gk \cdot kh = gk^2 h \implies C = \sqrt{gh}\]

Phase velocity depends only on depth, not on wavelength. All shallow-water waves travel at the same speed — a tsunami in 4000 m deep ocean travels at $\sqrt{9.81 \times 4000} = 198$ m s⁻¹ = 713 km hr⁻¹.

Intermediate water (most surf zone conditions): $\tanh(kh)$ must be evaluated numerically. Given $T$ and $h$, we must solve $\omega^2 = gk\tanh(kh)$ iteratively for $k$ (and hence $L = 2\pi/k$).

3.2 Solving the Dispersion Relation: Iteration

Given wave period $T$ and water depth $h$, we want to find $k$. Rewrite the dispersion relation as:

\[k = \frac{\omega^2}{g \tanh(kh)}\]

This is an implicit equation in $k$. We solve by iteration:

  1. Compute deep-water wavenumber as initial guess: $k_0 = \omega^2/g$
  2. Update: $k_{n+1} = \omega^2 / [g \tanh(k_n h)]$
  3. Repeat until $ k_{n+1} - k_n < \varepsilon$

Convergence is rapid — typically 5–10 iterations.

An explicit approximation (Hunt, 1979) avoids iteration and is accurate to better than 0.1%:

\[kh \approx \frac{y + y^2(1 + y(1 + y(0.666 + 0.445y)))}{1 + 0.444y^2}^{-1}\]

Wait — a simpler and more commonly used Hunt approximation:

\[kh = y_0 \left[1 + y_0^2 \frac{a_1 + a_2 y_0^2}{1 + a_3 y_0^2 + a_4 y_0^4}\right]^{1/2}\]

where $y_0 = \omega\sqrt{h/g}$ is a dimensionless depth parameter. For our purposes, iteration is cleaner and more transparent.

3.3 Group Velocity and Energy Flux

Individual wave crests travel at the phase velocity $C = \omega/k$. However, wave energy propagates at the group velocity:

\[C_g = \frac{\partial \omega}{\partial k} = C \cdot n\]

where:

\[n = \frac{1}{2}\left[1 + \frac{2kh}{\sinh(2kh)}\right]\]

In deep water: $n \to 1/2$, so $C_g = C/2$. Energy travels at half the phase speed. This is why a group of waves has a leading edge that appears to move at $C_g$ — new waves form at the back of the group, travel through it at $C$, and vanish at the front.

In shallow water: $n \to 1$, so $C_g = C = \sqrt{gh}$. Phase and group velocity coincide — the entire wave profile advances together.

The energy flux (wave power per unit width of crest):

\[P = E C_g = \frac{1}{8}\rho_f g H^2 C_g\]

where $E = \frac{1}{8}\rho_f g H^2$ [J m⁻²] is the wave energy density and $H$ is wave height (trough to crest).

3.4 Wave Shoaling

As a wave propagates from deep water (subscript 0) to depth $h$, energy flux is conserved (ignoring dissipation):

\[P_0 = P \implies E_0 C_{g0} = E C_g\] \[\frac{1}{8}\rho_f g H_0^2 C_{g0} = \frac{1}{8}\rho_f g H^2 C_g\]

Solving for the shoaled wave height:

\[H = H_0 \sqrt{\frac{C_{g0}}{C_g}} = H_0 K_s\]

The shoaling coefficient $K_s$:

\[K_s = \sqrt{\frac{C_{g0}}{C_g}} = \sqrt{\frac{C_0/2}{C \cdot n}}\]

In deep water: $C_{g0} = C_0/2$. As the wave enters intermediate and shallow water, $C_g$ first decreases (causing $K_s > 1$ and height increase) and then stabilises in shallow water.

For a 10-second wave ($T = 10$ s) with $H_0 = 1.5$ m in deep water, shoaling to $h = 5$ m:

  • Deep-water: $C_0 = gT/2\pi = 15.6$ m s⁻¹, $C_{g0} = 7.80$ m s⁻¹
  • At $h = 5$ m: iterate dispersion relation → $L \approx 61$ m, $C \approx 6.1$ m s⁻¹, $n \approx 0.83$, $C_g = 5.07$ m s⁻¹
  • $K_s = \sqrt{7.80/5.07} = 1.24$
  • $H = 1.5 \times 1.24 = 1.86$ m

The wave has grown by 24% as it shoaled from deep water to 5 m depth.

3.5 Wave Breaking Criteria

A wave breaks when it becomes geometrically unstable — when the fluid velocity at the crest exceeds the phase velocity. For periodic waves in water of depth $h$, the breaking criterion is approximately:

\[\frac{H_b}{h_b} \approx \gamma_b\]

where $\gamma_b$ is the breaking index, typically $\gamma_b = 0.78$ for spilling breakers on gentle slopes. So:

\[H_b \approx 0.78 \, h_b\]

More precisely, Battjes and Janssen (1978) use a slope-dependent breaker index:

\[\gamma_b = 0.5 + 0.4 \tanh(33 m_0)\]

where $m_0$ is the beach slope [m m⁻¹]. On a very gentle slope ($m_0 \to 0$): $\gamma_b \to 0.5$. On a steep slope ($m_0 > 0.1$): $\gamma_b \to 0.9$.

Breaking depth from deep water: Given deep-water wave height $H_0$ and period $T$, we can estimate the breaking depth by iterating: shoal the wave from deep water until $H = 0.78 h$. Combining the shoaling and breaking conditions:

\[H_0 K_s(h_b) = 0.78 h_b\]

This must be solved iteratively for $h_b$: compute $K_s$ at a trial $h_b$, check whether $H_0 K_s = 0.78 h_b$, and adjust.

3.6 Radiation Stress and Wave Setup

When waves break, they transfer momentum to the water column. This momentum flux is called the radiation stress $S_{xx}$ [N m⁻¹]:

\[S_{xx} = E\left(n\left(1 + \cos^2\theta\right) - \frac{1}{2}\right)\]

where $\theta$ is the wave angle relative to the shore-normal. For normally incident waves ($\theta = 0$):

\[S_{xx} = E\left(2n - \frac{1}{2}\right)\]

As waves break and $E$ decreases shoreward, the gradient of $S_{xx}$ must be balanced by a pressure gradient in the water column. This produces a wave setup — a rise in mean water level within the surf zone:

\[\frac{d\bar{\eta}}{dx} = -\frac{1}{\rho_f g (h + \bar{\eta})} \frac{dS_{xx}}{dx}\]

where $\bar{\eta}$ [m] is the mean water surface elevation above the still-water level. The setup height at the shoreline is typically 10–20% of the offshore wave height — significant for storm surge modelling and coastal flooding assessments.


4. Worked Example by Hand

Setting: A 12-second swell ($T = 12$ s, $H_0 = 2.0$ m) approaches a beach from deep water. Find wavelength and phase velocity at depth $h = 8$ m, the shoaling coefficient, and the breaking depth.

Step 1: Deep-water wave properties

\[\omega = 2\pi/T = 2\pi/12 = 0.5236 \text{ rad s}^{-1}\] \[k_0 = \omega^2/g = (0.5236)^2/9.81 = 0.2742/9.81 = 0.02795 \text{ rad m}^{-1}\] \[L_0 = 2\pi/k_0 = 224.7 \text{ m}, \quad C_0 = g T/(2\pi) = 9.81 \times 12/6.283 = 18.74 \text{ m s}^{-1}\] \[C_{g0} = C_0/2 = 9.37 \text{ m s}^{-1}\]

Step 2: Iterative dispersion solution at h = 8 m

Initial guess: $k_1 = k_0 = 0.02795$

Iteration 1: $k_1 h = 0.02795 \times 8 = 0.2236$

$\tanh(0.2236) = 0.2206$

$k_2 = 0.2742 / (9.81 \times 0.2206) = 0.2742/2.164 = 0.1267$

Iteration 2: $k_2 h = 0.1267 \times 8 = 1.0136$

$\tanh(1.0136) = 0.7638$

$k_3 = 0.2742/(9.81 \times 0.7638) = 0.2742/7.493 = 0.03659$

Iteration 3: $k_3 h = 0.2927$; $\tanh(0.2927) = 0.2847$; $k_4 = 0.2742/(9.81 \times 0.2847) = 0.09820$

(continuing to convergence after ~8 iterations)…

Converged value: $k \approx 0.0609$ rad m⁻¹

\[L = 2\pi/k = 103.2 \text{ m}, \quad C = \omega/k = 0.5236/0.0609 = 8.60 \text{ m s}^{-1}\]

Step 3: Group velocity at h = 8 m

\[kh = 0.0609 \times 8 = 0.487, \quad \sinh(2kh) = \sinh(0.975) = 1.173\] \[n = \frac{1}{2}\left[1 + \frac{0.975}{1.173}\right] = \frac{1}{2}(1 + 0.831) = 0.916\] \[C_g = 0.916 \times 8.60 = 7.88 \text{ m s}^{-1}\]

Step 4: Shoaling coefficient

\[K_s = \sqrt{C_{g0}/C_g} = \sqrt{9.37/7.88} = \sqrt{1.189} = 1.090\] \[H(h=8) = 2.0 \times 1.090 = 2.18 \text{ m}\]

Step 5: Breaking depth (trial at $h_b = 2.8$ m)

At $h = 2.8$ m, shallow-water approximation: $C_g \approx \sqrt{9.81 \times 2.8} = 5.24$ m s⁻¹

$K_s = \sqrt{9.37/5.24} \times (\text{correction}) \approx 1.34$ (from full iteration)

$H_b = 2.0 \times 1.34 = 2.68$ m; Breaking criterion: $H_b/h_b = 2.68/2.8 = 0.957 > 0.78$

Try $h_b = 3.5$ m: $K_s \approx 1.25$, $H_b = 2.50$ m; ratio = $2.50/3.5 = 0.71 < 0.78$

Breaking depth is between 2.8 and 3.5 m — approximately $h_b \approx 3.1$ m. At this depth, $H_b \approx 0.78 \times 3.1 = 2.42$ m.


5. Computational Implementation

function dispersion(T, h, tol=1e-6):
    omega = 2*pi/T
    k = omega^2 / g          # deep-water initial guess
    for i in range(100):
        k_new = omega^2 / (g * tanh(k*h))
        if |k_new - k| < tol: break
        k = k_new
    return k

function shoaling_coefficient(T, h):
    k = dispersion(T, h)
    C  = (2*pi/T) / k
    n  = 0.5 * (1 + 2*k*h / sinh(2*k*h))
    Cg = n * C
    C0 = g*T/(2*pi)
    Cg0 = C0/2
    return sqrt(Cg0/Cg)

function breaking_depth(T, H0, gamma=0.78):
    h_try = linspace(0.5, 20, 500)
    for h in h_try:
        Ks = shoaling_coefficient(T, h)
        H  = H0 * Ks
        if H/h >= gamma: return h, H
    return None
import numpy as np

g = 9.81

def dispersion(T, h, tol=1e-8):
    omega = 2 * np.pi / T
    k = omega**2 / g
    for _ in range(200):
        k_new = omega**2 / (g * np.tanh(k * h))
        if abs(k_new - k) < tol:
            return k_new
        k = k_new
    return k

def wave_params(T, h):
    omega = 2 * np.pi / T
    k = dispersion(T, h)
    C = omega / k
    n = 0.5 * (1 + 2*k*h / np.sinh(2*k*h))
    Cg = n * C
    C0 = g * T / (2 * np.pi)
    Ks = np.sqrt((C0/2) / Cg)
    return {"k": k, "L": 2*np.pi/k, "C": C, "Cg": Cg, "n": n, "Ks": Ks}

T, H0 = 12.0, 2.0
p8 = wave_params(T, 8)
print(f"At h=8m:  L={p8['L']:.1f}m  C={p8['C']:.2f}m/s  Cg={p8['Cg']:.2f}m/s  Ks={p8['Ks']:.3f}")
print(f"  Shoaled height: {H0 * p8['Ks']:.2f} m")

# Find breaking depth
for h in np.linspace(1.0, 15.0, 500):
    Ks = wave_params(T, h)['Ks']
    H = H0 * Ks
    if H / h >= 0.78:
        print(f"Breaking at h_b ≈ {h:.2f} m, H_b ≈ {H:.2f} m")
        break

6. Visualization

Wave height is nearly constant in deep water (right side of plot), then rises as the wave shoals onto the shelf, reaches a maximum near breaking depth, and at $h_b \approx 3.1$ m the wave breaks. Group velocity decreases monotonically as depth decreases — this is the shoaling mechanism.


7. Interpretation

The dispersion relation encodes the full physics of surface gravity waves. Its two limiting cases — deep water (dispersive, $C \propto T$) and shallow water (non-dispersive, $C = \sqrt{gh}$) — bracket the behaviour of all real coastal waves.

The shoaling process produces a counterintuitive result: waves grow taller as the water gets shallower, even though the water itself is slowing them down. The energy must go somewhere — with group velocity decreasing, wave height increases to conserve energy flux. This is why exposed headlands and offshore shoals produce locally elevated wave heights that can exceed the offshore swell height by 50–100%.

Wave setup — the radiation stress-driven rise in mean sea level within the surf zone — adds to tide and storm surge during coastal storms. A 3 m offshore significant wave height can produce 30–50 cm of wave setup at the shoreline, comparable in magnitude to the storm tide contribution from wind-driven surge. These two phenomena together set the total water level that determines whether a coastal flood occurs.


8. What Could Go Wrong?

Linear theory assumes small amplitude. The derivation requires wave height much smaller than both wavelength and water depth. In the surf zone, where $H/h \approx 0.78$ and waves are steep and asymmetric, the linear assumption breaks down badly. Nonlinear theories (Stokes waves, cnoidal waves) are needed for breaking zone dynamics.

Flat-bottom assumption. The energy flux conservation equation ignores bottom friction and assumes gradual depth change (slowly varying medium approximation). On a steep beach or over a sharp reef, energy dissipation and wave reflection become significant and must be included explicitly.

Normal incidence only. The shoaling derivation assumes waves approach the coast at right angles. In reality, waves approach at angles and undergo refraction — bending of the wave crests as different parts of the wave feel different depths. Refraction concentrates energy on headlands and disperses it in bays, explaining the systematic pattern of erosion and deposition in embayed coastlines.

Monochromatic waves. Real ocean waves are not single-period sinusoids — they are spectral, with energy distributed across a range of frequencies. Spectral wave models (SWAN, WAVEWATCH III) apply the dispersion relation to each frequency component separately and sum the energy.


9. Summary

Linear wave theory gives us the dispersion relation $\omega^2 = gk\tanh(kh)$, which determines wave speed, wavelength, and group velocity as functions of period and depth. In deep water, waves are dispersive — long periods travel faster, organising storm-generated chaos into clean swell. In shallow water, all waves travel at $\sqrt{gh}$ regardless of period.

As waves shoal, energy flux conservation requires height to increase as group velocity decreases — the shoaling coefficient $K_s = \sqrt{C_{g0}/C_g}$. When wave height reaches approximately 78% of the water depth, the wave breaks, transferring momentum to the water column via radiation stress. The resulting wave setup raises mean water levels in the surf zone by a fraction of the offshore wave height.

Key equations:

\[\omega^2 = gk\tanh(kh) \quad \text{[dispersion relation]}\] \[C = \frac{\omega}{k}, \quad C_g = \frac{1}{2}\left[1 + \frac{2kh}{\sinh(2kh)}\right]C \quad \text{[phase and group velocity]}\] \[K_s = \sqrt{\frac{C_{g0}}{C_g}}, \quad H = H_0 K_s \quad \text{[shoaling]}\] \[H_b \approx 0.78 \, h_b \quad \text{[breaking criterion]}\]

Math Refresher

Hyperbolic functions. The dispersion relation uses $\tanh(kh) = \sinh(kh)/\cosh(kh)$, where $\sinh(x) = (e^x - e^{-x})/2$ and $\cosh(x) = (e^x + e^{-x})/2$. For small $x$: $\tanh(x) \approx x$ (shallow-water limit). For large $x$: $\tanh(x) \to 1$ (deep-water limit). The transition between these limits occurs around $kh \approx 1$, which is the intermediate-depth regime where neither approximation is valid.

Energy and energy density. Wave energy density $E = \frac{1}{8}\rho g H^2$ has units J m⁻² — energy per unit area of sea surface. To get energy flux [W m⁻¹ = J s⁻¹ m⁻¹], multiply by group velocity: $P = E C_g$. This is the rate at which energy crosses a line of unit length parallel to the wave crest. Conserving this flux as the wave shoals (setting $P_{\text{offshore}} = P_{\text{inshore}}$) gives the shoaling equation.

Iterative solution. The dispersion relation cannot be inverted analytically to give $k$ as a function of $\omega$ and $h$ — this is why we must iterate. The iteration $k_{n+1} = \omega^2/(g\tanh(k_n h))$ is a fixed-point iteration; it converges because the function $f(k) = \omega^2/(g\tanh(kh))$ is a contraction in the neighbourhood of the solution. Starting from the deep-water estimate $k_0 = \omega^2/g$ gives convergence in 5–15 steps for any realistic combination of $T$ and $h$.

References