Network Elements Reference¶
pywmp.network provides the basin model element classes that compose
multi-subbasin simulation networks. Elements are wired together in a
BasinModel (via pywmp.workflow.DesignStormSimulation or directly
through pywmp.simulation.engine.BasinModel).
pywmp.network¶
from pywmp.network import (
SubbasinElement,
ReachElement,
JunctionElement,
ReservoirElement,
DiversionElement,
ROMElement,
)
| Class | HEC-HMS equivalent | Purpose |
|---|---|---|
SubbasinElement |
Subbasin | Loss + transform + baseflow → runoff |
ReachElement |
Reach | Channel routing (Muskingum, lag, …) |
JunctionElement |
Junction | Sum flows from multiple upstream elements |
ReservoirElement |
Reservoir | Storage routing via LevelPoolReservoir |
DiversionElement |
Diversion | Split flow by fraction or fixed rate |
ROMElement |
— | Wraps a 2D ROMSimulation as a network node |
SubbasinElement¶
class SubbasinElement(
name, loss_model, transform_model,
baseflow_model=None, units='USC'
)
Assembles a complete subbasin by composing any compatible loss, transform, and optional baseflow model.
| Parameter | Type | Description |
|---|---|---|
name |
str | Element identifier |
loss_model |
object | Any object with .compute(precip) → (effective, loss) |
transform_model |
object | Any object with .compute(effective) → TimeSeries |
baseflow_model |
object | None | Optional; .compute(times[, recharge]) → TimeSeries |
Methods
SubbasinElement.run(rainfall: TimeSeries) -> TimeSeries # total runoff
Example
from pywmp.network import SubbasinElement
from pywmp.losses import SCSCurveLoss
from pywmp.transform import SCSUnitHydrograph
from pywmp.baseflow import RecessionBaseflow
sb = SubbasinElement(
name="B1",
loss_model=SCSCurveLoss(CN=78, area_mi2=2.5),
transform_model=SCSUnitHydrograph(lag_hr=1.2, area_mi2=2.5),
baseflow_model=RecessionBaseflow(Q0=3.0, recession_k=0.9),
)
runoff_ts = sb.run(precip_ts)
ReachElement¶
class ReachElement(name, routing_model, units='USC')
Routes flow through a channel reach using any routing model.
| Parameter | Type | Description |
|---|---|---|
name |
str | Element identifier |
routing_model |
object | Any object with .compute(inflow) → TimeSeries |
from pywmp.network import ReachElement
from pywmp.routing import MuskingumRouting
reach = ReachElement("R1", MuskingumRouting(K_hr=0.8, x=0.2))
routed = reach.run(upstream_flow_ts)
JunctionElement¶
class JunctionElement(name, units='USC')
Sums two or more upstream flow TimeSeries at a confluence point.
from pywmp.network import JunctionElement
j = JunctionElement("Outlet")
total = j.run([flow_b1, flow_b2, routed_r1])
ReservoirElement¶
class ReservoirElement(name, reservoir_model, units='USC')
Wraps a LevelPoolReservoir as a network node.
from pywmp.network import ReservoirElement
from pywmp.reservoir import LevelPoolReservoir
res_elem = ReservoirElement("Pond1", LevelPoolReservoir(elev, stor, outlets))
outflow, elev_ts = res_elem.run(inflow_ts)
DiversionElement¶
class DiversionElement(name, fraction=None, fixed_rate=None, units='USC')
Splits inflow into a diverted portion and a main-channel continuation.
Supply either fraction (0–1) or fixed_rate (cfs or m³/s).
from pywmp.network import DiversionElement
div = DiversionElement("Div1", fraction=0.30) # 30 % diverted
main_flow, diverted_flow = div.run(inflow_ts)
ROMElement¶
class ROMElement(name, rom_simulation, units='USC')
Embeds a ROMSimulation (2D shallow-water) as a node in a 1D basin
network. Inflow from upstream elements is applied as a boundary condition
to the 2D domain; the outlet hydrograph is returned as the element output.
from pywmp.network import ROMElement
from pywmp.rom import ROMSimulation
rom_elem = ROMElement("ROM_Cell_1", rom_sim)
outlet_ts = rom_elem.run(inflow_ts)