Stream Reaeration Coefficient: Calculation Methods in QUAL2K
Reaeration is the primary source of dissolved oxygen in rivers, and a critical term in the dissolved oxygen balance. It describes the rate at which atmospheric oxygen transfers across the water surface into the stream, as originally characterized by O'Connor and Dobbins (1958). The reaeration coefficient (day⁻¹) governs the first-order rate of oxygen exchange:
where is the dissolved oxygen saturation concentration and is the current DO in the stream.
O'Connor-Dobbins Formula (Default)
QUAL2K uses the O'Connor-Dobbins formula as the default reaeration model. This is the most widely used empirical formula for natural streams:
Where:
- — stream velocity (m/s)
- — stream depth (m)
- — reaeration coefficient at 20°C (day⁻¹)
Alternative Reaeration Formulas
Empirical reaeration formulas
| Formula | Equation | Best For |
|---|---|---|
| O'Connor-Dobbins (1958) | ka = 3.93 · U⁰·⁵ / H¹·⁵ | Deep, slow rivers (H > 0.6 m) |
| Churchill et al. (1962) | ka = 5.026 · U⁰·⁹⁶⁹ / H¹·⁶⁷³ | Large rivers with dams |
| Owens-Gibbs (1964) | ka = 5.32 · U⁰·⁶⁷ / H¹·⁸⁵ | Shallow streams (H < 0.6 m) |
| Tsivoglou-Neal (1976) | ka = 31,183 · U · S | Streams with known slope S |
| User-specified | ka = value | Custom / laboratory-measured rates |
Temperature Correction
All reaeration rates are corrected for temperature using the Arrhenius equation:
where for reaeration (Elmore and West, 1961). At 15°C, the correction factor is , reducing by about 11%.
Dissolved Oxygen Saturation
The DO saturation concentration decreases with temperature and altitude. QUAL2K uses the APHA formula (Standard Methods, 23rd Edition):
where is the absolute temperature in Kelvin. An altitude correction factor is applied:
Physical Mechanism
Python Implementation
# Reaeration ka (1/d) - O'Connor-Dobbins
if h > 0:
ka = 3.93 * (u ** 0.5) / (h ** 1.5)
else:
ka = 0def calculate_dosat(temp, elev):
"""Calculate DO saturation (mg/L) using APHA formula."""
tk = temp + 273.15
ln_dos = (-139.34411 + 1.575701e5/tk
- 6.642308e7/tk**2
+ 1.243800e10/tk**3
- 8.621949e11/tk**4)
dos = math.exp(ln_dos)
# Altitude correction
dos *= (1 - 0.0001148 * elev)
return max(dos, 0.0)