7.6 Coastal Processes

Waves transform dramatically as they approach shore: shoaling, refraction, breaking. These processes shape coastlines, drive sediment transport, and create the surf conditions we experience at beaches.

Wave Transformation

Shoaling

Waves slow in shallow water. Energy conserved โ†’ height increases. H โˆ hโปยน/โด.

Refraction

Waves bend toward shallow water (speed depends on depth). Focus energy on headlands.

Diffraction

Waves bend around obstacles (breakwaters, islands). Spreads energy into shadow zones.

Wave Breaking

\( \frac{H_b}{h_b} \approx 0.78 \)

Waves break when H/h โ‰ˆ 0.78 (McCowan criterion)

Spilling

Gentle slope. Foam cascades down. Long surf zone.

Plunging

Moderate slope. Classic "tube." Best for surfing.

Surging

Steep slope. Wave doesn't break, surges up beach.

Sediment Transport

Longshore Drift

Waves approach at angle. Swash/backwash create zigzag motion. Net transport along coast.

Cross-shore Transport

Onshore/offshore movement. Storm waves move sand offshore. Summer waves rebuild beaches.

Surf Zone Dynamics

Rip Currents

Narrow, fast offshore flow. Dangerous for swimmers. Form at gaps in sandbars.

Longshore Currents

Flow parallel to beach. 0.3-1 m/s typical. Transport sediment and swimmers.

Python: Wave Refraction

#!/usr/bin/env python3
"""coastal_processes.py - Wave refraction model"""
import numpy as np
import matplotlib.pyplot as plt

g = 9.81

def wave_speed(T, h):
    """
    Wave phase speed accounting for depth
    Intermediate water approximation
    """
    L0 = g * T**2 / (2 * np.pi)  # deep water wavelength
    k0 = 2 * np.pi / L0
    # Newton-Raphson for dispersion relation
    k = k0
    for _ in range(10):
        k = k0 / np.tanh(k * h)
    return (2 * np.pi / T) / k

def snells_law(theta_0, c_0, c):
    """Refraction angle from Snell's law"""
    sin_theta = (c / c_0) * np.sin(theta_0)
    sin_theta = np.clip(sin_theta, -1, 1)
    return np.arcsin(sin_theta)

# Approach angle and depth
theta_0 = np.radians(45)  # 45ยฐ initial angle
T = 10  # seconds
depths = np.linspace(100, 1, 50)

# Calculate refraction
c_deep = wave_speed(T, 100)
angles = []
speeds = []

for h in depths:
    c = wave_speed(T, h)
    theta = snells_law(theta_0, c_deep, c)
    angles.append(np.degrees(theta))
    speeds.append(c)

plt.figure(figsize=(12, 5))

plt.subplot(1, 2, 1)
plt.plot(depths, angles, 'b-', lw=2)
plt.xlabel('Depth (m)')
plt.ylabel('Wave Angle (degrees)')
plt.title('Wave Refraction')
plt.gca().invert_xaxis()
plt.grid(True, alpha=0.3)

plt.subplot(1, 2, 2)
plt.plot(depths, speeds, 'g-', lw=2)
plt.xlabel('Depth (m)')
plt.ylabel('Phase Speed (m/s)')
plt.title('Wave Speed vs Depth')
plt.gca().invert_xaxis()
plt.grid(True, alpha=0.3)

plt.tight_layout()

print(f"10s wave approaching at 45ยฐ:")
print(f"  Deep water angle: 45ยฐ")
print(f"  At 10m depth: {angles[-10]:.1f}ยฐ")
print(f"  At 1m depth: {angles[-1]:.1f}ยฐ")