Nitrogen Cycle Kinetics: Nitrification, Denitrification, and Organic N Hydrolysis
QUAL2K models nitrogen using three state variables, following EPA nutrient criteria for rivers and streams: Organic N (index 5), Ammonium NH₄ (index 6), and Nitrate NO₃ (index 7). These interact through hydrolysis, nitrification, denitrification, and settling. Nitrification is a major oxygen sink in the dissolved oxygen balance, while phosphorus dynamics are covered in the Phosphorus Cycle page.
Nitrogen Cycle Diagram
Organic Nitrogen
Organic nitrogen (particulate and dissolved) undergoes hydrolysis to release ammonium and settling to remove particles:
Where:
- — organic N hydrolysis rate (day⁻¹), typically 0.02–0.4
- — organic N settling velocity (m/d), typically 0.001–0.1
- — stream depth (m)
Ammonium (NH₄)
Ammonium is produced by organic N hydrolysis and consumed by nitrification:
Where:
- — nitrification rate (day⁻¹), typically 0.1–1.0
Nitrate (NO₃)
Nitrate is produced by nitrification and consumed by denitrification:
Where is the denitrification rate (day⁻¹), typically 0.0–0.5.
Denitrification occurs primarily in anoxic zones (DO < 2 mg/L) where facultative bacteria use NO₃ as an electron acceptor instead of O₂.
Typical Nitrogen Rate Constants
Nitrogen-related rate constants at 20°C
| Parameter | Symbol | Range | θ | Units |
|---|---|---|---|---|
| Organic N hydrolysis | khn | 0.02 – 0.40 | 1.047 | day⁻¹ |
| Organic N settling | von | 0.001 – 0.10 | — | m/d |
| Nitrification | kn | 0.10 – 1.00 | 1.083 | day⁻¹ |
| Denitrification | ki | 0.00 – 0.50 | 1.047 | day⁻¹ |
| O₂:N ratio | ron | 4.57 (fixed) | — | mg O₂ / mg N |
Python Implementation
# Organic N: hydrolysis + settling
khn = temp_correction(rates.get('khn', 0.02), 1.047, temp)
von = rates.get('von', 0)
loss_on = khn + (von / max(h, 0.01))
orgn_hydrolyzed = khn * conc[5] * dt
conc[5] *= math.exp(-loss_on * dt)
# NH4: gains from hydrolysis, loses to nitrification
kn = temp_correction(rates.get('kn', 0.1), 1.083, temp)
conc[6] += orgn_hydrolyzed # source from Org-N
conc[6] *= math.exp(-kn * dt) # nitrification sink
# NO3: gains from nitrification, loses to denitrification
ki = temp_correction(rates.get('ki', 0.0), 1.047, temp)
nh4_nitrified = kn * conc[6] * dt
conc[7] += nh4_nitrified # source from NH4
conc[7] *= math.exp(-ki * dt) # denitrification sink