8.4 Sea Level Rise

Global sea level is rising at an accelerating rate due to thermal expansion and ice sheet/glacier melt. This threatens hundreds of millions of people in low-lying coastal areas worldwide.

Contributors to Sea Level Rise

Thermal Expansion

~1.3 mm/yr. Water expands as temperature increases. ~40% of recent rise.

Glacier Melt

~0.8 mm/yr. Mountain glaciers worldwide. Accelerating losses.

Greenland Ice Sheet

~0.7 mm/yr. Contains 7.4m SLR potential. Surface melt + calving.

Antarctic Ice Sheet

~0.4 mm/yr. Contains 58m SLR potential. Marine instability concerns.

Current Rate & Projections

~3.4 mm/yr

Current rate (satellite)

~20 cm

Rise since 1900

0.3-1.1 m

By 2100 (IPCC range)

Rate has doubled since 1993. Acceleration observed: ~0.1 mm/yr².

Regional Variation

Not Uniform!

Sea level rise varies by location: currents, winds, land motion, gravitational changes from ice loss.

Hot Spots

Western Pacific: 3× global average. US East Coast: accelerated rise.

Python: SLR Projections

#!/usr/bin/env python3
"""sea_level_rise.py - Sea level projections"""
import numpy as np
import matplotlib.pyplot as plt

def slr_projection(years, scenario='rcp45'):
    """
    Simplified sea level rise projections (relative to 2000)
    Based on IPCC AR6 scenarios
    """
    t = years - 2000

    if scenario == 'rcp26':
        # Low emissions
        slr = 0.3 * t + 0.005 * t**2
    elif scenario == 'rcp45':
        # Intermediate
        slr = 0.32 * t + 0.008 * t**2
    elif scenario == 'rcp85':
        # High emissions
        slr = 0.35 * t + 0.015 * t**2
    else:
        raise ValueError("Unknown scenario")

    return slr / 100  # Convert to meters

years = np.arange(2000, 2151)

scenarios = ['rcp26', 'rcp45', 'rcp85']
colors = ['green', 'orange', 'red']
labels = ['Low emissions', 'Intermediate', 'High emissions']

plt.figure(figsize=(10, 6))

for scen, color, label in zip(scenarios, colors, labels):
    slr = slr_projection(years, scen)
    plt.plot(years, slr * 100, color=color, lw=2, label=label)
    plt.fill_between(years, slr * 80, slr * 120, color=color, alpha=0.2)

plt.xlabel('Year')
plt.ylabel('Sea Level Rise (cm)')
plt.title('Sea Level Rise Projections')
plt.legend()
plt.grid(True, alpha=0.3)
plt.xlim(2000, 2150)

plt.tight_layout()

print("By 2100 relative to 2000:")
for scen, label in zip(scenarios, labels):
    slr_2100 = slr_projection(np.array([2100]), scen)[0] * 100
    print(f"  {label}: ~{slr_2100:.0f} cm")