API Reference#
This page is generated from the Cython type-stub files (.pyi) so
signatures and docstrings are always in sync with the compiled extensions.
Each entry below lists the public class for the module; private helpers
prefixed with _ are intentionally hidden.
For task-oriented documentation see the User Guide.
openswmm#
The top-level package. Importing openswmm configures the
platform-specific shared-library search path and re-exports the legacy
SWMM 5 symbols for backward compatibility.
openswmm – Python bindings for the OpenSWMM stormwater modelling engine.
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Subpackages#
- legacy.engine
Legacy EPA SWMM 5.x solver bindings (Cython).
- legacy.output
Legacy EPA SWMM 5.x binary output reader (Cython).
- engine
New data-oriented engine 6.x bindings (Cython).
This top-level package additionally:
Configures the platform-specific shared-library search path so the bundled C/C++ shared libraries can be located by the dynamic linker.
Resolves the package version string into
__version__.Re-exports the legacy engine and legacy output public symbols when their compiled Cython extensions are available, for backward compatibility with pre-6.x callers.
OpenSWMM 6 — refactored engine#
The openswmm.engine subpackage exposes the new, refactored
OpenSWMM 6 engine — the recommended API for all new work.
All domain access is class-based: each class takes an active
Solver in its constructor and may only be
called when the solver is in an appropriate EngineState.
See also
OpenSWMM 6 User Guide (refactored engine) — task-oriented user guide for this engine.
openswmm.engine#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Cython bindings for the OpenSWMM Engine 6.0 C API.
The package is split by domain to mirror the C header organisation:
Python class |
C header |
Contents |
|---|---|---|
|
|
Engine lifecycle, timing, error reporting |
|
|
Programmatic model construction |
|
|
In-place model editing (delete + type conversion) |
|
|
Node get/set, lateral inflow, bulk arrays |
|
|
Link get/set, control settings, bulk arrays |
|
|
Subcatchment runoff, rainfall override |
|
|
Rain gage rainfall get/set |
|
|
Hot start save/open/apply/close |
|
|
Continuity error queries |
|
|
Cumulative simulation statistics |
|
|
Binary output file reader |
|
|
Pollutant management and quality injection |
|
|
Landuse, buildup, washoff, treatment |
|
|
Time series, curves, patterns |
|
|
External inflows, DWF, RDII |
|
|
Control rules and direct actions |
|
|
Advanced runtime forcing (mode + persistence) |
|
|
Transects, streets, inlets, LIDs |
|
|
Coordinates, CRS, vertices, polygons |
|
|
2D surface mesh / coupled overland flow |
|
|
GeoPackage import/export (requires |
Quick start#
from openswmm.engine import Solver, Nodes, Links
with Solver("model.inp", "model.rpt", "model.out") as s:
nodes = Nodes(s)
links = Links(s)
while s.state == EngineState.RUNNING:
if s.step() != 0:
break
depths = nodes.get_depths_bulk() # numpy array
flows = links.get_flows_bulk() # numpy array
Programmatic model building#
from openswmm.engine import ModelBuilder, NodeType, LinkType, XSectShape
m = ModelBuilder()
m.add_node("J1", NodeType.JUNCTION)
m.add_node("OUT1", NodeType.OUTFALL)
m.add_link("C1", LinkType.CONDUIT)
m.set_link_nodes(0, 0, 1)
m.set_link_length(0, 300.0)
m.set_link_roughness(0, 0.013)
m.set_link_xsect(0, XSectShape.CIRCULAR, 1.0)
m.validate()
m.finalize()
solver = m.to_solver()
solver.start()
while solver.state == EngineState.RUNNING:
if solver.step() != 0:
break
pass
solver.end()
solver.destroy()
Advanced forcing#
from openswmm.engine import Solver, Nodes, Forcing, ForcingMode
with Solver("model.inp", "model.rpt", "model.out") as s:
nodes = Nodes(s)
forcing = Forcing(s)
j1 = nodes.get_index("J1")
forcing.node_lat_inflow(j1, 1.5, ForcingMode.REPLACE, persist=True)
while s.state == EngineState.RUNNING:
if s.step() != 0:
break
pass
forcing.clear_all()
Solver lifecycle#
Engine Lifecycle (Pythonic v1 surface)#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._solver.
- class Event(start, end)#
Bases:
NamedTupleCreate new instance of Event(start, end)
- class EventsView(solver)#
Bases:
MutableSequence[Event][EVENTS]block as aMutableSequence. SeeSolver.events.- Parameters:
solver (Solver)
- append(value)#
S.append(value) – append value to the end of the sequence
- Parameters:
value (Any)
- Return type:
None
- clear() None -- remove all items from S#
- Return type:
None
- class SimulationOptions(solver)#
Bases:
MutableMapping[str,str]View over the
[OPTIONS]block. SeeSolver.options.- Parameters:
solver (Solver)
- ext: _OptionsExtView#
- class Solver(inp='', rpt=None, out=None, *, plugin_lib=None)#
Bases:
objectSWMM engine lifecycle manager.
Accepts
strorpathlib.Pathfor every file argument.from datetime import timedelta from openswmm.engine import Solver with Solver("model.inp", "model.rpt", "model.out") as s: for elapsed in s.steps(): if elapsed >= timedelta(hours=24): break
- Parameters:
inp (_PathLike)
rpt (Optional[_PathLike])
out (Optional[_PathLike])
plugin_lib (Optional[_PathLike])
- close()#
- Return type:
None
- close_runoff_interface()#
- Return type:
None
- create()#
- Return type:
None
- destroy()#
- Return type:
None
- property editor: ModelEditor#
- end()#
- Return type:
None
- property events: EventsView#
- property infrastructure: Infrastructure#
- initialize()#
- Return type:
None
- property mass_balance: MassBalance#
- property options: SimulationOptions#
- property pollutants: Pollutants#
- report()#
- Return type:
None
- run()#
- Return type:
None
- property save_schedule: SaveSchedule#
- set_step_begin_callback(callback)#
- set_step_end_callback(callback)#
- set_warning_callback(callback)#
- property state: EngineState#
- property statistics: Statistics#
- property subcatchments: Subcatchments#
- class UserFlags(solver)#
Bases:
MutableMapping[str,bool|int|float]Typed user-flag mapping. See
Solver.userflags.- Parameters:
solver (Solver)
- run(inp, rpt=None, out=None, *, plugin_lib=None)#
Run a SWMM simulation start-to-finish. Raises
EngineErroron failure.
- run_with_callback(inp, rpt=None, out=None, callback=None, *, plugin_lib=None)#
Run a SWMM simulation with an optional progress callback. Raises
EngineErroron failure.
Exceptions#
The EngineError hierarchy and the dispatch helper used by
_check(). Each subclass also inherits from a standard-library
exception so idiomatic except IndexError: / except ValueError:
handlers do the right thing.
Type stubs for openswmm.engine._exceptions.
- exception BadHandleError(code, message=Ellipsis)#
Bases:
EngineError,RuntimeError
- exception BadIndexError(code, message=Ellipsis)#
Bases:
EngineError,IndexError
- exception BadParamError(code, message=Ellipsis)#
Bases:
EngineError,ValueError
- exception CRSError(code, message=Ellipsis)#
Bases:
EngineError,ValueError
- exception DependencyError(code, message=Ellipsis)#
Bases:
EngineError,RuntimeError
- exception FileError(code, message=Ellipsis)#
Bases:
EngineError,OSError
- exception HotStartError(code, message=Ellipsis)#
Bases:
EngineError,RuntimeError
- exception LifecycleError(code, message=Ellipsis)#
Bases:
EngineError,RuntimeError
- exception NumericalError(code, message=Ellipsis)#
Bases:
EngineError,RuntimeError
- exception ParseError(code, message=Ellipsis)#
Bases:
EngineError,ValueError
- exception PluginError(code, message=Ellipsis)#
Bases:
EngineError,RuntimeError
- exception StaleObjectError(message=Ellipsis)#
Bases:
LifecycleError- Parameters:
message (str)
- Return type:
None
DateTime conversion#
The low-level C API encode/decode primitives plus the high-level
oadate_to_datetime / datetime_to_oadate helpers used throughout
the bindings.
Type stubs for openswmm.engine._datetime.
Low-level Python bindings around the SWMM DateTime conversion C API
declared in openswmm_datetime.h. SWMM’s native DateTime is a double
whose integer part is days since 1899-12-30 and fractional part is the
time-of-day fraction.
- encode_time(hour, minute, second)#
Type stubs for openswmm.engine._dates.
High-level helpers that convert between SWMM’s native DateTime double
(decimal days since 1899-12-30) and datetime.datetime. The
calendar arithmetic is delegated to the C API in openswmm_datetime.h.
Model construction#
Programmatic Model Building#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._model.
The ModelBuilder class creates a SWMM model entirely through the API
without requiring a .inp file.
- class ModelBuilder#
Bases:
objectBuild a SWMM model programmatically (no
.inpfile).The engine starts in
BUILDINGstate. Useadd_node,add_link, etc. to populate the model, then callfinalizeto transition toINITIALIZED.Note
The
ModelBuilderowns its engine handle untilto_solveris called; the resultingSolverthen takes ownership.Example:
m = ModelBuilder() m.add_node("J1", 0) # JUNCTION m.add_node("OUT1", 1) # OUTFALL m.add_link("C1", 0) # CONDUIT m.set_link_nodes(0, 0, 1) m.set_link_length(0, 300.0) m.set_link_roughness(0, 0.013) m.validate() m.finalize() solver = m.to_solver()
- add_gage(gage_id)#
Add a rain gage to the model.
- add_link(link_id, link_type)#
Add a link to the model.
Valid in
BUILDINGorOPENEDstate.- Parameters:
- Returns:
Error code (
0on success).- Return type:
@see: L{openswmm.engine.LinkType}
- add_node(node_id, node_type)#
Add a node to the model.
Valid in
BUILDINGorOPENEDstate.- Parameters:
- Returns:
Error code (
0on success).- Return type:
@see: L{openswmm.engine.NodeType}
- add_subcatch(sc_id)#
Backward-compatible alias for
add_subcatchment.
- add_subcatchment(sc_id)#
Add a subcatchment to the model.
- add_title_line(line)#
Append a new line to the
[TITLE]section.- Raises:
EngineError – On C API failure.
- Parameters:
line (str)
- Return type:
None
- clear_title()#
Remove all lines from the
[TITLE]section.- Raises:
EngineError – On C API failure.
- Return type:
None
- files_get(key)#
Read one [FILES] field by key.
- files_set(key, value)#
Write one [FILES] field by key.
- finalize()#
Finalize the model – build connectivity and allocate arrays.
Transitions to
INITIALIZEDstate.- Returns:
None
- Return type:
None
- Raises:
EngineError – If finalization fails.
- get_crs()#
Return the model’s coordinate reference system string.
- Returns:
CRS string (EPSG identifier, PROJ string, or WKT).
- Raises:
EngineError – On C API failure.
- Return type:
- get_option(key)#
Return a SWMM option value as a string.
- Raises:
EngineError – On unknown key.
- Parameters:
key (str)
- Return type:
- get_option_ext(key)#
Return the value of an extension option (unknown to base SWMM).
- Raises:
EngineError – On unknown key.
- Parameters:
key (str)
- Return type:
- get_title_count()#
Number of lines in the
[TITLE]section.- Raises:
EngineError – On C API failure.
- Return type:
- get_title_line(index)#
Return a title line by zero-based index.
- Raises:
EngineError – On bad index.
- Parameters:
index (int)
- Return type:
- get_userflag_bool(name)#
Return a boolean user flag value.
- Raises:
EngineError – On unknown flag.
- Parameters:
name (str)
- Return type:
- get_userflag_int(name)#
Return an integer user flag value.
- Raises:
EngineError – On unknown flag.
- Parameters:
name (str)
- Return type:
- get_userflag_real(name)#
Return a real-valued user flag.
- Raises:
EngineError – On unknown flag.
- Parameters:
name (str)
- Return type:
- property handle: int#
Raw engine handle as an integer (for use by
ModelEditor).- Returns:
The underlying C engine pointer cast to an integer.
- Return type:
- plugin_get(idx)#
Read one [PLUGINS] row by index.
- plugin_remove(path_or_id)#
Remove the [PLUGINS] row matching
path_or_id.- Parameters:
path_or_id (str) – Library path, plugin id, or
id:versionstring.- Return type:
None
- plugin_set(path_or_id, args='')#
Add or replace a [PLUGINS] row keyed by path/id.
- plugins_count()#
Return the number of [PLUGINS] entries on the engine.
- Returns:
Plugin count.
- Return type:
- pop_last_link(link_id)#
Remove the most recently added link (undo-of-add).
Valid in
BUILDINGorOPENEDstate. Thelink_idmust match the current tail; otherwiseSWMM_ERR_BADINDEXis returned.
- pop_last_node(node_id)#
Remove the most recently added node (undo-of-add).
Valid in
BUILDINGorOPENEDstate. Thenode_idmust match the current tail; otherwiseSWMM_ERR_BADINDEXis returned. ReturnsSWMM_ERR_BADPARAMif any link still references the tail node – pop those links first viapop_last_link.
- set_link_length(idx, length)#
Set the length of a conduit link.
- Parameters:
- Returns:
None
- Return type:
None
- Raises:
EngineError – On C API failure.
- set_link_nodes(idx, from_node, to_node)#
Set the upstream and downstream nodes for a link.
- Parameters:
- Returns:
None
- Return type:
None
- Raises:
EngineError – On C API failure.
- set_link_roughness(idx, n)#
Set Manning’s roughness coefficient for a conduit.
- Parameters:
- Returns:
None
- Return type:
None
- Raises:
EngineError – On C API failure.
- set_link_xsect(idx, shape, g1, g2=0, g3=0, g4=0)#
Set the cross-section geometry of a conduit.
- Parameters:
- Returns:
None
- Return type:
None
- Raises:
EngineError – On C API failure.
@see: L{openswmm.engine.XSectShape}
- set_node_invert(idx, elev)#
Set the invert elevation of a node.
- Parameters:
- Returns:
None
- Return type:
None
- Raises:
EngineError – On C API failure.
- set_node_max_depth(idx, depth)#
Set the maximum depth of a node.
- Parameters:
- Returns:
None
- Return type:
None
- Raises:
EngineError – On C API failure.
- set_option(key, value)#
Set a SWMM option.
- Raises:
EngineError – On unknown key or invalid value.
- Parameters:
- Return type:
None
- set_option_ext(key, value)#
Set the value of an extension option.
- Raises:
EngineError – On C API failure.
- Parameters:
- Return type:
None
- set_title(text)#
Replace all title lines with new text. Newlines split lines.
- Raises:
EngineError – On C API failure.
- Parameters:
text (str)
- Return type:
None
- set_userflag_bool(name, value)#
Set a boolean user flag.
- Raises:
EngineError – On C API failure.
- Parameters:
- Return type:
None
- set_userflag_int(name, value)#
Set an integer user flag.
- Raises:
EngineError – On C API failure.
- Parameters:
- Return type:
None
- set_userflag_real(name, value)#
Set a real-valued user flag.
- Raises:
EngineError – On C API failure.
- Parameters:
- Return type:
None
- to_solver()#
Transfer ownership of the engine handle to a
Solver.After this call, the
ModelBuilderis invalidated and must not be used. The returnedSolverowns the engine handle.- Returns:
A new
Solverwrapping this model’s engine.- Return type:
L{Solver}
- validate()#
Validate model topology.
Checks for orphaned links and ensures at least one outfall is present. Does not change state. Safe to call multiple times.
- Returns:
None
- Return type:
None
- Raises:
EngineError – If topology validation fails.
- write(path)#
Write the model to a SWMM
.inpfile.- Parameters:
path (str) – Output file path.
- Returns:
None
- Return type:
None
- Raises:
EngineError – On C API failure.
- write_with_plugin(path, output_plugin_id='')#
Write the current model to disk using an output plugin.
Model editing (deletion + type conversion)#
Model Editing — Object Deletion and Type Conversion#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._edit.
- class ConversionResult(new_type, cleared_fields, warnings)#
Bases:
objectResult of an in-place node or link type conversion.
- Variables:
new_type – The new C-API type enum value.
cleared_fields – List of field names cleared during conversion.
warnings – Non-fatal topology warnings.
- Parameters:
new_type (int) – The new C-API type enum value.
cleared_fields (list[str]) – List of field names that were cleared (reset to defaults) during the conversion.
warnings (list[str]) – Non-fatal topology warnings (e.g. “model has no outfall after this conversion”). Conversion still proceeds even when warnings are present.
- class ImpactEntry(obj_type, obj_idx, field, cascaded)#
Bases:
objectOne cross-reference that would be affected by a deletion.
- Variables:
obj_type – Integer code for the referencing object type (0=node, 1=link, 2=subcatchment, 3=gage, 4=table, 5=transect, 6=inlet_usage).
obj_type_name – Human-readable name for
obj_type.obj_idx – Zero-based index of the referencing object.
field – Name of the specific cross-reference field (e.g.
"node1","outlet_node").cascaded –
Trueif the referencing object will be deleted;Falseif only the reference will be nullified.
- Parameters:
- class ModelEditor(engine)#
Bases:
objectEdit an existing SWMM model – delete objects and convert types.
Accepts any object that exposes a
handleproperty returning the raw engine pointer as an integer. BothModelBuilder(BUILDINGstate) andSolver(OPENEDstate) satisfy this contract.- Parameters:
engine (object) – A
ModelBuilderorSolverinstance.
Example:
from openswmm.engine import ModelBuilder, ModelEditor, NodeType, LinkType m = ModelBuilder() m.add_node("J1", NodeType.JUNCTION) m.add_node("J2", NodeType.JUNCTION) m.add_node("OUT1", NodeType.OUTFALL) m.add_link("C1", LinkType.CONDUIT) m.add_link("C2", LinkType.CONDUIT) m.set_link_nodes(0, 0, 1) m.set_link_nodes(1, 1, 2) ed = ModelEditor(m) # Non-destructive preview impacts = ed.analyze_node_impact("J1") # Delete J1 -- C1 cascade-deleted automatically cascade = ed.delete_node("J1") # Convert C2 conduit -> weir result = ed.convert_link("C2", LinkType.WEIR)
- analyze_gage_impact(id_or_idx)#
Preview which objects reference a rain gage.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what would be affected.- Return type:
list[
ImpactEntry]- Raises:
KeyError – If
id_or_idxis a name and the gage is not found.EngineError – On C API failure.
- analyze_link_impact(id_or_idx)#
Preview which objects reference a link, without deleting it.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what would be affected.- Return type:
list[
ImpactEntry]- Raises:
KeyError – If
id_or_idxis a name and the link is not found.EngineError – On C API failure.
- analyze_node_impact(id_or_idx)#
Preview which objects reference a node, without deleting it.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what would be affected.- Return type:
list[
ImpactEntry]- Raises:
KeyError – If
id_or_idxis a name and the node is not found.EngineError – On C API failure.
- analyze_subcatch_impact(id_or_idx)#
Preview which objects reference a subcatchment.
- Parameters:
id_or_idx (int or str) – Subcatchment name or zero-based index.
- Returns:
List of
ImpactEntrydescribing what would be affected.- Return type:
list[
ImpactEntry]- Raises:
KeyError – If
id_or_idxis a name and the subcatchment is not found.EngineError – On C API failure.
- analyze_table_impact(id_or_idx)#
Preview which objects reference a time series or curve.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what would be affected.- Return type:
list[
ImpactEntry]- Raises:
KeyError – If
id_or_idxis a name and the table is not found.EngineError – On C API failure.
- analyze_transect_impact(idx)#
Preview which links reference a transect.
- Parameters:
idx (int) – Zero-based transect index.
- Returns:
List of
ImpactEntrydescribing what would be affected.- Return type:
list[
ImpactEntry]- Raises:
EngineError – On C API failure.
- convert_link(id_or_idx, new_type)#
Convert a link to a different type in place.
- Parameters:
- Returns:
ConversionResultwith cleared fields and warnings.- Return type:
L{ConversionResult}
- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate, the type is invalid, ornew_typeequals the current type.KeyError – If
id_or_idxis a name and the link is not found.EngineError – On C API failure.
@see: L{openswmm.engine.LinkType}
- convert_node(id_or_idx, new_type)#
Convert a node to a different type in place.
- Parameters:
- Returns:
ConversionResultwith cleared fields and warnings.- Return type:
L{ConversionResult}
- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate, the type is invalid, ornew_typeequals the current type.KeyError – If
id_or_idxis a name and the node is not found.EngineError – On C API failure.
@see: L{openswmm.engine.NodeType}
- delete_gage(id_or_idx)#
Delete a rain gage and nullify subcatchment gage references.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what was affected.- Return type:
list[
ImpactEntry]- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate.KeyError – If
id_or_idxis a name and the gage is not found.EngineError – On C API failure.
- delete_link(id_or_idx)#
Delete a link and cascade-delete or nullify referencing objects.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what was affected.- Return type:
list[
ImpactEntry]- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate.KeyError – If
id_or_idxis a name and the link is not found.EngineError – On C API failure.
- delete_node(id_or_idx)#
Delete a node and cascade-delete or nullify all referencing objects.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what was affected.- Return type:
list[
ImpactEntry]- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate.KeyError – If
id_or_idxis a name and the node is not found.EngineError – On C API failure.
- delete_subcatch(id_or_idx)#
Delete a subcatchment and nullify referencing objects.
- Parameters:
id_or_idx (int or str) – Subcatchment name or zero-based index.
- Returns:
List of
ImpactEntrydescribing what was affected.- Return type:
list[
ImpactEntry]- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate.KeyError – If
id_or_idxis a name and the subcatchment is not found.EngineError – On C API failure.
- delete_table(id_or_idx)#
Delete a time series or curve and nullify all referencing objects.
- Parameters:
- Returns:
List of
ImpactEntrydescribing what was affected.- Return type:
list[
ImpactEntry]- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate.KeyError – If
id_or_idxis a name and the table is not found.EngineError – On C API failure.
- delete_transect(idx)#
Delete a transect and reset referencing conduit cross-sections.
- Parameters:
idx (int) – Zero-based transect index.
- Returns:
List of
ImpactEntrydescribing what was affected.- Return type:
list[
ImpactEntry]- Raises:
RuntimeError – If not in
BUILDINGorOPENEDstate.EngineError – On C API failure.
- property gage_count: int#
Current number of rain gages in the model.
- Returns:
Gage count.
- Return type:
- property subcatch_count: int#
Current number of subcatchments in the model.
- Returns:
Subcatchment count.
- Return type:
Nodes#
Node access (Pythonic v1 surface)#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._nodes.
- class Node(solver, index)#
Bases:
objectSingle-node wrapper. See
Nodesfor the collection.- set_quality_mass_flux(pollutant, mass_rate)#
- type: NodeType#
- stats: NodeStatsView#
- storage: StorageView#
- outfall: OutfallView#
- divider: DividerView#
- class Nodes(solver)#
Bases:
objectIndexable, iterable collection of
Nodewrappers.- Parameters:
solver (Solver)
- qualities(pollutant)#
- set_lateral_inflows(values)#
Links#
Link access (Pythonic v1 surface)#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._links.
- class Link(solver, index)#
Bases:
objectSingle-link wrapper. See
Linksfor the collection.- set_nodes(from_node, to_node)#
- type: LinkType#
- stats: LinkStatsView#
- orifice: OrificeView#
- outlet: OutletView#
- class Links(solver)#
Bases:
objectIndexable, iterable collection of
Linkwrappers.- Parameters:
solver (Solver)
- pump_stats()#
- qualities(pollutant)#
Subcatchments#
Subcatchment access (Pythonic v1 surface)#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._subcatchments.
- class CoverageView(sub)#
Bases:
MutableMapping[str,float]- Parameters:
sub (Subcatchment)
- class InfiltrationView#
Bases:
object- set_green_ampt(suction, conductivity, initial_deficit)#
- set_horton(f0, fmin, decay, dry_time)#
- model: InfilModel#
- class Subcatchment(solver, index)#
Bases:
objectSingle-subcatchment wrapper. See
Subcatchments.- set_outlet_subcatchment(sub)#
- Parameters:
sub (Subcatchment | int | str)
- Return type:
None
- set_ponded_quality(pollutant, mass)#
- outlet: Node | Subcatchment | None#
- stats: SubcatchmentStatsView#
- infiltration: InfiltrationView#
- coverage: CoverageView#
Rain gages#
Rain gage access (Pythonic v1 surface)#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._gages.
External inflows (DWF, RDII, time-series)#
Type stubs for openswmm.engine._inflows.
- class HydrographEntry(uh_name, month, response, r, t, k, dmax, drecov, dinit)#
Bases:
NamedTupleCreate new instance of HydrographEntry(uh_name, month, response, r, t, k, dmax, drecov, dinit)
- Parameters:
- class HydrographGageEntry(uh_name, gage_name)#
Bases:
NamedTupleCreate new instance of HydrographGageEntry(uh_name, gage_name)
- class Inflows(solver)#
Bases:
object- Parameters:
solver (Solver)
- add_dwf(node, constituent, *, avg_value=Ellipsis, monthly_pattern=Ellipsis, daily_pattern=Ellipsis, hourly_pattern=Ellipsis, weekend_pattern=Ellipsis)#
- add_external(node, constituent, *, ts_name=Ellipsis, type=Ellipsis, m_factor=Ellipsis, s_factor=Ellipsis, baseline=Ellipsis, pattern=Ellipsis)#
- add_hydrograph(uh_name, month, response, r, t, k, *, dmax=Ellipsis, drecov=Ellipsis, dinit=Ellipsis)#
- add_hydrograph_gage(uh_name, gage_name)#
- add_rdii(node, uh_name, area)#
- add_rdii_decay(uh_name, response, k_dep, k_0, k_T, T_ref, theta_rec, T_freeze)#
- class RDIIDecayEntry(uh_name, response, k_dep, k_0, k_T, T_ref, theta_rec, T_freeze)#
Bases:
NamedTupleCreate new instance of RDIIDecayEntry(uh_name, response, k_dep, k_0, k_T, T_ref, theta_rec, T_freeze)
- Parameters:
Advanced forcing (mode + persistence)#
Type stubs for openswmm.engine._forcing.
- class Forcing(solver)#
Bases:
object- Parameters:
solver (Solver)
- clear_all()#
- Return type:
None
- gage_rainfall(gage, value, *, mode=Ellipsis, persist=Ellipsis)#
- link_flow(link, value, *, mode=Ellipsis, persist=Ellipsis)#
- link_setting(link, value, *, mode=Ellipsis, persist=Ellipsis)#
- node_head_boundary(node, value, *, mode=Ellipsis, persist=Ellipsis)#
- node_lat_inflow(node, value, *, mode=Ellipsis, persist=Ellipsis)#
- node_quality(node, pollutant, mass_rate, *, mode=Ellipsis, persist=Ellipsis)#
- subcatchment_evap(sub, value, *, mode=Ellipsis, persist=Ellipsis)#
Control rules#
Type stubs for openswmm.engine._controls.
- class ControlRule(id, text)#
Bases:
NamedTupleCreate new instance of ControlRule(id, text)
- class Controls(solver)#
Bases:
MutableSequence[ControlRule]- Parameters:
solver (Solver)
- append(value)#
S.append(value) – append value to the end of the sequence
- Parameters:
value (Any)
- Return type:
None
- clear() None -- remove all items from S#
- Return type:
None
- insert(idx, value)#
S.insert(index, value) – insert value before index
Pollutants#
Type stubs for openswmm.engine._pollutants.
- class Pollutant(solver, index)#
Bases:
object- set_co_pollutant(co, fraction)#
- units: ConcentrationUnits#
Water quality (landuse, buildup, washoff, treatment)#
Type stubs for openswmm.engine._quality.
- class Quality(solver)#
Bases:
object- Parameters:
solver (Solver)
- clear_treatment(node, pollutant)#
- get_buildup(landuse, pollutant)#
- get_washoff(landuse, pollutant)#
- set_buildup(landuse, pollutant, *, func, c1, c2, c3, normalizer=Ellipsis)#
- set_treatment(node, pollutant, expression)#
- set_washoff(landuse, pollutant, *, func, coeff, expon, sweep_effic=Ellipsis, bmp_effic=Ellipsis)#
Tables (time series, curves, patterns)#
Type stubs for openswmm.engine._tables.
- class Curve(solver, index)#
Bases:
_PointTable
Infrastructure (transects, streets, inlets, LIDs)#
Type stubs for openswmm.engine._infrastructure.
- class LIDs(solver)#
Bases:
object- Parameters:
solver (Solver)
- set_drain(idx, *, coeff, expon, offset)#
- set_soil(idx, *, thick, porosity, fc, wp, ksat, kslope)#
- set_storage(idx, *, thick, void_frac, ksat)#
- set_surface(idx, *, storage, roughness, slope)#
- class Streets(solver)#
Bases:
object- Parameters:
solver (Solver)
- set_params(idx, *, t_crown, h_curb, sx, n_road, gutter_depres=Ellipsis, gutter_width=Ellipsis, sides=Ellipsis, back_width=Ellipsis, back_slope=Ellipsis, back_n=Ellipsis)#
Hot start#
Hot start files (Pythonic v1 surface)#
Type stubs for openswmm.engine._hotstart.
- class SaveSchedule(solver)#
Bases:
MutableSequence[SaveScheduleEntry]- Parameters:
solver (Solver)
- append(value)#
S.append(value) – append value to the end of the sequence
- Parameters:
value (Any)
- Return type:
None
- clear() None -- remove all items from S#
- Return type:
None
Mass balance#
Mass balance & continuity (Pythonic v1 surface)#
Type stubs for openswmm.engine._massbalance.
Statistics#
Simulation statistics (Pythonic v1 surface)#
Type stubs for openswmm.engine._statistics.
Output reader (binary .out file)#
Binary output file reader (Pythonic v1 surface)#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._output_reader.
- class OutputReader(path)#
Bases:
objectRead a SWMM binary
.outfile.- Parameters:
path (_PathLike)
- close()#
- Return type:
None
- link_attributes(link, period)#
- link_result(period, var)#
- link_series(link, var, *, start=Ellipsis, end=Ellipsis)#
- node_attributes(node, period)#
- node_result(period, var)#
- node_series(node, var, *, start=Ellipsis, end=Ellipsis)#
- subcatchment_attributes(sub, period)#
- subcatchment_result(period, var)#
- subcatchment_series(sub, var, *, start=Ellipsis, end=Ellipsis)#
- system_series(var, *, start=Ellipsis, end=Ellipsis)#
- flow_units: FlowUnits#
Spatial (CRS, coordinates, vertices, polygons)#
Type stubs for openswmm.engine._spatial.
Enumerations#
Enumerations#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._enums.
Integer-backed enums mirroring the C API enum definitions in
openswmm_engine.h. All enums inherit from enum.IntEnum and
can be compared directly with integer return values from C API functions.
- class BuildupFunc(*values)
Bases:
IntEnumPollutant buildup function type.
- Variables:
NONE – No buildup.
POW – Power function.
EXP – Exponential function.
SAT – Saturation function.
EXT – External time series.
- NONE = 0
- POW = 1
- EXP = 2
- SAT = 3
- EXT = 4
- class ConcentrationUnits(*values)
Bases:
IntEnumPollutant concentration units.
- Variables:
MG_PER_L – Milligrams per liter.
UG_PER_L – Micrograms per liter.
COUNT_PER_L – Counts per liter.
- MG_PER_L = 0
- UG_PER_L = 1
- COUNT_PER_L = 2
- class EngineState(*values)
Bases:
IntEnumEngine lifecycle states.
Mirrors
SWMM_EngineStateinopenswmm_engine.h.- CREATED = 1
- OPENED = 2
- INITIALIZED = 3
- STARTED = 4
- RUNNING = 5
- ENDED = 6
- CLOSED = 7
- BUILDING = 8
- class ErrorCode(*values)
Bases:
IntEnumSWMM C API return codes.
Mirrors the integer error codes returned by every C API entry point in
openswmm_engine.h.- Variables:
OK – Success (0).
NOMEM – Out of memory.
INPFILE – Cannot open input file.
RPTFILE – Cannot open report file.
OUTFILE – Cannot open output file.
PARSE – Input file parse error.
LIFECYCLE – Function called in wrong lifecycle state.
BADHANDLE – NULL or invalid engine handle.
BADINDEX – Object index out of range.
BADPARAM – Invalid parameter value.
PLUGIN – Plugin error.
IO – I/O error.
HOTSTART – Hot start file error.
CRS – Coordinate reference system error.
NUMERICAL – Numerical error.
INTERNAL – Internal error.
- OK = 0
- NOMEM = 1
- INPFILE = 2
- RPTFILE = 3
- OUTFILE = 4
- PARSE = 5
- LIFECYCLE = 6
- BADHANDLE = 7
- BADINDEX = 8
- BADPARAM = 9
- PLUGIN = 10
- IO = 11
- HOTSTART = 12
- CRS = 13
- NUMERICAL = 14
- DEPENDENCY = 15
- INTERNAL = 99
- class FlowUnits(*values)
Bases:
IntEnumFlow unit systems.
- Variables:
CFS – Cubic feet per second (US customary).
GPM – Gallons per minute (US customary).
MGD – Million gallons per day (US customary).
CMS – Cubic meters per second (SI).
LPS – Liters per second (SI).
MLD – Million liters per day (SI).
- CFS = 0
- GPM = 1
- MGD = 2
- CMS = 3
- LPS = 4
- MLD = 5
- class ForcingMode(*values)
Bases:
IntEnumForcing application mode.
Determines how a forced value is combined with the model-computed value.
- Variables:
REPLACE – Replace the computed value entirely.
ADD – Add the forced value to the computed value.
- REPLACE = 0
- ADD = 1
- class ForcingTarget(*values)
Bases:
IntEnumObject type codes used with
openswmm.engine.Forcing.clear.- Variables:
NODE – Node forcing target.
LINK – Link forcing target.
SUBCATCH – Subcatchment forcing target.
GAGE – Rain gage forcing target.
- NODE = 0
- LINK = 1
- SUBCATCH = 2
- GAGE = 3
- class GageDataSource(*values)
Bases:
IntEnumRain gage data source type.
- Variables:
TIMESERIES – Data comes from a time series object.
FILE – Data comes from an external rainfall file.
- TIMESERIES = 0
- FILE = 1
- class GageRainType(*values)
Bases:
IntEnumRain gage rainfall data format.
- Variables:
INTENSITY – Rainfall intensity (depth/time).
VOLUME – Rainfall volume (depth per interval).
CUMULATIVE – Cumulative rainfall depth.
- INTENSITY = 0
- VOLUME = 1
- CUMULATIVE = 2
- class InfilModel(*values)
Bases:
IntEnumInfiltration model type.
- Variables:
HORTON – Original Horton model.
MOD_HORTON – Modified Horton model.
GREEN_AMPT – Green-Ampt model.
MOD_GREEN_AMPT – Modified Green-Ampt model.
CURVE_NUMBER – SCS Curve Number model.
- HORTON = 0
- MOD_HORTON = 1
- GREEN_AMPT = 2
- MOD_GREEN_AMPT = 3
- CURVE_NUMBER = 4
- class LidType(*values)
Bases:
IntEnumLow Impact Development (LID) control type.
- Variables:
BIO_CELL – Bioretention cell.
RAIN_GARDEN – Rain garden.
GREEN_ROOF – Green roof.
INFIL_TRENCH – Infiltration trench.
PERM_PAVEMENT – Permeable pavement.
RAIN_BARREL – Rain barrel.
ROOFTOP_DISCONN – Rooftop disconnection.
VEGETATIVE_SWALE – Vegetative swale.
- BIO_CELL = 0
- RAIN_GARDEN = 1
- GREEN_ROOF = 2
- INFIL_TRENCH = 3
- PERM_PAVEMENT = 4
- RAIN_BARREL = 5
- ROOFTOP_DISCONN = 6
- VEGETATIVE_SWALE = 7
- class LinkType(*values)
Bases:
IntEnumLink type codes for
openswmm.engine.ModelBuilder.add_link.- Variables:
CONDUIT – Conduit (pipe or channel).
PUMP – Pump.
ORIFICE – Orifice.
WEIR – Weir.
OUTLET – Outlet.
- CONDUIT = 0
- PUMP = 1
- ORIFICE = 2
- WEIR = 3
- OUTLET = 4
- class NodeType(*values)
Bases:
IntEnumNode type codes for
openswmm.engine.ModelBuilder.add_node.- Variables:
JUNCTION – Junction node.
OUTFALL – Outfall node.
STORAGE – Storage unit.
DIVIDER – Flow divider.
- JUNCTION = 0
- OUTFALL = 1
- STORAGE = 2
- DIVIDER = 3
- class ObjectType(*values)
Bases:
IntEnumSWMM object type codes.
- Variables:
GAGE – Rain gage.
SUBCATCH – Subcatchment.
NODE – Node (junction, outfall, storage, divider).
LINK – Link (conduit, pump, orifice, weir, outlet).
POLLUT – Pollutant.
LANDUSE – Land use category.
TIMESER – Time series.
TABLE – Curve / table.
RDII – RDII unit hydrograph group.
UNITHYD – Unit hydrograph.
SNOWMELT – Snowmelt parameter set.
SHAPE – Custom cross-section shape.
LID – LID control.
- GAGE = 0
- SUBCATCH = 1
- NODE = 2
- LINK = 3
- POLLUT = 4
- LANDUSE = 5
- TIMESER = 6
- TABLE = 7
- RDII = 8
- UNITHYD = 9
- SNOWMELT = 10
- SHAPE = 11
- LID = 12
- class OrificeType(*values)
Bases:
IntEnumOrifice flow-attack classification.
Mirrors
SWMM_OrificeTypeinopenswmm_links.h.- SIDE = 0
- BOTTOM = 1
- class OutLinkVar(*values)
Bases:
IntEnumLink output result variable indices.
- Variables:
FLOW – Flow rate.
DEPTH – Water depth.
VELOCITY – Flow velocity.
VOLUME – Stored volume.
CAPACITY – Capacity fraction (flow / full flow).
POLLUT_BASE – Base index for pollutant concentrations.
- FLOW = 0
- DEPTH = 1
- VELOCITY = 2
- VOLUME = 3
- CAPACITY = 4
- POLLUT_BASE = 5
- class OutNodeVar(*values)
Bases:
IntEnumNode output result variable indices.
- Variables:
DEPTH – Water depth.
HEAD – Hydraulic head.
VOLUME – Stored volume.
LATERAL_INFLOW – Lateral inflow rate.
TOTAL_INFLOW – Total inflow rate.
OVERFLOW – Overflow / flooding rate.
POLLUT_BASE – Base index for pollutant concentrations.
- DEPTH = 0
- HEAD = 1
- VOLUME = 2
- LATERAL_INFLOW = 3
- TOTAL_INFLOW = 4
- OVERFLOW = 5
- POLLUT_BASE = 6
- class OutSubcatchVar(*values)
Bases:
IntEnumSubcatchment output result variable indices.
- Variables:
RAINFALL – Rainfall rate.
SNOW_DEPTH – Snow depth.
EVAP – Evaporation rate.
INFIL – Infiltration rate.
RUNOFF – Runoff rate.
GW_FLOW – Groundwater outflow rate.
GW_ELEV – Groundwater table elevation.
SOIL_MOIST – Soil moisture fraction.
POLLUT_BASE – Base index for pollutant concentrations.
- RAINFALL = 0
- SNOW_DEPTH = 1
- EVAP = 2
- INFIL = 3
- RUNOFF = 4
- GW_FLOW = 5
- GW_ELEV = 6
- SOIL_MOIST = 7
- POLLUT_BASE = 8
- class OutSystemVar(*values)
Bases:
IntEnumSystem-wide output result variable indices.
- Variables:
TEMPERATURE – Air temperature.
RAINFALL – System-wide rainfall rate.
SNOW_DEPTH – Average snow depth.
EVAP – System-wide evaporation rate.
INFIL – System-wide infiltration rate.
RUNOFF – System-wide runoff rate.
DW_INFLOW – Dry-weather inflow rate.
GW_INFLOW – Groundwater inflow rate.
LAT_INFLOW – Total lateral inflow rate.
FLOODING – Total flooding rate.
OUTFLOW – Total outfall outflow rate.
STORAGE – Total network storage volume.
EVAP_TOTAL – Actual evaporation rate.
PET – Potential evapotranspiration rate.
- TEMPERATURE = 0
- RAINFALL = 1
- SNOW_DEPTH = 2
- EVAP = 3
- INFIL = 4
- RUNOFF = 5
- DW_INFLOW = 6
- GW_INFLOW = 7
- LAT_INFLOW = 8
- FLOODING = 9
- OUTFLOW = 10
- STORAGE = 11
- EVAP_TOTAL = 12
- PET = 13
- class OutfallType(*values)
Bases:
IntEnumOutfall boundary condition type.
- FREE = 0
- NORMAL = 1
- FIXED = 2
- TIDAL = 3
- TIMESERIES = 4
- class OutletRatingType(*values)
Bases:
IntEnumOutlet rating-curve classification.
Mirrors
SWMM_OutletRatingTypeinopenswmm_links.h.- FUNCTIONAL_HEAD = 0
- FUNCTIONAL_DEPTH = 1
- TABULAR_HEAD = 2
- TABULAR_DEPTH = 3
- class PatternType(*values)
Bases:
IntEnumTime pattern type.
- Variables:
MONTHLY – Monthly variation pattern.
DAILY – Daily variation pattern.
HOURLY – Hourly variation pattern.
WEEKEND – Weekend hourly variation pattern.
- MONTHLY = 0
- DAILY = 1
- HOURLY = 2
- WEEKEND = 3
- class RouteModel(*values)
Bases:
IntEnumHydraulic routing models.
- Variables:
STEADY – Steady-state routing.
KINWAVE – Kinematic wave routing.
DYNWAVE – Dynamic wave (full Saint-Venant) routing.
- STEADY = 0
- KINWAVE = 1
- DYNWAVE = 2
- class RoutingTotal(*values)
Bases:
IntEnumRouting mass balance component codes.
- Variables:
DRY_WEATHER – Dry-weather inflow.
WET_WEATHER – Wet-weather (runoff) inflow.
GW_INFLOW – Groundwater inflow.
RDII – RDII inflow.
EXTERNAL – External inflow.
FLOODING – Flooding loss.
OUTFLOW – Outfall outflow.
EVAP_LOSS – Evaporation loss.
SEEP_LOSS – Seepage loss.
INIT_STORAGE – Initial network storage.
FINAL_STORAGE – Final network storage.
- DRY_WEATHER = 0
- WET_WEATHER = 1
- GW_INFLOW = 2
- RDII = 3
- EXTERNAL = 4
- FLOODING = 5
- OUTFLOW = 6
- EVAP_LOSS = 7
- SEEP_LOSS = 8
- INIT_STORAGE = 9
- FINAL_STORAGE = 10
- class RunoffTotal(*values)
Bases:
IntEnumRunoff mass balance component codes.
- Variables:
RAINFALL – Total rainfall.
EVAP – Evaporation loss.
INFIL – Infiltration loss.
RUNOFF – Surface runoff.
SNOWREMOV – Snow removal.
INITSTORE – Initial surface storage.
FINALSTORE – Final surface storage.
- RAINFALL = 0
- EVAP = 1
- INFIL = 2
- RUNOFF = 3
- SNOWREMOV = 4
- INITSTORE = 5
- FINALSTORE = 6
- class WarnCode(*values)
Bases:
IntEnumEngine warning codes emitted via the warning callback.
- Variables:
NONE – No warning.
HOTSTART_MISSING – Object missing during hot start application.
UNKNOWN_SECTION – Unrecognised input section encountered.
UNKNOWN_OPTION – Unrecognised option keyword.
DEPRECATED_KW – Deprecated keyword used.
PLUGIN_INIT – Plugin initialisation issue.
NUMERICAL – Numerical instability handled gracefully.
STABILITY_LIMIT – Timestep limited by stability criterion.
- NONE = 0
- HOTSTART_MISSING = 1
- UNKNOWN_SECTION = 2
- UNKNOWN_OPTION = 3
- DEPRECATED_KW = 4
- PLUGIN_INIT = 5
- NUMERICAL = 6
- STABILITY_LIMIT = 7
- class WashoffFunc(*values)
Bases:
IntEnumPollutant washoff function type.
- Variables:
NONE – No washoff.
EXP – Exponential washoff.
RC – Rating curve washoff.
EMC – Event mean concentration.
- NONE = 0
- EXP = 1
- RC = 2
- EMC = 3
- class WeirType(*values)
Bases:
IntEnumWeir flow classification.
Mirrors
SWMM_WeirTypeinopenswmm_links.h.- TRANSVERSE = 0
- SIDEFLOW = 1
- VNOTCH = 2
- TRAPEZOIDAL = 3
- ROADWAY = 4
- class XSectShape(*values)
Bases:
IntEnumCross-section shape codes.
- Variables:
CIRCULAR – Circular pipe.
FILLED_CIRCULAR – Filled circular pipe.
RECT_CLOSED – Closed rectangular.
RECT_OPEN – Open rectangular.
TRAPEZOIDAL – Trapezoidal channel.
TRIANGULAR – Triangular channel.
PARABOLIC – Parabolic channel.
POWER – Power-law shaped channel.
MODBASKETHANDLE – Modified baskethandle.
EGGSHAPED – Egg-shaped pipe.
HORSESHOE – Horseshoe-shaped pipe.
GOTHIC – Gothic arch pipe.
CATENARY – Catenary-shaped pipe.
SEMIELLIPTICAL – Semi-elliptical pipe.
BASKETHANDLE – Baskethandle-shaped pipe.
SEMICIRCULAR – Semi-circular pipe.
IRREGULAR – Irregular (from transect data).
CUSTOM – Custom shape (from shape curve).
FORCE_MAIN – Force main (pressurized).
- CIRCULAR = 0
- FILLED_CIRCULAR = 1
- RECT_CLOSED = 2
- RECT_OPEN = 3
- TRAPEZOIDAL = 4
- TRIANGULAR = 5
- PARABOLIC = 6
- POWER = 7
- MODBASKETHANDLE = 8
- EGGSHAPED = 9
- HORSESHOE = 10
- GOTHIC = 11
- CATENARY = 12
- SEMIELLIPTICAL = 13
- BASKETHANDLE = 14
- SEMICIRCULAR = 15
- IRREGULAR = 16
- CUSTOM = 17
- FORCE_MAIN = 18
Optional modules#
These extensions are only built when the matching CMake flag is enabled
on the parent C/C++ engine. They expose HAS_* flags at runtime so
client code can degrade gracefully.
GeoPackage I/O (OPENSWMM_WITH_GEOPACKAGE=ON)#
GeoPackage Access#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._geopackage.
The GeoPackage class provides read/write access to SWMM GeoPackage
databases for querying multi-run simulation results, importing observed data,
and performing spatial analysis.
This module is optional - it is only available when the package is built
with OPENSWMM_WITH_GEOPACKAGE=ON.
- class GeoPackage(path)#
Bases:
objectGeoPackage database access for SWMM models, results, and observed data.
Wraps the
swmm_gpkg_*entry points of the OpenSWMM GeoPackage plugin. Supports the context-manager protocol for automatic resource cleanup.Example:
from openswmm.engine import GeoPackage with GeoPackage("model.gpkg") as gpkg: sims = gpkg.simulation_ids() times, depths = gpkg.read_result_ts( sims[0], "NODE", "J1", "depth")
- Variables:
last_error – The most recent error message reported by the underlying GeoPackage library.
- Parameters:
path (str)
Open a GeoPackage file.
- Parameters:
path (str) – Path to the
.gpkgfile.- Raises:
RuntimeError – If the file cannot be opened.
- __init__(path)#
Open a GeoPackage file.
- Parameters:
path (str) – Path to the
.gpkgfile.- Raises:
RuntimeError – If the file cannot be opened.
- Return type:
None
- begin()#
Begin a transaction for bulk operations.
- Raises:
RuntimeError – If the transaction cannot be started.
- Return type:
None
- close()#
Close the database connection.
Calling
closemore than once is harmless.- Return type:
None
- commit()#
Commit the current transaction.
- Raises:
RuntimeError – If the commit fails.
- Return type:
None
- create_observed_series(name, variable, obj_type='', obj_id='', source='', units='')#
Create an observed-data series.
- Parameters:
name (str) – Unique series name.
variable (str) – Variable being measured.
obj_type (str) – Model object type for linking, or
""for none.obj_id (str) – Model object ID for linking, or
""for none.source (str) – Data source description, or
""for none.units (str) – Measurement units, or
""for none.
- Returns:
Series ID (M{>= 0}).
- Return type:
- Raises:
RuntimeError – If the series cannot be created.
- property last_error: str#
The last error message from the GeoPackage library.
- Returns:
Error message string, or
""if no error has been reported.- Return type:
- object_counts(sim_id)#
Return model object counts for a simulation.
- observed_series_count()#
Return the number of observed-data series.
- Returns:
Observed-series count.
- Return type:
- observed_value_count(series_id)#
Return the number of values in an observed series.
- query_double(sql)#
Execute a read-only SQL query and return the first double result.
- Parameters:
sql (str) –
SELECTquery string.- Returns:
Double-precision result of the query.
- Return type:
- Raises:
RuntimeError – If the query fails.
- query_int(sql)#
Execute a read-only SQL query and return the first integer result.
- read_observed_values(series_id)#
Read observed-timeseries values. GIL is released for the duration of the SQL read.
- read_result_ts(sim_id, obj_type, obj_id, variable)#
Read a result timeseries as NumPy arrays. GIL is released for the duration of the SQL execution.
- Parameters:
- Returns:
Tuple
(times, values)as NumPyfloat64arrays.- Return type:
Tuple[np.ndarray, np.ndarray]
@see: L{result_ts_count}
- read_summary(sim_id, obj_type, obj_id, variable)#
Read a single summary statistic value.
- result_ts_count(sim_id, obj_type, obj_id, variable)#
Return the number of result timeseries records for a query.
- rollback()#
Roll back the current transaction.
- Raises:
RuntimeError – If the rollback fails.
- Return type:
None
- simulation_count()#
Return the number of simulation runs in the file.
- Returns:
Simulation count.
- Return type:
- simulation_ids()#
Return all simulation IDs as a list of strings.
- Returns:
List of simulation identifier strings.
- Return type:
List[str]
- topology_edge_count(sim_id)#
Return the number of topology edges for a simulation.
- variable_count()#
Return the number of output variables defined.
- Returns:
Variable count.
- Return type:
- write_observed_value(series_id, timestamp, value, flag='')#
Write a single observed data point.
- Parameters:
series_id (int) – Series ID returned by
create_observed_series.timestamp (str) – ISO 8601 timestamp string.
value (float) – Measured value.
flag (str) – Quality flag (e.g.
"A","P"), or""for none.
- Raises:
RuntimeError – If the write fails.
- Return type:
None
- write_observed_values(series_id, timestamps, values, flags=None)#
Bulk-write observed data points. GIL is released for the duration of the bulk SQL insert.
For best performance wrap the call in a transaction:
gpkg.begin() gpkg.write_observed_values(sid, timestamps, values) gpkg.commit()
- Parameters:
- Raises:
RuntimeError – If the bulk write fails.
MemoryError – If the C string-pointer arrays cannot be allocated.
- Return type:
None
- is_registered()#
Check whether the GeoPackage plugin is registered.
- Returns:
Trueif registered.- Return type:
- register(key='', org='', email='', deploy='')#
Register the GeoPackage plugin.
2-D surface routing (OPENSWMM_BUILD_2D=ON)#
2D Surface Routing#
- author:
Caleb Buahin
- copyright:
Copyright (c) 2026 Caleb Buahin
- license:
MIT
Type stubs for openswmm.engine._2d.
The Surface2D class provides read/write access to the optional 2D
surface routing module (requires OPENSWMM_BUILD_2D=ON and SUNDIALS).
- class Surface2D(engine_ptr)#
Bases:
objectRead/write interface to the optional 2D surface routing module.
The module solves the depth-averaged shallow-water equations on an unstructured triangular mesh and is integrated in time with CVODE from SUNDIALS. Two-way coupling with the 1D drainage network is supported per-vertex and per-triangle.
Example:
from openswmm.engine import Solver from openswmm.engine._2d import Surface2D with Solver("model.inp", "model.rpt", "model.out") as s: mesh = Surface2D(s.handle) if mesh.is_active: depths = mesh.get_depths()
- Variables:
_engine – Internal pointer to the underlying C{SWMM_Engine} handle (managed by the Cython extension).
- Parameters:
engine_ptr (int)
Construct a
Surface2Daccessor from a raw engine handle.- Parameters:
engine_ptr (int) – The raw engine handle (
SWMM_Enginecast to an integer viasolver.handle).
- __init__(engine_ptr)#
Construct a
Surface2Daccessor from a raw engine handle.- Parameters:
engine_ptr (int) – The raw engine handle (
SWMM_Enginecast to an integer viasolver.handle).- Return type:
None
- property abs_tolerance: float#
CVODE absolute tolerance.
- Returns:
Absolute tolerance.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property boundary_edge_count: int#
Number of boundary edges in the 2D mesh.
- Returns:
Boundary edge count.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property cvode_last_step: float#
Last CVODE internal step size.
- Returns:
Step size.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property cvode_steps: int#
Number of CVODE internal steps in the last advance.
- Returns:
Step count.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property dry_depth: float#
Dry-depth threshold (m); triangles below this are treated as dry.
- Returns:
Threshold depth.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- force_clear_all()#
Clear all 2D forcings.
- Raises:
RuntimeError – If the C API call fails.
- Return type:
None
- force_coupling_flux(idx, value, mode=1, persist=0)#
Force a coupling flux on a specific triangle.
- Parameters:
- Raises:
RuntimeError – If the C API rejects the forcing.
- Return type:
None
- force_rainfall(idx, value, mode=1, persist=0)#
Force rainfall on a specific triangle.
- Parameters:
- Raises:
RuntimeError – If the C API rejects the forcing.
- Return type:
None
- force_rainfall_uniform(value, mode=1, persist=0)#
Force uniform rainfall on all triangles.
- Parameters:
- Raises:
RuntimeError – If the C API rejects the forcing.
- Return type:
None
- get_coupling_flux(idx)#
Return the coupling flux at a specific triangle.
- Parameters:
idx (int) – Triangle index.
- Returns:
Coupling flux value (positive = into 2D surface).
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_coupling_fluxes()#
Return coupling fluxes for all triangles as a NumPy array. GIL is released during the C call.
- Returns:
Array of shape
(n_triangles,)with dtypefloat64. Positive values denote flux into the 2D surface.- Return type:
np.ndarray
- Raises:
RuntimeError – If the C API call fails.
- get_depth(idx)#
Return the water depth at a specific triangle.
- Parameters:
idx (int) – Triangle index.
- Returns:
Water depth.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_depths()#
Return depths for all triangles as a NumPy array. GIL is released during the C call.
- Returns:
Array of shape
(n_triangles,)with dtypefloat64.- Return type:
np.ndarray
- Raises:
RuntimeError – If the C API call fails.
- get_edge_bc_cum_flux(tri_idx, edge)#
Return the cumulative boundary flux for a triangle edge.
- Parameters:
- Returns:
Cumulative boundary flux through the edge.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_edge_bc_head(tri_idx, edge)#
Return the boundary head for a triangle edge.
- Parameters:
- Returns:
Boundary head value.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_edge_bc_slope(tri_idx, edge)#
Return the boundary slope for a triangle edge.
- Parameters:
- Returns:
Boundary slope.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_edge_bc_type(tri_idx, edge)#
Return the boundary condition type for a triangle edge.
- Parameters:
- Returns:
Boundary condition type code.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_edge_flux_bulk()#
Return normal edge fluxes for all triangle edges. GIL is released during the C call.
Indexed as
[tri*3 + localEdge].
- get_edge_geometry_bulk()#
Return time-invariant edge lengths and outward unit normal components. GIL is released during the C call.
Returns
(length, nx, ny), each indexed as[tri*3 + localEdge].
- get_head(idx)#
Return the total head at a specific triangle.
- Parameters:
idx (int) – Triangle index.
- Returns:
Total head.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_heads()#
Return total heads for all triangles as a NumPy array. GIL is released during the C call.
- Returns:
Array of shape
(n_triangles,)with dtypefloat64.- Return type:
np.ndarray
- Raises:
RuntimeError – If the C API call fails.
- get_net_source(idx)#
Return the net source term at a specific triangle.
- Parameters:
idx (int) – Triangle index.
- Returns:
Net source term.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_rainfall(idx)#
Return the current rainfall at a specific triangle.
- Parameters:
idx (int) – Triangle index.
- Returns:
Rainfall rate.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_stat_max_depths()#
Return cumulative maximum-depth statistics for all triangles.
- Returns:
Array of shape
(n_triangles,)with dtypefloat64.- Return type:
np.ndarray
- Raises:
RuntimeError – If the C API call fails.
- get_triangle_area(idx)#
Return the area of a triangle.
- Parameters:
idx (int) – Triangle index.
- Returns:
Triangle area in project units squared.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_triangle_centroid(idx)#
Return the (cx, cy, cz) centroid coordinates for a triangle.
- get_triangle_coupled_node(tri_idx)#
Return the SWMM node index coupled to a triangle.
- Parameters:
tri_idx (int) – Triangle index.
- Returns:
Node index, or
-1if no coupling exists.- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_triangle_mannings(idx)#
Return Manning’s M{n} for a triangle.
- Parameters:
idx (int) – Triangle index.
- Returns:
Manning’s M{n} roughness.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_triangle_neighbours(idx)#
Return the (n0, n1, n2) neighbour triangle indices.
- get_triangle_vertices(idx)#
Return the (v0, v1, v2) vertex indices for a triangle.
- get_vertex_coords()#
Return (x, y, z) NumPy arrays for all vertices. GIL is released during the C call.
- Returns:
Tuple
(x, y, z), each of shape(n_vertices,)with dtypefloat64.- Return type:
tuple[np.ndarray, np.ndarray, np.ndarray]
- Raises:
RuntimeError – If the C API call fails.
- get_vertex_coupled_node(vertex_idx)#
Return the SWMM node index coupled to a vertex.
- Parameters:
vertex_idx (int) – Vertex index.
- Returns:
Node index, or
-1if no coupling exists.- Return type:
- Raises:
RuntimeError – If the C API call fails.
- get_vertex_heads()#
Return reconstructed heads at all vertices as a NumPy array. GIL is released during the C call.
- Returns:
Array of shape
(n_vertices,)with dtypefloat64.- Return type:
np.ndarray
- Raises:
RuntimeError – If the C API call fails.
- property is_active: bool#
Trueif the 2D module is active for this simulation.- Returns:
Activation flag.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property max_depth: float#
Maximum depth across all triangles.
- Returns:
Maximum depth.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property n_triangles: int#
Number of mesh triangles.
- Returns:
Triangle count.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property n_vertices: int#
Number of mesh vertices.
- Returns:
Vertex count.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property rel_tolerance: float#
CVODE relative tolerance.
- Returns:
Relative tolerance.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- set_edge_bc_head(tri_idx, edge, head)#
Set the boundary head for a triangle edge.
- Parameters:
- Raises:
RuntimeError – If the C API rejects the assignment.
- Return type:
None
- set_edge_bc_slope(tri_idx, edge, slope)#
Set the boundary slope for a triangle edge.
- Parameters:
- Raises:
RuntimeError – If the C API rejects the assignment.
- Return type:
None
- set_edge_bc_type(tri_idx, edge, bc_type)#
Set the boundary condition type for a triangle edge.
- Parameters:
- Raises:
RuntimeError – If the C API rejects the assignment.
- Return type:
None
- set_vertex_z(idx, z)#
Set the ground elevation of a mesh vertex.
Updates derived geometry for every triangle incident to this vertex (centroid Z, per-edge midpoint Z). XY-derived fields are unaffected. When called during a running simulation, solver state (head, depth) is intentionally not rewritten — the implied depth = head - bed therefore changes by the same amount as bed.
- Parameters:
- Raises:
RuntimeError – If the C API call fails.
- Return type:
None
- property total_exchange_flow: float#
Total exchange flow rate.
- Returns:
Exchange flow rate in
m^3/s(positive = into 1D network).- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property total_volume: float#
Total 2D surface volume (sum of M{depth x area}).
- Returns:
Total volume.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property triangle_coupling_count: int#
Number of triangle-to-node coupling points.
- Returns:
Coupling count.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
- property vertex_coupling_count: int#
Number of vertex-to-node coupling points.
- Returns:
Coupling count.
- Return type:
- Raises:
RuntimeError – If the C API call fails.
Legacy SWMM 5 — compatibility layer#
The openswmm.legacy.engine and openswmm.legacy.output
subpackages preserve the original EPA SWMM 5.x C solver and binary-output
reader verbatim for backward compatibility with existing scripts.
No new development happens here; new projects should prefer
openswmm.engine (above).
See also
Legacy SWMM 5 — Compatibility Layer — task-oriented guide for the legacy layer.
Migrating from SWMM 5 to v6 — translating legacy patterns to the OpenSWMM 6 API.
openswmm.legacy.engine — SWMM 5.x solver#
openswmm.legacy.engine#
Legacy EPA SWMM 5.x solver bindings (Cython).
This subpackage provides the Solver class for running SWMM
simulations, enumeration types for object/property access, and utility
functions for date encoding and version queries.
- class SWMMObjects(*values)#
Bases:
EnumEnumeration of SWMM objects.
- Variables:
RAIN_GAGE – Raingage object
SUBCATCHMENT – Subcatchment object
NODE – Node object
LINK – Link object
AQUIFER – Aquifer object
SNOWPACK – Snowpack object
UNIT_HYDROGRAPH – Unit hydrograph object
LID – LID object
STREET – Street object
INLET – Inlet object
TRANSECT – Transect object
XSECTION_SHAPE – Cross-section shape object
CONTROL_RULE – Control rule object
POLLUTANT – Pollutant object
LANDUSE – Land use object
CURVE – Curve object
TIMESERIES – Time series object
TIME_PATTERN – Time pattern object
SYSTEM – System object
- RAIN_GAGE = Ellipsis#
- SUBCATCHMENT = Ellipsis#
- NODE = Ellipsis#
- LINK = Ellipsis#
- AQUIFER = Ellipsis#
- SNOWPACK = Ellipsis#
- UNIT_HYDROGRAPH = Ellipsis#
- LID = Ellipsis#
- STREET = Ellipsis#
- INLET = Ellipsis#
- TRANSECT = Ellipsis#
- XSECTION_SHAPE = Ellipsis#
- CONTROL_RULE = Ellipsis#
- POLLUTANT = Ellipsis#
- LANDUSE = Ellipsis#
- CURVE = Ellipsis#
- TIMESERIES = Ellipsis#
- TIME_PATTERN = Ellipsis#
- SYSTEM = Ellipsis#
- class SWMMNodeTypes(*values)#
Bases:
EnumEnumeration of SWMM node types.
- Variables:
JUNCTION – Junction node
OUTFALL – Outfall node
STORAGE – Storage node
DIVIDER – Divider node
- JUNCTION = Ellipsis#
- OUTFALL = Ellipsis#
- STORAGE = Ellipsis#
- DIVIDER = Ellipsis#
- class SWMMLinkTypes(*values)#
Bases:
EnumEnumeration of SWMM link types.
- Variables:
CONDUIT – Conduit link
PUMP – Pump link
ORIFICE – Orifice link
WEIR – Weir link
OUTLET – Outlet link
- CONDUIT = Ellipsis#
- PUMP = Ellipsis#
- ORIFICE = Ellipsis#
- WEIR = Ellipsis#
- OUTLET = Ellipsis#
- class SWMMRainGageProperties(*values)#
Bases:
EnumEnumeration of SWMM raingage properties.
- Variables:
GAGE_TOTAL_PRECIPITATION – Total precipitation
GAGE_RAINFALL – Rainfall
GAGE_SNOWFALL – Snowfall
- GAGE_TOTAL_PRECIPITATION = Ellipsis#
- GAGE_RAINFALL = Ellipsis#
- GAGE_SNOWFALL = Ellipsis#
- class SWMMSubcatchmentProperties(*values)#
Bases:
EnumEnumeration of SWMM subcatchment properties.
- Variables:
AREA – Area
RAINGAGE – Raingage
RAINFALL – Rainfall
EVAPORATION – Evaporation
INFILTRATION – Infiltration
RUNOFF – Runoff
REPORT_FLAG – Report flag
WIDTH – Width
SLOPE – Slope
CURB_LENGTH – Curb length
API_RAINFALL – API Rainfall
API_SNOWFALL – API Snowfall
POLLUTANT_BUILDUP – Pollutant buildup
EXTERNAL_POLLUTANT_BUILDUP – External pollutant buildup
POLLUTANT_RUNOFF_CONCENTRATION – Pollutant runoff concentration
POLLUTANT_PONDED_CONCENTRATION – Pollutant ponded concentration
POLLUTANT_TOTAL_LOAD – Pollutant total load
- AREA = Ellipsis#
- RAINGAGE = Ellipsis#
- RAINFALL = Ellipsis#
- EVAPORATION = Ellipsis#
- INFILTRATION = Ellipsis#
- RUNOFF = Ellipsis#
- REPORT_FLAG = Ellipsis#
- WIDTH = Ellipsis#
- SLOPE = Ellipsis#
- OUTLET_TYPE = Ellipsis#
- OUTLET_INDEX = Ellipsis#
- INFILTRATION_MODEL = Ellipsis#
- FRACTION_IMPERVIOUS = Ellipsis#
- SUB_AREA_ROUTE_TO = Ellipsis#
- SUB_AREA_FRACTION_OUTLET = Ellipsis#
- SUB_AREA_MANNINGS_N = Ellipsis#
- SUB_AREA_FRACTION_AREA = Ellipsis#
- SUB_AREA_DEPRESSION_STORAGE = Ellipsis#
- SUB_AREA_INFLOW = Ellipsis#
- SUB_AREA_RUNOFF = Ellipsis#
- SUB_AREA_DEPTH = Ellipsis#
- LID_UNITS_COUNT = Ellipsis#
- LID_UNITS_PERV_AREA = Ellipsis#
- LID_UNITS_FLOW_TO_PERV_AREA = Ellipsis#
- LID_UNITS_DRAIN_FLOW = Ellipsis#
- LID_UNIT_REPLICATES = Ellipsis#
- LID_UNIT_AREA = Ellipsis#
- LID_UNIT_FULL_WIDTH = Ellipsis#
- LID_UNIT_BOTTOM_WIDTH = Ellipsis#
- LID_UNIT_INIT_SATURATION = Ellipsis#
- LID_UNIT_FROM_IMPERVIOUS = Ellipsis#
- LID_UNIT_FROM_PERVIOUS = Ellipsis#
- LID_UNIT_TO_PERVIOUS = Ellipsis#
- LID_UNIT_RECEIVING_OUTLET_TYPE = Ellipsis#
- LID_UNIT_RECEIVING_OUTLET_INDEX = Ellipsis#
- LID_UNIT_SURFACE_DEPTH = Ellipsis#
- LID_UNIT_SOIL_MOISTURE = Ellipsis#
- LID_UNIT_GREEN_AMPT_CAPILLARY_SUCTION = Ellipsis#
- LID_UNIT_GREEN_AMPT_SATURATED_CONDUCTIVITY = Ellipsis#
- LID_UNIT_GREEN_AMPT_MAX_SOIL_MOISTURE_DEFICIT = Ellipsis#
- CURB_LENGTH = Ellipsis#
- API_RAINFALL = Ellipsis#
- API_SNOWFALL = Ellipsis#
- POLLUTANT_BUILDUP = Ellipsis#
- EXTERNAL_POLLUTANT_BUILDUP = Ellipsis#
- POLLUTANT_RUNOFF_CONCENTRATION = Ellipsis#
- POLLUTANT_PONDED_CONCENTRATION = Ellipsis#
- POLLUTANT_TOTAL_LOAD = Ellipsis#
- class SWMMNodeProperties(*values)#
Bases:
EnumEnumeration of SWMM node properties.
- Variables:
TYPE – Node type
INVERT_ELEVATION – Invert elevation
MAX_DEPTH – Maximum depth
DEPTH – Depth
HYDRAULIC_HEAD – Hydraulic head
VOLUME – Volume
LATERAL_INFLOW – Lateral inflow
TOTAL_INFLOW – Total inflow
FLOODING – Flooding
REPORT_FLAG – Report flag
SURCHARGE_DEPTH – Surcharge depth
PONDING_AREA – Ponding area
INITIAL_DEPTH – Initial depth
POLLUTANT_CONCENTRATION – Pollutant concentration
POLLUTANT_LATERAL_MASS_FLUX – Pollutant lateral mass flux
OUTFLOW – Total outflow through downstream links
- TYPE = Ellipsis#
- INVERT_ELEVATION = Ellipsis#
- MAX_DEPTH = Ellipsis#
- DEPTH = Ellipsis#
- HYDRAULIC_HEAD = Ellipsis#
- VOLUME = Ellipsis#
- LATERAL_INFLOW = Ellipsis#
- TOTAL_INFLOW = Ellipsis#
- FLOODING = Ellipsis#
- REPORT_FLAG = Ellipsis#
- SURCHARGE_DEPTH = Ellipsis#
- PONDING_AREA = Ellipsis#
- INITIAL_DEPTH = Ellipsis#
- POLLUTANT_CONCENTRATION = Ellipsis#
- POLLUTANT_LATERAL_MASS_FLUX = Ellipsis#
- OUTFLOW = Ellipsis#
- class SWMMLinkProperties(*values)#
Bases:
EnumEnumeration of SWMM link properties.
- Variables:
TYPE – Link type
START_NODE – Start node
END_NODE – End node
LENGTH – Length
SLOPE – Slope
FULL_DEPTH – Full depth
FULL_FLOW – Full flow
SETTING – Setting
TIME_OPEN – Time open
TIME_CLOSED – Time closed
FLOW – Flow
DEPTH – Depth
VELOCITY – Velocity
TOP_WIDTH – Top width
REPORT_FLAG – Report flag
START_NODE_OFFSET – Start node offset
END_NODE_OFFSET – End node offset
INITIAL_FLOW – Initial flow
FLOW_LIMIT – Flow limit
INLET_LOSS – Inlet loss
OUTLET_LOSS – Outlet loss
AVERAGE_LOSS – Average loss
SEEPAGE_RATE – Seepage rate
HAS_FLAPGATE – Has flapgate
POLLUTANT_CONCENTRATION – Pollutant concentration
POLLUTANT_LOAD – Pollutant load
POLLUTANT_LATERAL_MASS_FLUX – Pollutant lateral mass flux
- TYPE = Ellipsis#
- START_NODE = Ellipsis#
- END_NODE = Ellipsis#
- LENGTH = Ellipsis#
- SLOPE = Ellipsis#
- FULL_DEPTH = Ellipsis#
- FULL_FLOW = Ellipsis#
- SETTING = Ellipsis#
- TIME_OPEN = Ellipsis#
- TIME_CLOSED = Ellipsis#
- FLOW = Ellipsis#
- DEPTH = Ellipsis#
- VELOCITY = Ellipsis#
- TOP_WIDTH = Ellipsis#
- VOLUME = Ellipsis#
- CAPACITY = Ellipsis#
- REPORT_FLAG = Ellipsis#
- START_NODE_OFFSET = Ellipsis#
- END_NODE_OFFSET = Ellipsis#
- INITIAL_FLOW = Ellipsis#
- FLOW_LIMIT = Ellipsis#
- INLET_LOSS = Ellipsis#
- OUTLET_LOSS = Ellipsis#
- AVERAGE_LOSS = Ellipsis#
- SEEPAGE_RATE = Ellipsis#
- HAS_FLAPGATE = Ellipsis#
- POLLUTANT_CONCENTRATION = Ellipsis#
- POLLUTANT_LOAD = Ellipsis#
- POLLUTANT_LATERAL_MASS_FLUX = Ellipsis#
- class SWMMSystemProperties(*values)#
Bases:
EnumEnumeration of SWMM system properties.
- Variables:
START_DATE – Start date for the simulation
CURRENT_DATE – Current date for the simulation
ELAPSED_TIME – Elapsed time for the simulation
ROUTING_STEP – Routing time step
MAX_ROUTING_STEP – Maximum routing time step
REPORT_STEP – Report time step
TOTAL_STEPS – Total number of steps
NO_REPORT_FLAG – No report flag
FLOW_UNITS – Flow units
END_DATE – End date for the simulation
REPORT_START_DATE – Report start date
UNIT_SYSTEM – Unit system
SURCHARGE_METHOD – Surcharge method
ALLOW_PONDING – Allow ponding
INTERTIAL_DAMPING – Inertial damping
NORMAL_FLOW_LIMITED – Normal flow limited
SKIP_STEADY_STATE – Skip steady state
IGNORE_RAINFALL – Ignore rainfall
IGNORE_RDII – Ignore RDII
IGNORE_SNOWMELT – Ignore snowmelt
IGNORE_GROUNDWATER – Ignore groundwater
IGNORE_ROUTING – Ignore routing
IGNORE_QUALITY – Ignore quality
RULE_STEP – Rule step
SWEEP_START – Sweep start
SWEEP_END – Sweep end
MAX_TRIALS – Maximum trials
NUM_THREADS – Number of threads
MIN_ROUTE_STEP – Minimum routing step
LENGTHENING_STEP – Lengthening step
START_DRY_DAYS – Start dry days
COURANT_FACTOR – Courant factor
MIN_SURF_AREA – Minimum surface area
MIN_SLOPE – Minimum slope
RUNOFF_ERROR – Runoff error
FLOW_ERROR – Flow error
QUAL_ERROR – Quality error
HEAD_TOL – Head tolerance
SYS_FLOW_TOL – System flow tolerance
LAT_FLOW_TOL – Lateral flow tolerance
- START_DATE = Ellipsis#
- CURRENT_DATE = Ellipsis#
- ELAPSED_TIME = Ellipsis#
- ROUTING_STEP = Ellipsis#
- MAX_ROUTING_STEP = Ellipsis#
- REPORT_STEP = Ellipsis#
- TOTAL_STEPS = Ellipsis#
- NO_REPORT_FLAG = Ellipsis#
- FLOW_UNITS = Ellipsis#
- END_DATE = Ellipsis#
- REPORT_START_DATE = Ellipsis#
- UNIT_SYSTEM = Ellipsis#
- SURCHARGE_METHOD = Ellipsis#
- ALLOW_PONDING = Ellipsis#
- INTERTIAL_DAMPING = Ellipsis#
- NORMAL_FLOW_LIMITED = Ellipsis#
- SKIP_STEADY_STATE = Ellipsis#
- IGNORE_RAINFALL = Ellipsis#
- IGNORE_RDII = Ellipsis#
- IGNORE_SNOWMELT = Ellipsis#
- IGNORE_GROUNDWATER = Ellipsis#
- IGNORE_ROUTING = Ellipsis#
- IGNORE_QUALITY = Ellipsis#
- ERROR_CODE = Ellipsis#
- RULE_STEP = Ellipsis#
- SWEEP_START = Ellipsis#
- SWEEP_END = Ellipsis#
- MAX_TRIALS = Ellipsis#
- NUM_THREADS = Ellipsis#
- MIN_ROUTE_STEP = Ellipsis#
- LENGTHENING_STEP = Ellipsis#
- START_DRY_DAYS = Ellipsis#
- COURANT_FACTOR = Ellipsis#
- MIN_SURF_AREA = Ellipsis#
- MIN_SLOPE = Ellipsis#
- RUNOFF_ERROR = Ellipsis#
- FLOW_ERROR = Ellipsis#
- QUAL_ERROR = Ellipsis#
- HEAD_TOL = Ellipsis#
- SYS_FLOW_TOL = Ellipsis#
- LAT_FLOW_TOL = Ellipsis#
- class SWMMFlowUnits(*values)#
Bases:
EnumEnumeration of SWMM flow units.
- Variables:
CFS – Cubic feet per second
GPM – Gallons per minute
MGD – Million gallons per day
CMS – Cubic meters per second
LPS – Liters per second
MLD – Million liters per day
- CFS = Ellipsis#
- GPM = Ellipsis#
- MGD = Ellipsis#
- CMS = Ellipsis#
- LPS = Ellipsis#
- MLD = Ellipsis#
- class SWMMAPIErrors(*values)#
Bases:
EnumEnumeration of SWMM API errors.
- Variables:
PROJECT_NOT_OPENED – Project not opened
SIMULATION_NOT_STARTED – Simulation not started
SIMULATION_NOT_ENDED – Simulation not ended
- PROJECT_NOT_OPENED = Ellipsis#
- SIMULATION_NOT_STARTED = Ellipsis#
- SIMULATION_NOT_ENDED = Ellipsis#
- OBJECT_TYPE = Ellipsis#
- OBJECT_INDEX = Ellipsis#
- OBJECT_NAME = Ellipsis#
- PROPERTY_TYPE = Ellipsis#
- PROPERTY_VALUE = Ellipsis#
- TIME_PERIOD = Ellipsis#
- HOTSTART_FILE_OPEN = Ellipsis#
- HOTSTART_FILE_FORMAT = Ellipsis#
- SIMULATION_IS_RUNNING = Ellipsis#
- run_solver(inp_file, rpt_file=None, out_file=None, swmm_progress_callback=Ellipsis)#
Run a SWMM simulation with a progress callback.
- Parameters:
- Rtype inp_file:
str
- Rtype rpt_file:
str
- Rtype out_file:
str
- Returns:
Error code from the underlying SWMM C API (0 on success, non-zero on failure). Callers should check the return value rather than relying on an exception.
- Return type:
- decode_swmm_datetime(swmm_datetime)#
Decode a SWMM datetime into a datetime object.
- Parameters:
swmm_datetime (float) – SWMM datetime float value
- Returns:
datetime object
- Return type:
datetime
- encode_swmm_datetime(dt)#
Encode a datetime object into a SWMM datetime float value.
- Parameters:
dt (datetime) – datetime object
- Returns:
SWMM datetime float value
- Return type:
- get_error_message(error_code)#
Get the error message for a SWMM error code.
- class SolverState(*values)#
Bases:
EnumAn enumeration to represent the state of the solver.
- CREATED = Ellipsis#
- OPEN = Ellipsis#
- STARTED = Ellipsis#
- FINISHED = Ellipsis#
- ENDED = Ellipsis#
- REPORTED = Ellipsis#
- CLOSED = Ellipsis#
- class CallbackType(*values)#
Bases:
EnumAn enumeration to represent the type of callback.
- BEFORE_INITIALIZE = Ellipsis#
- BEFORE_OPEN = Ellipsis#
- AFTER_OPEN = Ellipsis#
- BEFORE_START = Ellipsis#
- AFTER_START = Ellipsis#
- BEFORE_STEP = Ellipsis#
- AFTER_STEP = Ellipsis#
- BEFORE_END = Ellipsis#
- AFTER_END = Ellipsis#
- BEFORE_REPORT = Ellipsis#
- AFTER_REPORT = Ellipsis#
- BEFORE_CLOSE = Ellipsis#
- AFTER_CLOSE = Ellipsis#
- exception SWMMSolverException(message)#
Bases:
ExceptionException class for SWMM output file processing errors.
Constructor to initialize the exception message.
- Parameters:
message (str) – Error message.
- Return type:
None
- class Solver(inp_file, rpt_file=None, out_file=None, stride_step=300, save_results=True)#
Bases:
objectConstructor to create a new SWMM solver.
- Parameters:
- __init__(inp_file, rpt_file=None, out_file=None, stride_step=300, save_results=True)#
Constructor to create a new SWMM solver.
- add_callback(callback_type, callback)#
Add a callback to the solver.
- Parameters:
callback_type (CallbackType) – Type of callback
callback (callable) – Callback function
- Return type:
None
- add_progress_callback(callback)#
Add a progress callback to the solver.
- Parameters:
callback (callable) – Progress callback function
- Return type:
None
- close()#
Close the solver.
- Returns:
Error code (0 on success or no-op, non-zero on failure; -1 if not in REPORTED state).
- Return type:
- property current_datetime: datetime#
Get the current date of the simulation.
- Returns:
Current date
- Return type:
datetime
- end()#
End the SWMM simulation.
- Returns:
Error code (0 on success or no-op, non-zero on failure; -1 if called from an invalid solver state).
- Return type:
- property end_datetime: datetime#
Get the end date of the simulation.
- Returns:
End date
- Return type:
datetime
- finalize()#
Finalize the solver. Ends simulation, reports the results, and dispose objects.
- Return type:
- get_link_statistics(index)#
Per-link post-simulation statistics.
- get_mass_balance_error()#
Get the mass balance error.
- get_node_statistics(index)#
Per-node post-simulation statistics.
- get_object_count(object_type)#
Get the count of a SWMM object type.
- Parameters:
object_type (SWMMObjects) – SWMM object type
- Returns:
Object count
- Return type:
- get_object_index(object_type, object_name)#
Get the index of a SWMM object.
- Parameters:
object_type (SWMMObjects) – SWMM object type
object_name (str) – Object name
- Returns:
Object index
- Return type:
- get_object_name(object_type, index)#
Get the name of a SWMM object.
- Parameters:
object_type (SWMMObjects) – SWMM object type
index (int) – Object index
- Returns:
Object name
- Return type:
- get_object_names(object_type)#
Get the names of all SWMM objects of a given type.
- Parameters:
object_type (SWMMObjects) – SWMM object type
- Returns:
Object names
- Return type:
List[str]
- get_pump_statistics(index)#
Per-pump post-simulation statistics.
- get_routing_totals()#
Get system-level flow routing mass balance totals.
- get_runoff_totals()#
Get system-level surface runoff mass balance totals.
- get_subcatchment_statistics(index)#
Per-subcatchment post-simulation statistics.
- get_value(object_type, property_type, index, sub_index=Ellipsis)#
Get a SWMM system property value.
- Parameters:
object_type (SWMMObjects) – SWMM object type (e.g., SWMMObjects.NODE)
property_type (Union[SWMMRainGageProperties, SWMMSubcatchmentProperties, SWMMNodeProperties, SWMMLinkProperties, SWMMSystemProperties]) – SWMM system property type (e.g., SWMMSystemProperties.START_DATE)
sub_index (int) – Sub-index (e.g., 0) for properties with sub-indexes. For example pollutant index for POLLUTANT properties.
- Returns:
Property value
- Return type:
double
- initialize()#
Initialize the solver and start the simulation. Calls the open and start methods in the SWMM API.
- Returns:
Error code (0 on success, non-zero from the first failing sub-call).
- Return type:
- open()#
Open the SWMM solver by calling the open method in the SWMM API.
- Returns:
Error code (0 on success or no-op, non-zero on failure; -1 if called from an invalid solver state).
- Return type:
- property progress_callbacks_per_second: int#
Get the number of progress callbacks per second.
- Returns:
Progress callbacks per second
- Return type:
- report()#
Report the results of the SWMM simulation.
- Returns:
Error code (0 on success or no-op, non-zero on failure; -1 if not in ENDED state).
- Return type:
- property report_start_datetime: datetime#
Get the report start date of the simulation.
- Returns:
Report start date
- Return type:
datetime
- property reporting_step: float#
Get the reporting time step of the simulation in seconds.
- Returns:
Reporting time step
- Return type:
double
- property routing_step: float#
Get the routing time step of the simulation in seconds.
- Returns:
Routing time step
- Return type:
double
- save_hotstart(hotstart_file)#
Save a hotstart file.
- set_value(object_type, property_type, index, value, sub_index=Ellipsis)#
Set a SWMM system property value.
- Parameters:
object_type (SWMMObjects) – SWMM object type (e.g., SWMMObjects.NODE)
property_type (Union[SWMMRainGageProperties, SWMMSubcatchmentProperties, SWMMNodeProperties, SWMMLinkProperties, SWMMSystemProperties]) – SWMM system property type (e.g., SWMMSystemProperties.START_DATE)
value (double) – Property value (e.g., 10.0)
sub_index (int) – Sub-index (e.g., 0) for properties with sub-indexes. For example pollutant index for POLLUTANT properties.
- Return type:
None
- property solver_state: SolverState#
Get the state of the solver.
- Returns:
Solver state
- Return type:
- start()#
Start the SWMM solver.
- Returns:
Error code (0 on success or no-op, non-zero on failure; -1 if not in OPEN state).
- Return type:
- property start_datetime: datetime#
Get the start date of the simulation.
- Returns:
Start date
- Return type:
datetime
- step(steps=Ellipsis)#
Step a SWMM simulation forward.
- Parameters:
steps (int) – Number of steps to run. Overrides internal stride step if greater than 0.
- Returns:
Error code (0 on success, non-zero on failure). The simulation transitions to the FINISHED state when complete; poll
solver_stateor readcurrent_datetimefor per-step data.- Return type:
- class LegacyNodes(solver)[source]#
Bases:
objectIterable collection of all SWMM nodes in the model.
- Parameters:
solver (Solver)
- class LegacyNode(solver, index, name='')[source]#
Bases:
objectProperty-based access to a single SWMM node.
- property node_type: SWMMNodeTypes#
- set_lateral_inflow(flow, log=None)[source]#
Prescribe an external lateral inflow at this node.
- Mass balance impact:
Adds flow to the node’s lateral inflow for the current timestep only. The value resets each step — call again to sustain. The injected volume appears in the routing mass balance under
ex_inflow(external inflow).
- Parameters:
flow (float) – Inflow rate in project flow units. Positive = inflow.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- set_pollutant_lateral_mass_flux(value, pollutant_index=0, log=None)[source]#
Set pollutant lateral mass flux at this node.
- Mass balance impact:
The mass flux = value (mass/time). This mass is added to the quality routing mass balance. Must be used together with
set_lateral_inflow()for the mass to be transported.
- Parameters:
value (float) – Mass flux in project mass/time units.
pollutant_index (int) – 0-based pollutant index.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- set_depth(value, log=None)[source]#
Override current water depth at this node.
- Mass balance impact:
Directly changes stored volume — affects storage balance. Use with care: the volume difference is not automatically tracked as an inflow or outflow.
- Parameters:
value (float) – Depth in project length units.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- class LegacyLinks(solver)[source]#
Bases:
objectIterable collection of all SWMM links in the model.
- Parameters:
solver (Solver)
- class LegacyLink(solver, index, name='')[source]#
Bases:
objectProperty-based access to a single SWMM link.
- property link_type: SWMMLinkTypes#
- set_setting(value, log=None)[source]#
Set the link control setting.
- Mass balance impact:
Changes flow capacity — affects routing. For pumps this controls on/off (0 or 1). For orifices/weirs it controls the fraction open (0-1). For conduits this has no direct effect unless used with inlet control.
- Parameters:
value (float) – Setting value (typically 0-1).
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- set_flow(value, log=None)[source]#
Directly override the flow in this link.
- Mass balance impact:
Bypasses hydraulic routing — the specified flow is used regardless of head difference. Use with extreme care as this can break mass balance if the override is inconsistent with node volumes.
- Parameters:
value (float) – Flow rate in project flow units.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- class LegacySubcatchments(solver)[source]#
Bases:
objectIterable collection of all SWMM subcatchments.
- Parameters:
solver (Solver)
- class LegacySubcatchment(solver, index, name='')[source]#
Bases:
objectProperty-based access to a single SWMM subcatchment.
- property infiltration_model: int#
Infiltration model code (0=Horton, 1=ModHorton, 2=GreenAmpt, etc.).
- get_subarea_mannings_n(sub_index)[source]#
Manning’s n for a subarea. sub_index: 0=impervious, 1=pervious.
- get_pollutant_runoff_concentration(pollutant_index=0)[source]#
Current pollutant concentration in runoff.
- set_api_rainfall(value, log=None)[source]#
Override rainfall for this subcatchment.
- Mass balance impact:
Overrides the rainfall used in the runoff calculation for this subcatchment. The overridden value appears in the runoff totals under
rainfall. Resets each timestep.
- Parameters:
value (float) – Rainfall intensity in project rainfall units.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- set_api_snowfall(value, log=None)[source]#
Override snowfall for this subcatchment.
- Mass balance impact:
Overrides the snowfall used in the snow accumulation/melt calculation. Affects the snow balance in runoff totals.
- Parameters:
value (float) – Snowfall rate in project units.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- set_external_pollutant_buildup(value, pollutant_index=0, log=None)[source]#
Add external pollutant buildup on this subcatchment.
- Mass balance impact:
Adds pollutant mass to the surface. This mass is available for washoff and appears in the quality mass balance.
- Parameters:
value (float) – Mass to add in project mass units.
pollutant_index (int) – 0-based pollutant index.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- class LegacyRainGages(solver)[source]#
Bases:
objectIterable collection of all SWMM rain gages.
- Parameters:
solver (Solver)
- class LegacyRainGage(solver, index, name='')[source]#
Bases:
objectProperty-based access to a single SWMM rain gage.
- set_rainfall(value, log=None)[source]#
Override rainfall at this gage.
- Mass balance impact:
Overrides rainfall for all subcatchments linked to this gage. Appears in runoff totals under
rainfall.
- Parameters:
value (float) – Rainfall rate in project rainfall units.
log (ExternalForcingLog | None) – Optional
ExternalForcingLogfor audit.
- Return type:
None
- class LegacySystem(solver)[source]#
Bases:
objectSystem-level properties, simulation settings, and mass balance totals.
Wraps a
Solverinstance and provides convenient property-based access to global simulation parameters and post-simulation mass balance breakdowns.- Parameters:
solver (Solver)
- property flow_units: SWMMFlowUnits#
Flow units used in this simulation.
- property routing_totals: Dict[str, float]#
System-level flow routing mass balance totals.
Returns a dict with keys: dw_inflow, ww_inflow, gw_inflow, ii_inflow, ex_inflow, flooding, outflow, evap_loss, seep_loss, reacted, init_storage, final_storage, pct_error.
Mass balance equation:
total_inflow = dw + ww + gw + ii + ex total_outflow = flooding + outflow + evap_loss + seep_loss storage_change = final_storage - init_storage balance = total_inflow - total_outflow - storage_change
- class ExternalForcingLog[source]#
Bases:
objectAppend-only log that records external forcing applied during a simulation.
Each entry stores the simulation time, target object, property modified, and the value applied.
- record(sim_time, object_type, object_id, property_name, value, mass_balance_category='')[source]#
Append a forcing record.
- Parameters:
sim_time (datetime) – Current simulation datetime.
object_type (str) – E.g.
"node","link","subcatchment".object_id (str) – Object name or index string.
property_name (str) – Property that was set.
value (float) – The value applied.
mass_balance_category (str) – Which mass-balance bucket is affected.
- Return type:
None
- to_dataframe()[source]#
Convert to a
pandas.DataFrame.Columns:
time,object_type,object_id,property,value,mass_balance_category.- Raises:
ImportError – If pandas is not installed.
- Return type:
pd.DataFrame
openswmm.legacy.output — SWMM 5.x binary output reader#
The openswmm.legacy.output subpackage reads the binary .out file
produced by either the legacy SWMM 5.x solver or the v6.0 engine.
openswmm.legacy.output#
Legacy EPA SWMM 5.x binary output file reader (Cython).
This subpackage provides the Output class for reading SWMM
.out result files, and enumeration types for element and attribute
access.
- class UnitSystem(*values)#
Bases:
EnumEnumeration of the unit system used in the output file.
- Variables:
US – US customary units.
SI – SI metric units.
- US = Ellipsis#
- SI = Ellipsis#
- class FlowUnits(*values)#
Bases:
EnumEnumeration of the flow units used in the simulation.
- Variables:
CFS – Cubic feet per second.
GPM – Gallons per minute.
MGD – Million gallons per day.
CMS – Cubic meters per second.
LPS – Liters per second.
MLD – Million liters per day.
- CFS = Ellipsis#
- GPM = Ellipsis#
- MGD = Ellipsis#
- CMS = Ellipsis#
- LPS = Ellipsis#
- MLD = Ellipsis#
- class ConcentrationUnits(*values)#
Bases:
EnumEnumeration of the concentration units used in the simulation.
- Variables:
MG – Milligrams per liter.
UG – Micrograms per liter.
COUNT – Counts per liter.
NONE – No units.
- MG = Ellipsis#
- UG = Ellipsis#
- COUNT = Ellipsis#
- NONE = Ellipsis#
- class ElementType(*values)#
Bases:
EnumEnumeration of the SWMM element types.
- Variables:
SUBCATCHMENT – Subcatchment.
NODE – Node.
LINK – Link.
SYS – System.
POLLUTANT – Pollutant.
- SUBCATCHMENT = Ellipsis#
- NODE = Ellipsis#
- LINK = Ellipsis#
- SYSTEM = Ellipsis#
- POLLUTANT = Ellipsis#
- class TimeAttribute(*values)#
Bases:
EnumEnumeration of the report time related attributes.
- Variables:
REPORT_STEP – Report step size (seconds).
NUM_PERIODS – Number of reporting periods.
- REPORT_STEP = Ellipsis#
- NUM_PERIODS = Ellipsis#
- class SubcatchAttribute(*values)#
Bases:
EnumEnumeration of the subcatchment attributes.
- Variables:
RAINFALL – Subcatchment rainfall (in/hr or mm/hr).
SNOW_DEPTH – Subcatchment snow depth (in or mm).
EVAPORATION_LOSS – Subcatchment evaporation loss (in/hr or mm/hr).
INFILTRATION_LOSS – Subcatchment infiltration loss (in/hr or mm/hr).
RUNOFF_RATE – Subcatchment runoff flow (flow units).
GROUNDWATER_OUTFLOW – Subcatchment groundwater flow (flow units).
GW_TABLE – Subcatchment groundwater elevation (ft or m).
SOIL_MOISTURE – Subcatchment soil moisture content (-).
POLLUTANT_CONCENTRATION – Subcatchment pollutant concentration (-).
- RAINFALL = Ellipsis#
- SNOW_DEPTH = Ellipsis#
- EVAPORATION_LOSS = Ellipsis#
- INFILTRATION_LOSS = Ellipsis#
- RUNOFF_RATE = Ellipsis#
- GROUNDWATER_OUTFLOW = Ellipsis#
- GROUNDWATER_TABLE_ELEVATION = Ellipsis#
- SOIL_MOISTURE = Ellipsis#
- POLLUTANT_CONCENTRATION = Ellipsis#
- class NodeAttribute(*values)#
Bases:
EnumEnumeration of the node attributes.
- Variables:
INVERT_DEPTH – Node depth above invert (ft or m).
HYDRAULIC_HEAD – Node hydraulic head (ft or m).
STORED_VOLUME – Node volume stored (ft3 or m3).
LATERAL_INFLOW – Node lateral inflow (flow units).
TOTAL_INFLOW – Node total inflow (flow units).
FLOODING_LOSSES – Node flooding losses (flow units).
POLLUTANT_CONCENTRATION – Node pollutant concentration (-).
- INVERT_DEPTH = Ellipsis#
- HYDRAULIC_HEAD = Ellipsis#
- STORED_VOLUME = Ellipsis#
- LATERAL_INFLOW = Ellipsis#
- TOTAL_INFLOW = Ellipsis#
- FLOODING_LOSSES = Ellipsis#
- POLLUTANT_CONCENTRATION = Ellipsis#
- class LinkAttribute(*values)#
Bases:
EnumEnumeration of the link attributes.
- Variables:
FLOW_RATE – Link flow rate (flow units).
FLOW_DEPTH – Link flow depth (ft or m).
FLOW_VELOCITY – Link flow velocity (ft/s or m/s).
FLOW_VOLUME – Link flow volume (ft3 or m3).
CAPACITY – Link capacity (fraction of conduit filled).
POLLUTANT_CONCENTRATION – Link pollutant concentration (-).
- FLOW_RATE = Ellipsis#
- FLOW_DEPTH = Ellipsis#
- FLOW_VELOCITY = Ellipsis#
- FLOW_VOLUME = Ellipsis#
- CAPACITY = Ellipsis#
- POLLUTANT_CONCENTRATION = Ellipsis#
- class SystemAttribute(*values)#
Bases:
EnumEnumeration of the system attributes.
- Variables:
AIR_TEMP – Air temperature (deg. F or deg. C).
RAINFALL – Rainfall intensity (in/hr or mm/hr).
SNOW_DEPTH – Snow depth (in or mm).
EVAP_INFIL_LOSS – Evaporation and infiltration loss rate (in/day or mm/day).
RUNOFF_FLOW – Runoff flow (flow units).
DRY_WEATHER_INFLOW – Dry weather inflow (flow units).
GROUNDWATER_INFLOW – Groundwater inflow (flow units).
RDII_INFLOW – Rainfall Derived Infiltration and Inflow (RDII) (flow units).
DIRECT_INFLOW – Direct inflow (flow units).
TOTAL_LATERAL_INFLOW – Total lateral inflow; sum of variables 4 to 8 (flow units).
FLOOD_LOSSES – Flooding losses (flow units).
OUTFALL_FLOWS – Outfall flow (flow units).
VOLUME_STORED – Volume stored in storage nodes (ft3 or m3).
EVAPORATION_RATE – Evaporation rate (in/day or mm/day).
- AIR_TEMP = Ellipsis#
- RAINFALL = Ellipsis#
- SNOW_DEPTH = Ellipsis#
- EVAP_INFIL_LOSS = Ellipsis#
- RUNOFF_FLOW = Ellipsis#
- DRY_WEATHER_INFLOW = Ellipsis#
- GROUNDWATER_INFLOW = Ellipsis#
- RDII_INFLOW = Ellipsis#
- DIRECT_INFLOW = Ellipsis#
- TOTAL_LATERAL_INFLOW = Ellipsis#
- FLOOD_LOSSES = Ellipsis#
- OUTFALL_FLOWS = Ellipsis#
- VOLUME_STORED = Ellipsis#
- EVAPORATION_RATE = Ellipsis#
- exception SWMMOutputException(message)#
Bases:
ExceptionException class for SWMM output file processing errors.
Constructor to initialize the exception message.
- Parameters:
message (str) – Error message.
- Return type:
None
- class Output(output_file)#
Bases:
objectClass to read and process the output file generated by the SWMM simulation.
- Variables:
_output_file_handle – Handle to the SWMM output file.
_version – Version of the SWMM output file.
_units – Unit system used in the SWMM output file.
_flow_units – Flow units used in the SWMM output file.
_output_size – Size of the project in the SWMM output file.
_pollutant_units – Pollutant units used in the SWMM output file.
_start_date – Start date of the simulation in the SWMM output file.
_report_step – Report step size in seconds.
_num_periods – Number of reporting periods.
_times – Times of the simulation in the SWMM output file.
- Parameters:
output_file (str)
Constructor to open the SWMM output file.
- Parameters:
output_file (str) – Path to the SWMM output file.
- __init__(output_file)#
Constructor to open the SWMM output file.
- Parameters:
output_file (str) – Path to the SWMM output file.
- Return type:
None
- property flow_units: FlowUnits#
Method to get the flow units used in the SWMM output file.
- Returns:
Flow units used in the SWMM output file.
- Return type:
- get_element_name(element_type, element_index)#
Method to get the name of an element in the SWMM output file.
- get_element_names(element_type)#
Method to get the names of all elements of a given type in the SWMM output file.
- get_link_timeseries(element_index, attribute, start_date_index=Ellipsis, end_date_index=Ellipsis, sub_index=Ellipsis)#
Method to get the time series data for a link attribute in the SWMM output file.
- Parameters:
element_index (int) – Index of the link.
attribute (LinkAttribute) – Link attribute.
start_date_index (int) – Start date index. Default is 0.
end_date_index (int) – End date index. Default is the last date index.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
Time series data for the link attribute.
- Return type:
Dict[datetime, double]
- get_link_values_by_time_and_attribute(time_index, attribute, sub_index=Ellipsis)#
Method to get the link values for all links for a given time index and attribute.
- Parameters:
time_index (int) – Time index.
attribute (LinkAttribute) – Link attribute.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
Link values for all links.
- Return type:
- get_link_values_by_time_and_element_index(time_index, element_index)#
Method to get all attributes of a given link for specified time.
- get_node_timeseries(element_index, attribute, start_date_index=Ellipsis, end_date_index=Ellipsis, sub_index=Ellipsis)#
Method to get the time series data for a node attribute in the SWMM output file.
- Parameters:
attribute (NodeAttribute) – Node attribute.
start_date_index (int) – Start date index. Default is 0.
end_date_index (int) – End date index. Default is the last date index.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
Time series data for the node attribute.
- Return type:
Dict[datetime, double]
- get_node_values_by_time_and_attribute(time_index, attribute, sub_index=Ellipsis)#
Method to get the node values for all nodes for a given time index and attribute.
- Parameters:
time_index (int) – Time index.
attribute (NodeAttribute) – Node attribute.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
Node values for all nodes.
- Return type:
- get_node_values_by_time_and_element_index(time_index, element_index)#
Method to get all attributes of a given node for specified time.
- get_num_properties(element_type)#
Method to get the number of properties for an element type in the SWMM output file.
- get_num_variables(element_type)#
Method to get the number of variables for an element type in the SWMM output file.
- get_property_code(element_type, property_index)#
Method to get the property code for an element type in the SWMM output file.
- get_property_codes(element_type)#
Method to get the property codes for an element type in the SWMM output file.
- get_property_value(element_type, element_index, property_code)#
Method to get the property value for an element in the SWMM output file.
- get_property_values(element_type, element_index)#
Method to get the property values for an element type in the SWMM output file.
- get_subcatchment_timeseries(element_index, attribute, start_date_index=Ellipsis, end_date_index=Ellipsis, sub_index=Ellipsis)#
Method to get the time series data for a subcatchment attribute in the SWMM output file.
- Parameters:
attribute (SubcatchAttribute) – Subcatchment attribute.
start_date_index (int) – Start date index. Default is 0.
end_date_index (int) – End date index. Default is the last date index.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
Time series data for the subcatchment attribute.
- Return type:
Dict[datetime, double]
- get_subcatchment_values_by_time_and_attribute(time_index, attribute, sub_index=Ellipsis)#
Method to get the subcatchment values for all subcatchments for a given time index and attribute.
- Parameters:
time_index (int) – Time index.
attribute (SubcatchAttribute) – Subcatchment attribute.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
Subcatchment values for all subcatchments.
- Return type:
- get_subcatchment_values_by_time_and_element_index(time_index, element_index)#
Method to get all attributes of a given subcatchment for specified time.
- get_system_timeseries(attribute, start_date_index=Ellipsis, end_date_index=Ellipsis, sub_index=Ellipsis)#
Method to get the time series data for a system attribute in the SWMM output file.
- Parameters:
attribute (SystemAttribute) – System attribute.
start_date_index (int) – Start date index. Default is 0.
end_date_index (int) – End date index. Default is the last date index.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
Time series data for the system attribute.
- Return type:
Dict[datetime, double]
- get_system_values_by_time(time_index)#
Method to get all attributes of the system for specified time.
- get_system_values_by_time_and_attribute(time_index, attribute, sub_index=Ellipsis)#
Method to get the system values for a given time index and attribute.
- Parameters:
time_index (int) – Time index.
attribute (SystemAttribute) – System attribute.
sub_index (int) – Attribute index for the subcatchment non enumerated attributes primarily for the pollutants
- Returns:
System values.
- Return type:
- get_time_attribute(time_attribute)#
Method to get the temporal attributes of the simulation in the SWMM output file.
- Parameters:
time_attribute (TimeAttribute) – Temporal attribute.
- Returns:
Temporal attributes of the simulation in the SWMM output file.
- Return type:
- get_variable_code(element_type, variable_index)#
Method to get the variable code for an element type in the SWMM output file.
- get_variable_codes(element_type)#
Method to get the variable codes for an element type in the SWMM output file.
- property output_size: Dict[str, int]#
Method to get the size of the project in the SWMM output file.
- Returns:
Size of the project in the SWMM output file.
- Return type:
- property pollutant_units: List[ConcentrationUnits]#
Method to get the pollutant units used in the SWMM output file.
- Returns:
Pollutant units used in the SWMM output file.
- Return type:
List[ConcentrationUnits]
- property start_date: datetime#
Method to get the start date of the simulation in the SWMM output file.
- Returns:
Start date of the simulation in the SWMM output file.
- Return type:
datetime
- property times: List[datetime]#
Method to get the times of the simulation in the SWMM output file.
- Returns:
Times of the simulation in the SWMM output file.
- Return type:
List[datetime]
- property units: Tuple[UnitSystem, FlowUnits, List[ConcentrationUnits] | None]#
Method to get the unit system used in the SWMM output file.
- Returns:
Tuple of the unit system, flow units, and pollutant units used in the SWMM output file.
- Return type:
Tuple[UnitSystem, FlowUnits, Optional[List[ConcentrationUnits]]]