6.4 Eddies & Gyres

Mesoscale eddies are the "weather" of the ocean—rotating parcels of water 50-200 km across that transport heat, salt, nutrients, and marine life. Gyres are the great circular current systems spanning ocean basins.

Mesoscale Eddies

Warm-Core Rings

Anticyclonic. Trap warm water. Form from Gulf Stream meanders. Can persist months.

Cold-Core Rings

Cyclonic. Trap cold, nutrient-rich water. Higher productivity. Important for fisheries.

50-200 km

Typical diameter

weeks-years

Lifetime

~10,000

Active at any time

Subtropical Gyres

\( \beta v = f \frac{\partial w}{\partial z} + \text{curl}(\vec{\tau}/\rho) \)

Sverdrup balance: Wind curl drives gyre circulation

• North Atlantic Gyre (Gulf Stream, N. Atlantic Drift, Canary, N. Equatorial)

• South Atlantic Gyre (Brazil, S. Atlantic, Benguela, S. Equatorial)

• North Pacific Gyre (Kuroshio, N. Pacific, California, N. Equatorial)

• South Pacific Gyre (E. Australia, S. Pacific, Peru, S. Equatorial)

• Indian Ocean Gyre (seasonally reversing due to monsoons)

Western Intensification

Western boundary currents (Gulf Stream, Kuroshio) are narrow, fast, and deep. Eastern currents are broad, slow, and shallow. Caused by variation of Coriolis with latitude (β effect).

Western Boundary

~100 km wide, 2 m/s, 1000m deep

Eastern Boundary

~1000 km wide, 0.1 m/s, 100m deep

Python: Eddy Detection

#!/usr/bin/env python3
"""eddies_gyres.py - Simple eddy model"""
import numpy as np
import matplotlib.pyplot as plt

def gaussian_eddy(x, y, x0, y0, R, amplitude, rotation='cyclonic'):
    """
    Model a mesoscale eddy as Gaussian anomaly
    """
    r = np.sqrt((x - x0)**2 + (y - y0)**2)
    ssh = amplitude * np.exp(-(r / R)**2)
    if rotation == 'cyclonic':
        ssh = -ssh  # Negative SSH anomaly
    return ssh

# Create grid
x = np.linspace(0, 500, 100)  # km
y = np.linspace(0, 500, 100)
X, Y = np.meshgrid(x, y)

# Multiple eddies
ssh = np.zeros_like(X)
# Warm-core (anticyclonic)
ssh += gaussian_eddy(X, Y, 150, 150, 50, 0.3, 'anticyclonic')
# Cold-core (cyclonic)
ssh += gaussian_eddy(X, Y, 350, 300, 40, 0.2, 'cyclonic')

plt.figure(figsize=(10, 8))
plt.contourf(X, Y, ssh, levels=20, cmap='RdBu_r')
plt.colorbar(label='SSH anomaly (m)')
plt.contour(X, Y, ssh, levels=[0], colors='black')
plt.xlabel('x (km)'); plt.ylabel('y (km)')
plt.title('Mesoscale Eddies: SSH Signature')

# Statistics
print("Eddy kinetic energy estimates:")
print("  Gulf Stream region: ~500 cm²/s²")
print("  Open ocean: ~50-100 cm²/s²")
print("  Eddies contain ~90% of ocean kinetic energy!")