Balance de Oxígeno Disuelto: la Curva de Depresión y sus Fuentes y Sumideros
El oxígeno disuelto es el indicador que mejor resume el estado de un río, porque casi todo lo que ocurre en el cauce termina reflejándose en él. En esta página se desarrolla el término central del modelo, la ecuación de reaireación de oxígeno disuelto, y su papel en la modelación de la curva de depresión de oxígeno a lo largo del perfil longitudinal bajo carga contaminante.
Ecuación Diferencial del Balance de Oxígeno
La tasa de cambio del oxígeno disuelto a lo largo del recorrido del agua se expresa así:
Interpretación Término por Término
| Término | Expresión | Efecto sobre el OD | Magnitud Típica Fluvial |
|---|---|---|---|
| Reaireación atmosférica | ka · (DOsat − DO) | Aporte (+) cuando el OD está por debajo de la saturación | 1–10 mg/L/d |
| Oxidación de la DBO rápida | kdc · CBODf | Consumo (−) por oxidación de la materia orgánica lábil | 0.5–5 mg/L/d |
| Oxidación de la DBO lenta | kdcs · CBODs | Consumo (−) sostenido por la fracción refractaria | 0.01–0.5 mg/L/d |
| Demanda nitrogenada | ron · kn · NH₄ | Consumo (−) por la oxidación bacteriana del amonio | 0.5–3 mg/L/d |
| Demanda de oxígeno del sedimento | SOD / H | Consumo (−) que el lecho ejerce sobre la columna de agua | 0.5–5 mg/L/d |
La Curva de Depresión de Oxígeno (DO Sag Curve)
El perfil de oxígeno disuelto en un río después de una descarga de aguas residuales se conoce como la curva de depresión de oxígeno. Esta curva muestra cómo el OD cae hasta un punto crítico para luego recuperarse mediante la reaireación natural:
Demanda de Oxígeno Nitrogenada (NOD)
El amonio presente en el agua consume oxígeno cuando las bacterias nitrificantes lo oxidan y lo transforman en nitrato:
La estequiometría de esa reacción fija la relación: mg de O₂ por cada 1 mg de NH₄-N oxidado. Por eso las cargas de nitrógeno de origen agroindustrial pesan tanto en el balance de oxígeno.
Demanda de Oxígeno del Sedimento (SOD)
La SOD es la tasa a la que el lecho consume oxígeno de la columna de agua que está en contacto con él, producto de la descomposición anaerobia de la materia orgánica depositada en el fondo. Se expresa como un flujo por unidad de área (gr O₂ por mt² por día) y se convierte a una tasa volumétrica dividiéndola por la profundidad del tramo:
Tasas de SOD típicas según el sustrato del lecho
| Tipo de Sustrato | SOD (g/m²/día) | Escenario Típico |
|---|---|---|
| Lecho de grava o roca en cuenca alta | 0.2 – 1.0 | Cauce sin contaminación ni acumulación de lodos |
| Lecho aluvial de limo y arcilla | 1.0 – 2.0 | Enriquecimiento de nutrientes incipiente |
| Manto de lodo orgánico blando | 2.0 – 5.0 | Aguas abajo de una PTAR municipal activa |
| Lodo con material industrial en descomposición | 5.0 – 10.0 | Zonas anaerobias por descargas de industria |
| Sedimento urbano de canal o estuario | 2.0 – 10.0 | Ríos que reciben alcantarillado sin tratar |
Saturación de Oxígeno a Nivel del Mar
Valores de OD de saturación a 0 M.S.N.M y 1 Atm
| Temperatura (°C) | OD sat (mg/L) | Temperatura (°C) | OD sat (mg/L) | Temperatura (°C) | OD sat (mg/L) |
|---|---|---|---|---|---|
| 0 | 14.62 | 10 | 11.29 | 20 | 9.09 |
| 2 | 13.84 | 12 | 10.78 | 22 | 8.74 |
| 4 | 13.13 | 14 | 10.31 | 24 | 8.42 |
| 6 | 12.48 | 16 | 9.87 | 26 | 8.11 |
| 8 | 11.87 | 18 | 9.47 | 28 | 7.83 |
Implementación en el Motor Python
def calculate_do_balance(do_in, cbod_fast, cbod_slow, nh4, rates, reach, temp, dt):
ka = reach.get('ka', 0)
ka_t = temp_correction(ka, 1.024, temp) # Correccion por temperatura
dosat = calculate_dosat(temp, reach.get('elev', 0))
kdc = temp_correction(rates['kdc'], rates.get('kdc_theta', 1.047), temp)
kdcs = temp_correction(rates['kdcs'], rates.get('kdcs_theta', 1.047), temp)
kn = temp_correction(rates.get('kn', 0), rates.get('kn_theta', 1.083), temp)
ron = rates.get('ron', 4.57) # Relacion estequiometrica O2 por N oxidado
sod = reach.get('SOD', 0)
h = reach.get('H', 1.0)
# Aporte de oxigeno desde la atmosfera
reaeration = ka_t * (dosat - do_in) * dt
# Sumideros: oxidacion de la DBO, nitrificacion y demanda del sedimento
cbod_demand_f = kdc * cbod_fast * dt
cbod_demand_s = kdcs * cbod_slow * dt
nod_demand = ron * kn * nh4 * dt
sod_demand = (sod / h) * dt if h > 0 else 0
do_out = do_in + reaeration - cbod_demand_f - cbod_demand_s - nod_demand - sod_demand
return max(do_out, 0.0) # El OD no puede ser negativo