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