Nota

Historia de EPANET: cómo la EPA convirtió las redes de agua en un motor que aún corre

De QHCSIM (1991) a EPANET 2.2: Rossman, C+Toolkit, interfaz Visual Basic luego Delphi, MSX, OWA y la rama experimental EPANET 3.

Esquema de red de distribución a presión en cian luminoso sobre fondo oscuro, con tanque elevado, nodos y válvulas, estilo AEC Hub.

Una red de agua no es un dibujo de tuberías. Es presión que cambia a las seis de la mañana, un tanque que baja de noche y cloro que se consume mientras el agua viaja. En los noventa la EPA necesitaba un modelo que uniera hidráulica y calidad del agua en el mismo ejecutable. Ese hilo —no un catálogo de botones— es la historia de EPANET.

Por qué EPA

La U.S. Environmental Protection Agency (EPA) necesitaba entender el transporte y el destino de sustancias en redes de distribución de agua potable: cloro residual, edad del agua, trazado de fuentes, contaminación. Un cálculo de presión sola no alcanza. Hacía falta Extended Period Simulation (EPS): horas o días, no una foto fija.

La figura central del desarrollo fue Lewis A. Rossman, ingeniero e investigador de EPA.

1991: antes del nombre — QHCSIM

Antes de llamarse EPANET existió un prototipo experimental: QHCSIM (octubre de 1991). Jim Uber lo documentó al anunciar la jubilación de Rossman: el nombre EPANET aún no existía; el código combinaba ya hidráulica y calidad en un solo ejecutable —el sello que después sería EPANET—. Era pequeño (del orden de 1.500 líneas) y cabía en un disquete.

Ese precursor importa: EPANET no empezó como ventana bonita. Empezó como motor de simulación.

1993–1994: nace EPANET 1.x

EPA sitúa el primer lanzamiento público hacia 1993–1994. El EPANET Users Manual (Version 1.1) está fechado en enero de 1994 (Rossman). Ya hacía simulación extendida de hidráulica y calidad: caudales, presiones, niveles de tanque, concentración, edad del agua y source tracing (saber de qué fuente llega el agua a cada zona).

El motor se escribió en C, pensado para ser portátil. Las simulaciones podían correr desde un ejecutable con un archivo de texto del modelo. La hidráulica usaba el algoritmo del gradiente; la calidad pasó de un esquema de volúmenes finitos a un enfoque lagrangiano en generaciones posteriores.

Dos capas de código: motor y pantalla

Motor en C

El núcleo —el solver— vive en C. Eso explica por qué se pudo empaquetar después como biblioteca de funciones (DLL/API) y vivir dentro de otros programas.

Interfaz gráfica Windows: Visual Basic, luego Delphi

La primera interfaz gráfica (la ventana del programa en Windows) salió a principios de 1993, bajo Windows 3.1, y se desarrolló en Visual Basic. En esa versión temprana no se dibujaba la red en pantalla: la red se definía en un archivo de entrada (.MAP). Versiones posteriores de esa ventana se reescribieron en Borland Delphi / Object Pascal, ya con dibujo y edición del layout (la pantalla donde armás la red). El código antiguo de la interfaz de EPANET 2 (EPANET2W) sigue archivado por EPA como proyecto Delphi; la interfaz de la línea 2.2 también se mantiene en Delphi.

Separar motor (C) y ventana (Visual Basic → Delphi) es parte de la historia: el solver pudo viajar sin arrastrar toda la pantalla.

2000: EPANET 2 y el Toolkit

En 2000 Rossman publicó el manual de EPANET 2. Esa generación se convirtió en la referencia durante años para utilities, consultoras, universidades y desarrolladores.

La decisión de largo alcance fue el Programmer’s Toolkit: una biblioteca de funciones (epanet2.dll) que otros programas pueden llamar desde C/C++, Visual Basic, Delphi/Pascal u otros lenguajes que hablen con una DLL de Windows.

Eso convirtió a EPANET en motor, no solo en “el programa de la EPA”. Mucho software de redes hereda formatos, ideas o el propio motor.

MSX: más de una especie química

Cuando una sola especie (por ejemplo cloro) no alcanza, EPA publicó la extensión EPANET-MSX (Multi-Species eXtension): reacciones multi-especie acopladas al motor hidráulico, también como ejecutable y como biblioteca de funciones (epanetmsx.dll) junto al Toolkit clásico. MSX no reemplaza EPANET: lo extiende cuando la química de la red es el problema.

2014: Open Water Analytics (OWA)

Tras décadas de evolución principalmente dentro de EPA, en torno a 2014 la comunidad Open Water Analytics (OWA) tomó el relevo abierto del motor: repositorio comunitario, issues, contribuciones. No borra a EPA; abre otra pista de desarrollo.

Hay que distinguir siempre:

  • EPA estable — la liberación oficial que EPA señala como referencia (hoy, en la práctica pública, EPANET 2.2).
  • Rama OWA — línea comunitaria (p. ej. 2.3.x), más nueva, no automáticamente “la versión EPA”.

2020: EPANET 2.2 y Pressure-Driven Demand

En 2020 EPA publicó oficialmente EPANET 2.2 (manual de usuario y repositorio USEPA/EPANET2.2), con colaboración fuerte respecto al trabajo comunitario. Entre las novedades históricas relevantes está el soporte de Pressure-Driven Demand (PDD) — demanda que depende de la presión:

Eso importa en fallas, incendios y redes deficientes, donde asumir que “siempre se entrega la demanda” es físicamente falso. 2.2 también trajo mejoras numéricas y de la API (la forma de llamar al motor desde otro programa); el hilo histórico es: el motor oficial se puso al día y EPA lo etiquetó como estable.

EPANET 3: experimental, en C++

EPANET 3 no es la versión oficial estable. Es un proyecto de desarrollo/investigación en OWA (OpenWaterAnalytics/epanet-dev): una reimplementación orientada a objetos del motor en C++. Conviene nombrarlo para no confundir al lector, y dejar claro que es experimental frente a EPA 2.2.

Qué se puede hacer con EPANET (casos de uso)

EPANET modela redes presurizadas de distribución (agua potable / redes a presión): nodos, tuberías, bombas, válvulas, tanques, reservorios. Resuelve continuidad y energía; puede seguir calidad a lo largo del tiempo (EPS). Abajo, lo que un ingeniero civil o sanitario suele hacer con ese motor —no un listado vacío de features, sino trabajo de oficina.

Dimensionar o ampliar una red

Probar diámetros, ver si las velocidades y pérdidas de carga tienen sentido, y comprobar si una ampliación (nuevo barrio, nuevo caudal) deja la red existente sin presión.

Presiones en nodos

Preguntar qué presión tendrá cada usuario en punta de demanda y en valle. Detectar zonas flácidas o sobrepresión antes de comprar tubería.

Bombas y tanques

Simular curvas de bomba, horarios de encendido/apagado, llenado y vaciado de tanques, y cómo interactúan con la demanda a lo largo del día.

Energía de bombeo

Comparar estrategias de operación (qué bomba, a qué hora) para bajar consumo energético sin romper presiones mínimas.

Calidad del agua: cloro, edad, fuentes

Seguir cómo baja el cloro al viajar, estimar edad del agua en extremos de red con poca demanda, y hacer source tracing: de qué reservorio o pozo llega el agua a cada zona. Útil para desinfección, mezcla de fuentes y zonas “viejas”.

Emergencias y contaminación

Evaluar qué parte de la red se vería afectada si entra un contaminante, si falla una bomba o si hay que aislar un tramo. EPA lo usa también en escenarios de amenaza y resiliencia.

Incendios

Verificar caudales y presiones disponibles para hidrantes mientras el resto de la red sigue demandando. Aquí el PDD de 2.2 ayuda: si la presión cae, la demanda no se entrega “por magia”.

Fugas y redes deficientes

Explorar escenarios con caudal perdido o presión insuficiente. El modelo no inventa fugas solas: vos ponés la hipótesis; el motor muestra el efecto hidráulico.

Calibración con datos reales

Comparar el modelo con presiones medidas, caudales, niveles de tanque y datos de operación (SCADA). Ajustar rugosidades, demandas y válvulas hasta que el modelo se parezca a la red real.

Automatización (Toolkit + scripts)

Llamar al motor desde Python u otra aplicación: GIS → armar red → EPANET → optimizar diámetros o horarios de bombas → dashboard. El Toolkit es lo que hace posible ese flujo sin reescribir el solver.

Contrastes cortos

EPANET vs HEC-RAS

EPANET: redes presurizadas (agua potable). HEC-RAS: ríos, canales, planicies de inundación. Ambos tratan “agua”; no resuelven el mismo problema.

EPANET vs SWMM

EPANET: distribución presurizada. SWMM: drenaje urbano y alcantarillado (pluvial/sanitario), con superficies y procesos hidrológicos. Complementarios en la ciudad; no intercambiables.

Cronología breve

  • ~1991 — QHCSIM (Rossman): hidráulica + calidad, sin el nombre EPANET.
  • 1993–1994 — EPANET 1.x; manual 1.1 (ene 1994); motor en C; primera ventana Windows en Visual Basic.
  • ~2000 — EPANET 2 + Programmer’s Toolkit; interfaz gráfica en Delphi.
  • MSX — extensión multi-especie sobre el motor.
  • ~2014 — Open Water Analytics; comunidad alrededor del código.
  • 2020 — EPA EPANET 2.2 (estable oficial, con PDD).
  • OWA 2.3.x — rama comunitaria (distinta de EPA estable).
  • EPANET 3 — experimental OWA en C++ (no confundir con 2.2).

Conclusión

EPANET no nació para dibujar redes bonitas. Nació porque EPA necesitaba unir presión y calidad en el tiempo, en un motor portable en C, con una biblioteca de funciones que otros pudieran llamar. La interfaz gráfica pasó de Visual Basic a Delphi; el ecosistema añadió MSX, OWA y, más tarde, una pista experimental en C++. Para el ingeniero civil, el mensaje histórico es simple: cuando modelas una red de agua, casi siempre estás hablando con un linaje que empieza en un prototipo de 1991 y sigue vivo —siempre que sepas si estás en EPA 2.2 o en una rama comunitaria— y que ese motor sirve para dimensionar, operar, calibrar y pensar emergencias, no solo para “correr un .inp”.

Referencias

  1. U.S. EPA. EPANET.
  2. Rossman, L. A. EPANET Users Manual (Version 1.1), enero 1994. NTIS.
  3. Rossman, L. A. EPANET 2 Users Manual, U.S. EPA, 2000.
  4. U.S. EPA. EPANET 2.2 (repositorio).
  5. U.S. EPA. EPANET-legacy-user-interface (interfaz Delphi EPANET2W).
  6. Open Water Analytics. EPANET (rama comunitaria).
  7. Open Water Analytics. epanet-dev (EPANET 3 / OO C++).
  8. Uber, J. / openepanet.org. Nota sobre jubilación de Lew Rossman y QHCSIM (1991).
  9. Salomons, E. The creator of EPANET has retired (incluye contexto QHCSIM).
  10. Riaño-Briceño et al. The EPANET Open Source Initiative (WDSA/CCWI; interfaz VB→Delphi, motor C).
  11. U.S. EPA. EPANET-MSX (extensión multi-especie; manuales EPA/NEPIS).
  12. EPANET Programmer’s Toolkit (DLL; C/C++, VB, Delphi). Documentación histórica del Toolkit.

Evaluación y limitaciones

Trata las notas siguientes como contexto de evaluación, no como un cálculo o una revisión verificados.

Usalo como motor de redes presurizadas. Sabé si estás en EPA 2.2 o en una rama comunitaria. La calibración sigue siendo responsabilidad de quien modela.