7.4 Tidal Patterns

Real tides are complex combinations of many harmonics. Geography, basin shape, and resonance create diverse tidal patterns around the world, from nearly tideless to extreme 16m ranges.

Tidal Types

Semidiurnal

Two high/low tides per day of similar height. Atlantic coast. Period ~12.42 hr.

Diurnal

One high/low tide per day. Gulf of Mexico. Period ~24 hr.

Mixed

Two unequal high/low tides per day. US Pacific coast. Most common globally.

Tidal Constituents

Tides are decomposed into harmonic constituents (like Fourier analysis):

M₂ (Principal Lunar)

Period: 12.42 hr. Largest component. ~45% of tidal range.

S₂ (Principal Solar)

Period: 12.00 hr. ~20% of M₂. Causes spring/neap.

K₁ (Luni-solar Diurnal)

Period: 23.93 hr. Largest diurnal. ~42% of M₂.

O₁ (Principal Lunar Diurnal)

Period: 25.82 hr. ~32% of M₂.

Extreme Tides

Bay of Fundy

16+ m range! Resonance with M₂ period. Funnel shape amplifies.

Bristol Channel

14 m range. Second largest. Funnel geometry.

Mediterranean

<1 m range. Semi-enclosed. Near amphidromic point.

Gulf of Mexico

~0.5 m range. Diurnal type. Semi-enclosed basin.

Python: Tidal Prediction

#!/usr/bin/env python3
"""tidal_patterns.py - Harmonic tidal prediction"""
import numpy as np
import matplotlib.pyplot as plt

def tidal_prediction(t, constituents):
    """
    Predict tide height from harmonic constituents
    t: time in hours
    constituents: list of (amplitude, period, phase)
    """
    eta = 0
    for A, T, phi in constituents:
        omega = 2 * np.pi / T  # rad/hr
        eta += A * np.cos(omega * t - phi)
    return eta

# Major tidal constituents (simplified)
# (amplitude in m, period in hr, phase in rad)
constituents_semidiurnal = [
    (1.0, 12.42, 0),    # M2
    (0.46, 12.00, 0.5), # S2
    (0.19, 12.66, 0.2), # N2
]

constituents_mixed = [
    (0.8, 12.42, 0),    # M2
    (0.37, 12.00, 0.5), # S2
    (0.5, 23.93, 0.3),  # K1
    (0.4, 25.82, 0.1),  # O1
]

# Time: 30 days in hours
t = np.linspace(0, 30*24, 1000)

# Calculate tides
eta_semi = tidal_prediction(t, constituents_semidiurnal)
eta_mixed = tidal_prediction(t, constituents_mixed)

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True)

ax1.plot(t/24, eta_semi, 'b-')
ax1.set_ylabel('Height (m)')
ax1.set_title('Semidiurnal Tide (Atlantic Type)')
ax1.grid(True, alpha=0.3)

ax2.plot(t/24, eta_mixed, 'g-')
ax2.set_xlabel('Time (days)')
ax2.set_ylabel('Height (m)')
ax2.set_title('Mixed Tide (Pacific Type)')
ax2.grid(True, alpha=0.3)

plt.tight_layout()