Skip to main content

A python package for EPA SWMM preprocessing, solver, and post-processing.

Project description

Stormwater Management Model (SWMM) Open Source Initiative

Stormwater Management Model (SWMM) SWMM is a dynamic hydrology-hydraulic water quality simulation model. It is used for single event or long-term (continuous) simulation of runoff quantity and quality from primarily urban areas. SWMM was originally developed by the U.S. Environmental Protection Agency (EPA) is being advanced as an open source project by the community to ensure its long-term sustainability.

Recent advancements to the SWMM computational engine include a modernized codebase with improved modularity and computational efficiency, a well-documented application programming interface (API) for easier integration with third-party applications, and Python bindings for enhanced accessibility and usability by the broader community.

New process formulations including a spatially explicit overland flow solver, a groundwater transport model, and a new low impact development (LID) module have also been added and are being tested.

The SWMM source code is written in the C/C++ Programming Language.

Build Status

Unit Testing Build and Regression Testing Documentation Deployment Issues

Python Binding

PyPi PythonVersion Wheel Downloads Downloads Downloads

Introduction

This repository hosts a community-driven, open source initiative to continue development of the SWMM computational engine. The project aims to preserve and advance the rich legacy of SWMM by developing high-quality, QA/QC'd, and peer-reviewed code while the EPA Office of Research and Development (ORD) is being dissolved. The goal is to build an active community around the codebase so it can be sustainably maintained and improved, and to continue collaborating with the agency toward future official releases when feasible. This community is actively working with organizations such as ASCE's Environmental and Water Resources Institute (EWRI) and Water Environment Federation (WEF) to ensure the long-term sustainability of the SWMM codebase.

SWMM is a dynamic hydrology-hydraulic water quality simulation model. It is used for single event or long-term (continuous) simulation of runoff quantity and quality from primarily urban areas. SWMM source code is written in the C Programming Language and released in the Public Domain.

Build Instructions

The 'src' folder of this repository contains the C source code for the current version of Storm Water Management Model's computational engine. The code can be compiled into both a shared object library and a command line executable. Under Windows, the library file (openswmmcore.dll) is used to power SWMM's graphical user interface.

Also included is a python interface for the SWMM computational engine and output post-processing application programming interfaces located in the python folder.

Computational Engine

The 'CMakeLists.txt' file is a script used by CMake (https://cmake.org/) to build the SWMM binaries. CMake is a cross-platform build tool that generates platform native build systems for many compilers. To check if the required version is installed on your system, enter from a console window and check that the version is 3.15 or higher.

cmake --version

To build the SWMM engine and related libraries:

  1. Open a console window and navigate to the directory where this Readme file resides (which should have 'src' as a sub-directory underneath it).

  2. Then the following CMake commands to build the binaries. Where can either be Windows, Linux, or Darwin. The confurations for the platforms can be modified in the CMakePresets.json file.

cmake ---preset=<platform>
cmake --build build --target package

Python Bindings

Python bindings for the SWMM API have been developed. These bindings are still under development and testing. The python bindings can be built and installed locally using the following command.

cd python
python -m pip install -r requirements.txt
python -m pip install . 

Users may also build python wheels for installation or distribution. Example usage of python bindings can be found below. More extensive documentation will be provided once cleared.

from openswmmcore import solver
from openswmmcore.solver import Solver 
from openswmmcore.output import Output

# Alternative 1 to run SWMM

with Solver(inp_file="input_file.inp") as swmm_solver:
   
   # Open swmm file and starts the simulation
   swmm_solver.start()

   # Set initialization parameters e.g., time step stride, start date, end da.te etc.
   swmm_solver.time_stride = 600 

   for elapsed_time, current_datetime in swmm_solver:

      # Get and set attributes per timestep
      print(current_datetime)

      swmm_solver.set_value(
         object_type=solver.SWMMObjects.RAIN_GAGE,
         property_type=solver.SWMMRainGageProperties.GAGE_RAINFALL,
         index="RG1",
         value=3.6
      )

# Alternative 2 to run SWMM
swmm_solver = Solver(inp_file="input_file.inp")

# Open and start the simulation
swmm_solver.initialize()

for elapsed_time, current_datetime in swmm_solver:
   # Get and set attributes per timestep
   print(current_datetime)


swmm_solver.finalize()
# or
# swmm_solver.end()
# swmm_solver.report()
# swmm_solver.close()

# Alternative 3 to run SWMM
swmm_solver = Solver(inp_file="input_file.inp")
swmm_solver.execute()

# To read output file

swmm_output = Output(output_file='output_file.out')

# Dict[datetime, float]
link_timeseries = swmm_output.get_link_timeseries(
   element_index="C1",
   attribute=output.LinkAttribute.FLOW_RATE,
)

Unit and Regression Testing

Unit tests and regression tests have been developed for both the natively compiled SWMM computational engine and output toolkit as well as their respective python bindings. Unit tests for the natively compiled toolkits use the Boost 1.67.0 library and can be compiled by adding DBUILD_TESTS=ON flag during the cmake build phase as shown below:

ctest --test-dir .  -DBUILD_TESTS=ON --config Debug --output-on-failure

Unit testing on the python bindings may be executed using the following command after installation.

cd python\tests
pytest .

Regression tests are executed using the python bindings using the pytest and pytest-regressions extension using the following commands.

cd ci
pytest --data-dir <path-to-regression-testing-files> --atol <absolute-tolerance> --rtol <relative-tolerance> --benchmark-compare --benchmark-json=PATH

Find Out More

A live web version of the SWMM documentation of the API and user manuals can be found on the SWMM GitHub Pages website. Note that this documentation is experimental and maintained by the community; it has yet to go through formal agency quality assurance review. The project welcomes contributions, review, and collaboration from the community and from agency partners toward future official releases.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openswmm-5.3.0.dev1.tar.gz (108.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openswmm-5.3.0.dev1-py3-none-any.whl (116.6 kB view details)

Uploaded Python 3

File details

Details for the file openswmm-5.3.0.dev1.tar.gz.

File metadata

  • Download URL: openswmm-5.3.0.dev1.tar.gz
  • Upload date:
  • Size: 108.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for openswmm-5.3.0.dev1.tar.gz
Algorithm Hash digest
SHA256 4035605347c6c4e841ab2a9729542325f3dca9572612d331efa064373e7b18ec
MD5 9d34c489da7459a2539ab92e820df9de
BLAKE2b-256 9518f8a718950bd7e3578b51343b71df5acad67a77131edd6cfdbf5687d5c0df

See more details on using hashes here.

File details

Details for the file openswmm-5.3.0.dev1-py3-none-any.whl.

File metadata

  • Download URL: openswmm-5.3.0.dev1-py3-none-any.whl
  • Upload date:
  • Size: 116.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for openswmm-5.3.0.dev1-py3-none-any.whl
Algorithm Hash digest
SHA256 ef13a9411c750943ec8875441e05e3ca2922948f27b4100c42e5a5637814917c
MD5 13e5de443b65f0f6ca79fc64b822f9b9
BLAKE2b-256 5c79218d4aa75deac5ba9662221c55f59c8188b0bf17418a9de3d654a86a4e99

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page