7.1 Wave Dynamics

Ocean waves transfer energy across vast distances. Understanding wave physics—generation, propagation, and breaking—is essential for coastal engineering, shipping, and marine safety.

Wave Properties

\( c = \frac{\lambda}{T} = \frac{gT}{2\pi} \)

Deep water wave speed (dispersive: longer waves travel faster)

Wavelength (λ)

Crest to crest distance. Wind waves: 10-300m. Swell: 100-600m.

Period (T)

Time between crests. Wind waves: 2-10s. Swell: 10-20s.

Height (H)

Trough to crest. Typical: 1-5m. Storm waves: >15m.

Steepness (H/λ)

Max ~1/7 before breaking. Steeper = more energy.

Wave Generation

Wind transfers energy to water through pressure and friction. Wave growth depends on:

Wind Speed

Stronger wind = larger waves. Beaufort scale relates wind to sea state.

Duration

Longer blow time = larger waves (until fully developed).

Fetch

Distance over which wind blows. Longer fetch = larger waves.

Particle Motion

\( \text{Orbital radius} = \frac{H}{2} e^{kz} \)

Circular orbits decrease exponentially with depth

At depth z = λ/2, orbital motion is only 4% of surface value. Wave base = λ/2.

Python: Wave Dispersion

#!/usr/bin/env python3
"""wave_dynamics.py - Ocean wave calculations"""
import numpy as np
import matplotlib.pyplot as plt

g = 9.81  # m/s²

def deep_water_speed(T):
    """Phase speed for deep water waves"""
    return g * T / (2 * np.pi)

def deep_water_wavelength(T):
    """Wavelength for deep water waves"""
    return g * T**2 / (2 * np.pi)

def group_velocity(c):
    """Group velocity = c/2 for deep water"""
    return c / 2

# Wave properties vs period
T = np.linspace(2, 20, 100)
c = deep_water_speed(T)
L = deep_water_wavelength(T)
cg = group_velocity(c)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

ax1.plot(T, c, 'b-', lw=2, label='Phase speed')
ax1.plot(T, cg, 'r--', lw=2, label='Group speed')
ax1.set_xlabel('Period (s)')
ax1.set_ylabel('Speed (m/s)')
ax1.set_title('Wave Speed vs Period')
ax1.legend()
ax1.grid(True, alpha=0.3)

ax2.plot(T, L, 'g-', lw=2)
ax2.set_xlabel('Period (s)')
ax2.set_ylabel('Wavelength (m)')
ax2.set_title('Wavelength vs Period')
ax2.grid(True, alpha=0.3)

plt.tight_layout()

# Example calculation
T_example = 10  # seconds
print(f"10-second wave:")
print(f"  Phase speed: {deep_water_speed(T_example):.1f} m/s")
print(f"  Wavelength: {deep_water_wavelength(T_example):.1f} m")
print(f"  Group speed: {group_velocity(deep_water_speed(T_example)):.1f} m/s")