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:

dOrgNdt=khnOrgNvonOrgNH\frac{dOrgN}{dt} = -k_{hn} \cdot OrgN - v_{on} \cdot \frac{OrgN}{H}

Where:

  • khnk_{hn} — organic N hydrolysis rate (day⁻¹), typically 0.02–0.4
  • vonv_{on} — organic N settling velocity (m/d), typically 0.001–0.1
  • HH — stream depth (m)

Ammonium (NH₄)

Ammonium is produced by organic N hydrolysis and consumed by nitrification:

dNH4dt=khnOrgNknNH4\frac{dNH_4}{dt} = k_{hn} \cdot OrgN - k_n \cdot NH_4

Where:

  • knk_n — nitrification rate (day⁻¹), typically 0.1–1.0

Nitrate (NO₃)

Nitrate is produced by nitrification and consumed by denitrification:

dNO3dt=knNH4kiNO3\frac{dNO_3}{dt} = k_n \cdot NH_4 - k_i \cdot NO_3

Where kik_i 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

ParameterSymbolRangeθUnits
Organic N hydrolysiskhn0.02 – 0.401.047day⁻¹
Organic N settlingvon0.001 – 0.10m/d
Nitrificationkn0.10 – 1.001.083day⁻¹
Denitrificationki0.00 – 0.501.047day⁻¹
O₂:N ratioron4.57 (fixed)mg O₂ / mg N

Python Implementation

pythonkinetics.py — Nitrogen cycle
# 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