5.5 Coastal Geology
Coasts are dynamic environments where land meets sea. Waves, tides, and currents constantly reshape coastlines through erosion and deposition, creating diverse landforms.
Coastal Landforms
Erosional Features
Sea cliffs, wave-cut platforms, sea stacks, sea caves, arches
Depositional Features
Beaches, spits, bars, barrier islands, tombolos, deltas
Estuaries
Where rivers meet sea. Mixing zone. High biological productivity.
Deltas
River sediment deposition. Nile, Mississippi, Ganges. Rich farmland.
Coastal Processes
Wave Erosion
Hydraulic action, abrasion, corrosion. Concentrated at headlands.
Longshore Drift
Waves approach at angle, transport sediment along coast. Forms spits.
Beach Cycles
Summer: gentle waves build beaches. Winter: storms erode and steepen.
Sea Level Change
Eustatic
Global sea level change (ice sheets, thermal expansion)
Isostatic
Land movement (glacial rebound, subsidence)
Current rate: ~3.4 mm/year rise. Threatens low-lying coasts and islands.
Python: Beach Profile
#!/usr/bin/env python3
"""coastal_geology.py - Beach profile modeling"""
import numpy as np
import matplotlib.pyplot as plt
def dean_profile(x, A=0.1):
"""
Dean equilibrium beach profile
h = A * x^(2/3)
x: distance offshore (m), A: shape parameter
"""
return A * x**(2/3)
def bruun_rule(sea_level_rise, W, h_close, B):
"""
Shoreline retreat due to sea level rise (Bruun Rule)
W: active profile width, h_close: closure depth, B: berm height
"""
retreat = sea_level_rise * W / (h_close + B)
return retreat
# Beach profile
x = np.linspace(0, 500, 100) # offshore distance (m)
h_summer = dean_profile(x, A=0.08) # gentler summer profile
h_winter = dean_profile(x, A=0.12) # steeper winter profile
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.fill_between(x, 0, -h_summer, alpha=0.5, color='yellow', label='Summer')
plt.fill_between(x, 0, -h_winter, alpha=0.5, color='blue', label='Winter')
plt.axhline(0, color='cyan', linewidth=2)
plt.xlabel('Distance Offshore (m)')
plt.ylabel('Depth (m)')
plt.title('Seasonal Beach Profiles')
plt.legend()
# Sea level rise impact
plt.subplot(1, 2, 2)
slr = np.linspace(0, 2, 100) # m
retreat = bruun_rule(slr, W=500, h_close=10, B=2)
plt.plot(slr*100, retreat, 'r-', lw=2)
plt.xlabel('Sea Level Rise (cm)')
plt.ylabel('Shoreline Retreat (m)')
plt.title('Bruun Rule: Retreat vs SLR')
plt.grid(True, alpha=0.3)
plt.tight_layout()