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")