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
Python Binding
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:
-
Open a console window and navigate to the directory where this Readme file resides (which should have 'src' as a sub-directory underneath it).
-
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4035605347c6c4e841ab2a9729542325f3dca9572612d331efa064373e7b18ec
|
|
| MD5 |
9d34c489da7459a2539ab92e820df9de
|
|
| BLAKE2b-256 |
9518f8a718950bd7e3578b51343b71df5acad67a77131edd6cfdbf5687d5c0df
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef13a9411c750943ec8875441e05e3ca2922948f27b4100c42e5a5637814917c
|
|
| MD5 |
13e5de443b65f0f6ca79fc64b822f9b9
|
|
| BLAKE2b-256 |
5c79218d4aa75deac5ba9662221c55f59c8188b0bf17418a9de3d654a86a4e99
|