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