10.2 In-Situ Measurements
In-situ (on-site) measurements provide direct ocean observations. From traditional CTD casts to modern Argo floats, these measurements are essential for calibrating satellites and understanding ocean interior.
Traditional Methods
CTD
Conductivity-Temperature-Depth. Standard research tool. Profiles to 6000m. Additional sensors: oxygen, fluorescence.
Water Samples
Niskin bottles on rosette. Chemistry: nutrients, CO₂, isotopes. Biology: DNA, chlorophyll.
Current Meters
Mechanical or acoustic. Moorings for time series. ADCP profiles velocity vs depth.
The Argo Program
Revolutionary global array of ~4000 profiling floats. Autonomous. Cycles every 10 days: surface → 2000m → surface (transmits via satellite).
~4000
Active floats
2000 m
Profile depth
10 days
Cycle time
Extensions: Deep Argo (6000m), BGC-Argo (biogeochemistry), OneArgo (unified global array).
Moorings & Observatories
TAO/TRITON
Tropical mooring array. ENSO monitoring. Real-time data.
OOI
Ocean Observatories Initiative. US cabled and uncabled arrays.
RAPID
Atlantic meridional overturning monitoring at 26°N.
HOT/BATS
Long-term time series stations. Hawaii, Bermuda. 30+ years data.
Python: CTD Profile
#!/usr/bin/env python3
"""in_situ.py - CTD profile analysis"""
import numpy as np
import matplotlib.pyplot as plt
def synthetic_ctd(z, T_surface=25, T_deep=2, thermocline_depth=200,
S_surface=35, S_deep=34.7):
"""
Generate synthetic CTD profile
"""
# Temperature profile
T = T_deep + (T_surface - T_deep) * np.exp(-z / thermocline_depth)
# Salinity (subtropical - salinity maximum)
S = S_surface + 0.5 * np.exp(-((z - 150) / 100)**2) + \
(S_deep - S_surface) * (1 - np.exp(-z / 500))
return T, S
def density(T, S, simplified=True):
"""Simplified density (sigma-t)"""
if simplified:
return (S - 35) * 0.8 - 0.15 * (T - 10)
# Full equation of state would go here
z = np.linspace(0, 2000, 200)
T, S = synthetic_ctd(z)
sigma = density(T, S)
fig, axes = plt.subplots(1, 3, figsize=(12, 6))
axes[0].plot(T, z, 'r-', lw=2)
axes[0].set_xlabel('Temperature (°C)')
axes[0].set_ylabel('Depth (m)')
axes[0].set_title('Temperature')
axes[0].invert_yaxis()
axes[0].grid(True, alpha=0.3)
axes[1].plot(S, z, 'b-', lw=2)
axes[1].set_xlabel('Salinity (PSU)')
axes[1].set_title('Salinity')
axes[1].invert_yaxis()
axes[1].grid(True, alpha=0.3)
axes[2].plot(sigma, z, 'g-', lw=2)
axes[2].set_xlabel('σ-t (kg/m³)')
axes[2].set_title('Density')
axes[2].invert_yaxis()
axes[2].grid(True, alpha=0.3)
plt.tight_layout()
print("Argo program statistics:")
print(" Floats deployed since 1999: >15,000")
print(" Profiles collected: >2,000,000")
print(" Countries involved: >30")