7.5 Tsunamis
Tsunamis are long-wavelength ocean waves generated by sudden seafloor displacement (earthquakes, landslides, volcanic eruptions). They travel as shallow water waves, amplifying devastatingly at coastlines.
Tsunami Physics
\( c = \sqrt{gH} \)
Shallow water wave speed. At H=4000m: c ≈ 200 m/s (700 km/hr!)
100-500 km
Wavelength
10-60 min
Period
<1 m
Open ocean height
Generation Mechanisms
Subduction Zone Earthquakes
Most common cause. M > 7.5 needed. Vertical seafloor displacement. 2004 Indian Ocean, 2011 Japan.
Submarine Landslides
Can be locally devastating. 1998 Papua New Guinea. Can be triggered by earthquakes.
Volcanic Events
Flank collapse, caldera collapse. 1883 Krakatoa. 2022 Hunga Tonga.
Coastal Amplification
\( H \propto h^{-1/4} \)
Green's Law: Height increases as depth decreases
As tsunami enters shallow water:
- • Speed decreases (c = √gh)
- • Wavelength shortens
- • Height increases (energy conservation)
- • Can reach 10-30m at coast
Python: Tsunami Travel Time
#!/usr/bin/env python3
"""tsunamis.py - Tsunami propagation model"""
import numpy as np
import matplotlib.pyplot as plt
g = 9.81
def tsunami_speed(depth):
"""Shallow water wave speed (m/s)"""
return np.sqrt(g * depth)
def travel_time(distance, depth):
"""Travel time in hours"""
speed = tsunami_speed(depth)
return (distance * 1000) / speed / 3600 # km to m, s to hr
# Ocean depths (typical Pacific profile)
depths = np.array([4000, 3000, 2000, 1000, 500, 100, 10])
speeds = tsunami_speed(depths)
speeds_kmh = speeds * 3.6
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(depths, speeds_kmh, 'b-o', lw=2)
plt.xlabel('Depth (m)')
plt.ylabel('Speed (km/hr)')
plt.title('Tsunami Speed vs Depth')
plt.gca().invert_xaxis()
plt.grid(True, alpha=0.3)
# Travel time across Pacific
distances = np.array([0, 2000, 5000, 8000, 10000]) # km
avg_depth = 4000 # m
times = travel_time(distances, avg_depth)
plt.subplot(1, 2, 2)
plt.plot(distances, times, 'r-o', lw=2)
plt.xlabel('Distance (km)')
plt.ylabel('Travel Time (hours)')
plt.title('Trans-Pacific Tsunami Travel')
plt.grid(True, alpha=0.3)
plt.tight_layout()
# 2011 Japan tsunami
print("2011 Tohoku Tsunami:")
print(f" Generated: M9.0 earthquake")
print(f" Max runup: ~40 m")
print(f" Reached California (~9000 km) in ~10 hours")
print(f" Speed: {tsunami_speed(4000)*3.6:.0f} km/hr")