Phosphorus Kinetics: Organic P Hydrolysis and Inorganic P Settling

QUAL2K tracks phosphorus as two state variables, following EPA nutrient criteria for rivers and streams: Organic Phosphorus (index 8) and Inorganic Phosphorus (index 9). Phosphorus is a limiting nutrient for algal growth and a key parameter in eutrophication studies. For the complementary nutrient model, see the Nitrogen Cycle page.

Phosphorus Cycle

Organic Phosphorus

dOrgPdt=khpOrgPvopOrgPH\frac{dOrgP}{dt} = -k_{hp} \cdot OrgP - v_{op} \cdot \frac{OrgP}{H}

Where:

  • khpk_{hp} — organic P hydrolysis rate (day⁻¹), typically 0.01–0.7
  • vopv_{op} — organic P settling velocity (m/d), typically 0.001–0.1

Inorganic Phosphorus

dInorgPdt=khpOrgPvipInorgPH\frac{dInorgP}{dt} = k_{hp} \cdot OrgP - v_{ip} \cdot \frac{InorgP}{H}

Where:

  • vipv_{ip} — inorganic P settling velocity (m/d), typically 0.0–0.05

Typical Phosphorus Rate Constants

Phosphorus-related rate constants at 20°C

ParameterSymbolRangeθUnits
Organic P hydrolysiskhp0.01 – 0.701.047day⁻¹
Organic P settlingvop0.001 – 0.10m/d
Inorganic P settlingvip0.00 – 0.05m/d
P:Chl-a ratiorpa0.5 – 2.0μg P / μg Chl-a

Python Implementation

pythonkinetics.py — Phosphorus cycle
# Organic P: hydrolysis + settling
khp = temp_correction(rates.get('khp', 0.01), 1.047, temp)
vop = rates.get('vop', 0)
loss_op = khp + (vop / max(h, 0.01))
orgp_hydrolyzed = khp * conc[8] * dt
conc[8] *= math.exp(-loss_op * dt)

# Inorganic P: gains from hydrolysis, loses to settling
vip = rates.get('vip', 0)
conc[9] += orgp_hydrolyzed
settling_ip = (vip / max(h, 0.01))
conc[9] *= math.exp(-settling_ip * dt)