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