8.2 El Niño & La Niña
ENSO (El Niño-Southern Oscillation) is the dominant mode of interannual climate variability. It affects global weather patterns, fisheries, agriculture, and extreme events worldwide.
ENSO Phases
El Niño (Warm Phase)
Weakened trade winds. Warm water spreads eastward. Suppressed upwelling off Peru. Global teleconnections.
La Niña (Cold Phase)
Enhanced trade winds. Cold water pushed westward. Strong upwelling. Enhanced Walker circulation.
Neutral
Normal conditions. Walker circulation present but not extreme.
Bjerknes Feedback
Positive feedback loop:
Warm SST east → weak trades → less upwelling → warmer east → weaker trades...
This coupled ocean-atmosphere instability drives ENSO oscillations. Delayed negative feedback from equatorial waves causes oscillation back.
Global Impacts
El Niño Effects
- • Floods in Peru/Ecuador
- • Droughts in Australia/Indonesia
- • Weaker Atlantic hurricanes
- • Warmer winters in N. America
La Niña Effects
- • Droughts in S. America
- • Floods in Australia
- • More Atlantic hurricanes
- • Colder winters in N. America
Python: ENSO Index
#!/usr/bin/env python3
"""el_nino.py - Simple ENSO oscillator model"""
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def enso_model(y, t, c=1, d=0.5, e=0.1, f=0.5):
"""
Simple delayed oscillator model for ENSO
T: SST anomaly, h: thermocline depth anomaly
"""
T, h = y
# Bjerknes feedback (positive)
# Delayed thermocline feedback (negative)
dT = c * T - d * h
dh = e * T - f * h
return [dT, dh]
# Solve
y0 = [1.0, 0.0] # Initial warm anomaly
t = np.linspace(0, 50, 500)
sol = odeint(enso_model, y0, t)
T_anomaly = sol[:, 0]
h_anomaly = sol[:, 1]
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(t, T_anomaly, 'r-', lw=2)
plt.axhline(0.5, color='orange', linestyle='--', alpha=0.5, label='El Niño threshold')
plt.axhline(-0.5, color='blue', linestyle='--', alpha=0.5, label='La Niña threshold')
plt.ylabel('SST Anomaly (K)')
plt.title('ENSO Oscillation (Simplified Model)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.subplot(2, 1, 2)
plt.plot(t, h_anomaly, 'b-', lw=2)
plt.xlabel('Time (years)')
plt.ylabel('Thermocline Anomaly (m)')
plt.grid(True, alpha=0.3)
plt.tight_layout()
# ENSO statistics
print("ENSO Facts:")
print(" Period: 2-7 years (irregular)")
print(" Definition: Niño 3.4 SST anomaly > ±0.5°C for 5+ months")
print(" Strong events: 1982-83, 1997-98, 2015-16")