OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
openswmm::NodeData Struct Reference

Structure-of-Arrays storage for all nodes. More...

#include <NodeData.hpp>

Collaboration diagram for openswmm::NodeData:

Public Member Functions

int count () const noexcept
 Number of nodes.
 
void resize (int n)
 Resize all arrays to hold exactly n nodes.
 
void grow_to (int n)
 Grow all arrays to hold at least n nodes, preserving existing data.
 
void erase_at (int idx)
 Erase the node at index idx from every parallel array.
 
void resize_loads (int n_pollutants)
 Resize pollutant load arrays after pollutant count is known.
 
void resize_quality (int n_pollutants)
 Resize per-node quality arrays after pollutant count is known.
 
void shrink_to_fit ()
 Release excess vector capacity accumulated during parsing.
 
void save_state () noexcept
 Snapshot current state into old-step arrays before solving.
 
void reset_state () noexcept
 Reset state variables, applying init_depth from input.
 
void clearInflowSources () noexcept
 Zero routing-phase inflow source arrays.
 

Public Attributes

std::vector< NodeTypetype
 Node type for each node.
 
std::vector< double > invert_elev
 Invert elevation (project length units).
 
std::vector< double > full_depth
 Full depth of the node (project length units).
 
std::vector< double > init_depth
 Initial water depth (project length units).
 
std::vector< double > sur_depth
 Maximum depth allowed at the node (ponding or surcharge limit).
 
std::vector< double > ponded_area
 Ponding area at the surface (sq project length units).
 
std::vector< OutfallTypeoutfall_type
 Outfall boundary condition type.
 
std::vector< double > outfall_param
 Fixed outfall stage or tidal curve / time series index.
 
std::vector< uint8_t > outfall_has_flap_gate
 True if the outfall has a gated flap (uint8_t: 0=no, 1=yes).
 
std::vector< int > outfall_route_to
 Subcatchment index to route outfall discharge to (-1 = none).
 
std::vector< int > outfall_link_idx
 Cached index of the conduit connected to this outfall (-1 if none).
 
std::vector< double > outfall_link_offset
 Conduit offset at the outfall end (ft), matching the link stored in outfall_link_idx. Zero for non-outfalls.
 
std::vector< double > outfall_2d_head
 Cached 2D surface head at the outfall coupling point (project length).
 
std::vector< int > storage_curve
 Storage curve index into TableData (CURVE_STORAGE).
 
std::vector< std::string > storage_curve_name
 Curve name for deferred resolution (populated during parsing).
 
std::vector< double > storage_a
 Functional storage area parameter A (area = A * depth^B + C).
 
std::vector< double > storage_b
 Functional storage area parameter B.
 
std::vector< double > storage_c
 Functional storage area parameter C (baseline area).
 
std::vector< double > storage_seep_rate
 Seepage rate from storage node (project units/day).
 
std::vector< double > storage_evap_frac
 Fraction of potential evaporation realized at storage node (0-1).
 
std::vector< double > storage_evap_loss
 Storage node evaporation loss this timestep (ft3).
 
std::vector< double > storage_exfil_loss
 Storage node exfiltration loss this timestep (ft3).
 
std::vector< double > exfil_suction
 Green-Ampt suction head for exfiltration (in or mm, converted to ft).
 
std::vector< double > exfil_ksat
 Green-Ampt saturated hydraulic conductivity for exfiltration (in/hr or mm/hr, converted to ft/sec).
 
std::vector< double > exfil_imd
 Green-Ampt initial moisture deficit for exfiltration (0-1).
 
std::vector< DividerTypedivider_type
 Divider method (DividerType enum value).
 
std::vector< double > divider_cutoff
 Cutoff flow for CUTOFF dividers.
 
std::vector< double > divider_cd
 Weir discharge coefficient for WEIR dividers.
 
std::vector< double > divider_max_depth
 Weir max depth for WEIR dividers.
 
std::vector< int > divider_curve
 Diversion curve index for TABULAR dividers (-1 = none).
 
std::vector< int > divider_link
 Diversion link index (-1 = not set).
 
std::vector< std::string > divider_link_name
 Diversion link name (for deferred resolution).
 
std::vector< std::string > divider_curve_name
 Diversion curve name (for deferred resolution, TABULAR only).
 
std::vector< double > depth
 Current water depth above invert (project length units).
 
std::vector< double > head
 Current water surface head (project length units = invert + depth).
 
std::vector< double > volume
 Current water volume (project volume units).
 
std::vector< double > lat_flow
 Current lateral inflow (project flow units).
 
std::vector< double > user_lat_flow
 User-forced lateral inflow set via the API (project flow units).
 
std::vector< double > runoff_inflow
 Interpolated surface runoff from subcatchments (project flow units).
 
std::vector< double > gw_inflow
 Interpolated groundwater flow from subcatchments (project flow units).
 
std::vector< double > ext_inflow
 External (timeseries/baseline) inflows (project flow units).
 
std::vector< double > dwf_inflow
 Dry weather flow inflows (project flow units).
 
std::vector< double > rdii_inflow
 RDII unit hydrograph inflows (project flow units).
 
std::vector< double > iface_inflow
 Interface file (upstream model coupling) inflows (project flow units).
 
std::vector< double > coupling_inflow
 2D ↔ 1D coupling exchange flow at the node (project flow units).
 
std::vector< double > qual_mass_in
 Accumulated quality mass inflow rate per (node, pollutant).
 
std::vector< double > qual_vol_in
 Accumulated volume inflow rate per node (ft3/sec).
 
std::vector< double > lid_drain_qual_load
 LID drain quality mass rate per (node, pollutant) (mass/sec).
 
std::vector< double > lid_drain_qual_vol
 LID drain volume inflow rate per node (ft3/sec).
 
std::vector< double > conc
 Current quality concentration at each node.
 
std::vector< double > conc_old
 Previous-step quality at each node.
 
std::vector< double > hrt
 Hydraulic residence time for storage nodes (seconds).
 
std::vector< double > user_conc_mass_flux
 User-forced quality mass flux at each node (mass/sec).
 
int conc_n_pollutants = 0
 Number of pollutants in the quality arrays.
 
std::vector< double > inflow
 Current total inflow to the node (project flow units).
 
std::vector< double > outflow
 Current total outflow from the node (project flow units).
 
std::vector< double > overflow
 Current overflow / ponded flow (project flow units).
 
std::vector< double > losses
 Node losses (evaporation + seepage) (project flow units).
 
std::vector< double > crown_elev
 Crown elevation — top of highest connecting conduit (project length units).
 
std::vector< int > degree
 Node degree — number of connecting links (+ve downstream, -ve upstream terminal).
 
std::vector< double > old_net_inflow
 Net inflow from previous timestep (inflow - outflow) for averaging.
 
std::vector< double > full_volume
 Full volume at node (project volume units).
 
std::vector< double > old_depth
 Depth at the previous timestep.
 
std::vector< double > old_volume
 Volume at the previous timestep.
 
std::vector< double > old_lat_flow
 Lateral flow at the previous timestep.
 
std::vector< std::string > comments
 Object comment from the INP file (lines with a single ';' prefix immediately above this object's data row).
 
std::vector< std::string > tags
 Per-object tag from the INP [TAGS] section.
 
std::vector< char > rpt_flag
 Whether this node is included in report/output (0=no, 1=yes).
 
std::vector< double > stat_vol_flooded
 Total volume of water lost as overflow (project volume units).
 
std::vector< double > stat_time_flooded
 Total duration the node was flooded (seconds).
 
std::vector< double > stat_max_depth
 Maximum reported depth (project length units).
 
std::vector< double > stat_max_overflow
 Maximum reported overflow rate (project flow units).
 
std::vector< double > stat_max_overflow_date
 Date/time when maximum overflow occurred (OADate (days since 12/30/1899)).
 
std::vector< double > stat_sum_depth
 
std::vector< double > stat_max_depth_date
 
std::vector< double > stat_max_rpt_depth
 
std::vector< double > stat_max_inflow_date
 
std::vector< double > stat_time_surcharged
 
std::vector< double > stat_max_surcharge_height
 
std::vector< double > stat_outfall_avg_flow
 Outfall cumulative average flow (flow units × reporting periods).
 
std::vector< double > stat_max_lat_inflow
 
std::vector< double > stat_max_total_inflow
 
std::vector< double > stat_lat_inflow_vol
 
std::vector< double > stat_total_inflow_vol
 Cumulative total inflow volume at each node (ft3).
 
std::vector< double > stat_total_outflow_vol
 
std::vector< double > stat_outfall_max_flow
 Outfall maximum flow (project flow units).
 
std::vector< long > stat_outfall_periods
 Outfall number of non-zero flow periods.
 
std::vector< int > stat_non_converged_count
 Count of non-converging steps per node.
 
std::vector< double > stat_time_courant_critical
 CFL time-step critical count per node.
 
std::vector< double > stat_total_load
 Cumulative pollutant loads at each node.
 
int stat_n_pollutants = 0
 

Detailed Description

Structure-of-Arrays storage for all nodes.

All parallel arrays are indexed by node index [0, count). Use SimulationContext::node_names to translate name → index.

Fields are divided into:

  • Static properties (set during input parsing, not changed during sim)
  • State variables (updated each timestep by the hydraulic solver)
  • Cumulative statistics (totals updated each timestep)

Member Function Documentation

◆ clearInflowSources()

void openswmm::NodeData::clearInflowSources ( )
inlinenoexcept

Zero routing-phase inflow source arrays.

Called at the start of each routing step before processes write to their respective source arrays.

NOTE: runoff_inflow and gw_inflow are zeroed in stepRunoff() Phase 2 before subcatchment accumulation (matching legacy initSystemInflows which zeros newLatFlow each routing step).

Here is the caller graph for this function:

◆ count()

int openswmm::NodeData::count ( ) const
inlinenoexcept

Number of nodes.

Here is the caller graph for this function:

◆ erase_at()

void openswmm::NodeData::erase_at ( int  idx)
inline

Erase the node at index idx from every parallel array.

Removes the element at idx from every SoA vector. For flat-2D quality arrays indexed as [node * n_pollutants + p], the full stride for idx is removed. Spatial arrays are NOT touched here; ObjectDeleter erases spatial data separately after calling this. Only call in BUILDING or OPENED state.

Here is the caller graph for this function:

◆ grow_to()

void openswmm::NodeData::grow_to ( int  n)
inline

Grow all arrays to hold at least n nodes, preserving existing data.

Called by ensure_node_capacity() during incremental INP parsing. Uses vector::resize() (not assign) so existing elements are preserved. New elements get the same defaults as resize().

Here is the call graph for this function:

◆ reset_state()

void openswmm::NodeData::reset_state ( )
inlinenoexcept

Reset state variables, applying init_depth from input.

Matches legacy node_initState() which sets oldDepth = initDepth and computes initial volume from depth. Flows and inflows are zeroed for a cold start.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resize()

void openswmm::NodeData::resize ( int  n)
inline

Resize all arrays to hold exactly n nodes.

Called once during input parsing after the total node count is known. All numeric arrays are zero-initialized; type arrays use JUNCTION as the default.

Here is the caller graph for this function:

◆ resize_loads()

void openswmm::NodeData::resize_loads ( int  n_pollutants)
inline

Resize pollutant load arrays after pollutant count is known.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resize_quality()

void openswmm::NodeData::resize_quality ( int  n_pollutants)
inline

Resize per-node quality arrays after pollutant count is known.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ save_state()

void openswmm::NodeData::save_state ( )
inlinenoexcept

Snapshot current state into old-step arrays before solving.

Here is the caller graph for this function:

◆ shrink_to_fit()

void openswmm::NodeData::shrink_to_fit ( )
inline

Release excess vector capacity accumulated during parsing.

Called once after final sizing is complete. Each vector's capacity is reduced to match its size, freeing memory that was over-allocated by geometric growth during incremental parsing.

Here is the caller graph for this function:

Member Data Documentation

◆ comments

std::vector<std::string> openswmm::NodeData::comments

Object comment from the INP file (lines with a single ';' prefix immediately above this object's data row).

Multiple comment lines are joined by the literal two-character token "\\n" (backslash + n). Empty string means no comment. Written back to INP by InpWriter as one ';'-prefixed row per part. Also stored verbatim in the GeoPackage 'comment' column.

◆ conc

std::vector<double> openswmm::NodeData::conc

Current quality concentration at each node.

Size = n_nodes * n_pollutants.

See also
Legacy: Node[i].newQual[]

◆ conc_n_pollutants

int openswmm::NodeData::conc_n_pollutants = 0

Number of pollutants in the quality arrays.

◆ conc_old

std::vector<double> openswmm::NodeData::conc_old

Previous-step quality at each node.

◆ coupling_inflow

std::vector<double> openswmm::NodeData::coupling_inflow

2D ↔ 1D coupling exchange flow at the node (project flow units).

Signed: positive = 2D → 1D (surface drainage into the node), negative = 1D → 2D (surcharge spill onto the surface). Written by SurfaceRouter2D::advancePostRouting at the end of step N; read by assembleLateralInflows at the start of step N+1 (so the value persists across the step boundary and is consumed exactly once by the DW solver).

For mass-balance accounting the signed value is split:

  • positive side folds into step_ext_inflow → routing_external
  • negative side folds into routing_flooding (absolute value)

This replaces the earlier scheme of routing coupling Q through forcing.node_lat_inflow_value, which conflated user forcing with 2D coupling and dropped the negative (1D→2D) volume from the mass balance entirely.

See also
docs/1D_2D_COUPLING_GATE_REVIEW.md §11

◆ crown_elev

std::vector<double> openswmm::NodeData::crown_elev

Crown elevation — top of highest connecting conduit (project length units).

See also
Legacy: Node[i].crownElev

◆ degree

std::vector<int> openswmm::NodeData::degree

Node degree — number of connecting links (+ve downstream, -ve upstream terminal).

See also
Legacy: Node[i].degree

◆ depth

std::vector<double> openswmm::NodeData::depth

Current water depth above invert (project length units).

See also
Legacy: Node[i].newDepth

◆ divider_cd

std::vector<double> openswmm::NodeData::divider_cd

Weir discharge coefficient for WEIR dividers.

◆ divider_curve

std::vector<int> openswmm::NodeData::divider_curve

Diversion curve index for TABULAR dividers (-1 = none).

◆ divider_curve_name

std::vector<std::string> openswmm::NodeData::divider_curve_name

Diversion curve name (for deferred resolution, TABULAR only).

◆ divider_cutoff

std::vector<double> openswmm::NodeData::divider_cutoff

Cutoff flow for CUTOFF dividers.

◆ divider_link

std::vector<int> openswmm::NodeData::divider_link

Diversion link index (-1 = not set).

◆ divider_link_name

std::vector<std::string> openswmm::NodeData::divider_link_name

Diversion link name (for deferred resolution).

◆ divider_max_depth

std::vector<double> openswmm::NodeData::divider_max_depth

Weir max depth for WEIR dividers.

◆ divider_type

std::vector<DividerType> openswmm::NodeData::divider_type

Divider method (DividerType enum value).

◆ dwf_inflow

std::vector<double> openswmm::NodeData::dwf_inflow

Dry weather flow inflows (project flow units).

◆ exfil_imd

std::vector<double> openswmm::NodeData::exfil_imd

Green-Ampt initial moisture deficit for exfiltration (0-1).

◆ exfil_ksat

std::vector<double> openswmm::NodeData::exfil_ksat

Green-Ampt saturated hydraulic conductivity for exfiltration (in/hr or mm/hr, converted to ft/sec).

◆ exfil_suction

std::vector<double> openswmm::NodeData::exfil_suction

Green-Ampt suction head for exfiltration (in or mm, converted to ft).

◆ ext_inflow

std::vector<double> openswmm::NodeData::ext_inflow

External (timeseries/baseline) inflows (project flow units).

◆ full_depth

std::vector<double> openswmm::NodeData::full_depth

Full depth of the node (project length units).

See also
Legacy: Node[i].fullDepth

◆ full_volume

std::vector<double> openswmm::NodeData::full_volume

Full volume at node (project volume units).

See also
Legacy: Node[i].fullVolume

◆ gw_inflow

std::vector<double> openswmm::NodeData::gw_inflow

Interpolated groundwater flow from subcatchments (project flow units).

◆ head

std::vector<double> openswmm::NodeData::head

Current water surface head (project length units = invert + depth).

See also
Legacy: Node[i].newHead

◆ hrt

std::vector<double> openswmm::NodeData::hrt

Hydraulic residence time for storage nodes (seconds).

◆ iface_inflow

std::vector<double> openswmm::NodeData::iface_inflow

Interface file (upstream model coupling) inflows (project flow units).

◆ inflow

std::vector<double> openswmm::NodeData::inflow

Current total inflow to the node (project flow units).

See also
Legacy: Node[i].inflow

◆ init_depth

std::vector<double> openswmm::NodeData::init_depth

Initial water depth (project length units).

See also
Legacy: Node[i].initDepth

◆ invert_elev

std::vector<double> openswmm::NodeData::invert_elev

Invert elevation (project length units).

See also
Legacy: Node[i].invertElev

◆ lat_flow

std::vector<double> openswmm::NodeData::lat_flow

Current lateral inflow (project flow units).

See also
Legacy: Node[i].newLatFlow

◆ lid_drain_qual_load

std::vector<double> openswmm::NodeData::lid_drain_qual_load

LID drain quality mass rate per (node, pollutant) (mass/sec).

Set once per runoff step (cleared at runoff step start); read each routing step by addWetWeatherLoads() → added to qual_mass_in. Flat 2D: [node * n_pollutants + pollutant]. Covers drain-to-node and drain-to-subcatch (routed to outlet node). Matches legacy lid_addDrainInflow() / lid_addDrainRunon() quality.

See also
Legacy: lid.c lid_addDrainInflow(), lid_addDrainRunon()

◆ lid_drain_qual_vol

std::vector<double> openswmm::NodeData::lid_drain_qual_vol

LID drain volume inflow rate per node (ft3/sec).

Set once per runoff step; read each routing step by addWetWeatherLoads() → added to qual_vol_in (denominator for mixing).

See also
Legacy: lid.c lid_addDrainInflow() Node[k].newLatFlow contribution

◆ losses

std::vector<double> openswmm::NodeData::losses

Node losses (evaporation + seepage) (project flow units).

See also
Legacy: Node[i].losses

◆ old_depth

std::vector<double> openswmm::NodeData::old_depth

Depth at the previous timestep.

◆ old_lat_flow

std::vector<double> openswmm::NodeData::old_lat_flow

Lateral flow at the previous timestep.

◆ old_net_inflow

std::vector<double> openswmm::NodeData::old_net_inflow

Net inflow from previous timestep (inflow - outflow) for averaging.

See also
Legacy: Node[i].oldNetInflow

◆ old_volume

std::vector<double> openswmm::NodeData::old_volume

Volume at the previous timestep.

◆ outfall_2d_head

std::vector<double> openswmm::NodeData::outfall_2d_head

Cached 2D surface head at the outfall coupling point (project length).

Populated by SurfaceRouter2D::updateOutfallsPreRouting at the start of every routing step for 2D-coupled outfalls; left at the sentinel value (-1e30) for non-coupled outfalls and for non-outfall nodes. Read inside Outfall::setAllOutfallDepths to apply the C4 tailwater override (max(h_standard, h_2d) when h_2d > invert_elev, gated by the optional flap gate).

The sentinel is chosen so that the predicate h_2d > z_inv is false by construction for every non-coupled outfall, which keeps the legacy path bit-for-bit unchanged when no 2D module is attached.

See also
docs/1D_2D_COUPLING_GATE_REVIEW.md §6 (C4)

◆ outfall_has_flap_gate

std::vector<uint8_t> openswmm::NodeData::outfall_has_flap_gate

True if the outfall has a gated flap (uint8_t: 0=no, 1=yes).

◆ outfall_link_idx

std::vector<int> openswmm::NodeData::outfall_link_idx

Cached index of the conduit connected to this outfall (-1 if none).

Populated once at init by outfall::buildOutfallLinkMap so that the per-iteration boundary-depth recompute in setAllOutfallDepths can skip its O(n_links) inner scan. Only meaningful for OUTFALL nodes.

◆ outfall_link_offset

std::vector<double> openswmm::NodeData::outfall_link_offset

Conduit offset at the outfall end (ft), matching the link stored in outfall_link_idx. Zero for non-outfalls.

◆ outfall_param

std::vector<double> openswmm::NodeData::outfall_param

Fixed outfall stage or tidal curve / time series index.

If outfall_type == FIXED, stores the fixed water surface elevation. If TIDAL or TIMESERIES, stores the index into TableData.

◆ outfall_route_to

std::vector<int> openswmm::NodeData::outfall_route_to

Subcatchment index to route outfall discharge to (-1 = none).

See also
Legacy: Outfall[j].routeTo

◆ outfall_type

std::vector<OutfallType> openswmm::NodeData::outfall_type

Outfall boundary condition type.

◆ outflow

std::vector<double> openswmm::NodeData::outflow

Current total outflow from the node (project flow units).

See also
Legacy: Node[i].outflow

◆ overflow

std::vector<double> openswmm::NodeData::overflow

Current overflow / ponded flow (project flow units).

See also
Legacy: Node[i].overflow

◆ ponded_area

std::vector<double> openswmm::NodeData::ponded_area

Ponding area at the surface (sq project length units).

See also
Legacy: Node[i].pondedArea

◆ qual_mass_in

std::vector<double> openswmm::NodeData::qual_mass_in

Accumulated quality mass inflow rate per (node, pollutant).

Flat 2D: [node * n_pollutants + pollutant]. Units: mass/sec.

◆ qual_vol_in

std::vector<double> openswmm::NodeData::qual_vol_in

Accumulated volume inflow rate per node (ft3/sec).

◆ rdii_inflow

std::vector<double> openswmm::NodeData::rdii_inflow

RDII unit hydrograph inflows (project flow units).

◆ rpt_flag

std::vector<char> openswmm::NodeData::rpt_flag

Whether this node is included in report/output (0=no, 1=yes).

See also
Legacy: Node[j].rptFlag

◆ runoff_inflow

std::vector<double> openswmm::NodeData::runoff_inflow

Interpolated surface runoff from subcatchments (project flow units).

◆ stat_lat_inflow_vol

std::vector<double> openswmm::NodeData::stat_lat_inflow_vol

Cumulative lateral inflow volume at each node (ft3).

See also
Legacy: NodeStats[i].totLatFlow

◆ stat_max_depth

std::vector<double> openswmm::NodeData::stat_max_depth

Maximum reported depth (project length units).

See also
Legacy: NodeStats[i].maxDepth

◆ stat_max_depth_date

std::vector<double> openswmm::NodeData::stat_max_depth_date

Date/time when maximum depth occurred (OADate (days since 12/30/1899)).

See also
Legacy: NodeStats[i].maxDepthDate

◆ stat_max_inflow_date

std::vector<double> openswmm::NodeData::stat_max_inflow_date

Date/time when maximum total inflow occurred (OADate (days since 12/30/1899)).

See also
Legacy: NodeStats[i].maxInflowDate

◆ stat_max_lat_inflow

std::vector<double> openswmm::NodeData::stat_max_lat_inflow

Maximum lateral inflow at each node (project flow units).

See also
Legacy: NodeStats[i].maxLatFlow

◆ stat_max_overflow

std::vector<double> openswmm::NodeData::stat_max_overflow

Maximum reported overflow rate (project flow units).

See also
Legacy: NodeStats[i].maxOverflow

◆ stat_max_overflow_date

std::vector<double> openswmm::NodeData::stat_max_overflow_date

Date/time when maximum overflow occurred (OADate (days since 12/30/1899)).

◆ stat_max_rpt_depth

std::vector<double> openswmm::NodeData::stat_max_rpt_depth

Maximum reported depth (used for output-step max tracking).

See also
Legacy: NodeStats[i].maxRptDepth

◆ stat_max_surcharge_height

std::vector<double> openswmm::NodeData::stat_max_surcharge_height

Maximum surcharge height above crown (project length units).

See also
Legacy: NodeStats[i].maxDepth - Node[i].fullDepth

◆ stat_max_total_inflow

std::vector<double> openswmm::NodeData::stat_max_total_inflow

Maximum total inflow at each node (project flow units).

See also
Legacy: NodeStats[i].maxInflow

◆ stat_n_pollutants

int openswmm::NodeData::stat_n_pollutants = 0

◆ stat_non_converged_count

std::vector<int> openswmm::NodeData::stat_non_converged_count

Count of non-converging steps per node.

Incremented when a routing step fails to converge and the node itself did not converge (matching legacy NodeStats[i].nonConvergedCount).

See also
Legacy: stats_updateConvergenceStats()

◆ stat_outfall_avg_flow

std::vector<double> openswmm::NodeData::stat_outfall_avg_flow

Outfall cumulative average flow (flow units × reporting periods).

See also
Legacy: OutfallStats[k].avgFlow

◆ stat_outfall_max_flow

std::vector<double> openswmm::NodeData::stat_outfall_max_flow

Outfall maximum flow (project flow units).

See also
Legacy: OutfallStats[k].maxFlow

◆ stat_outfall_periods

std::vector<long> openswmm::NodeData::stat_outfall_periods

Outfall number of non-zero flow periods.

See also
Legacy: OutfallStats[k].totalPeriods

◆ stat_sum_depth

std::vector<double> openswmm::NodeData::stat_sum_depth

Cumulative depth for computing average (project length units × seconds).

See also
Legacy: NodeStats[i].avgDepth

◆ stat_time_courant_critical

std::vector<double> openswmm::NodeData::stat_time_courant_critical

CFL time-step critical count per node.

Incremented when the node's depth-change rate produces the smallest CFL-limited timestep (matching legacy NodeStats[i].timeCourantCritical).

See also
Legacy: stats_updateCriticalTimeCount()

◆ stat_time_flooded

std::vector<double> openswmm::NodeData::stat_time_flooded

Total duration the node was flooded (seconds).

See also
Legacy: NodeStats[i].timeFlooded

◆ stat_time_surcharged

std::vector<double> openswmm::NodeData::stat_time_surcharged

Total time node was surcharged (seconds).

See also
Legacy: NodeStats[i].timeSurcharged

◆ stat_total_inflow_vol

std::vector<double> openswmm::NodeData::stat_total_inflow_vol

Cumulative total inflow volume at each node (ft3).

◆ stat_total_load

std::vector<double> openswmm::NodeData::stat_total_load

Cumulative pollutant loads at each node.

Flat 2D: [node * n_pollutants + p]. Only meaningful for outfall nodes. Resized by resize_loads() after pollutant count is known.

See also
Legacy: OutfallStats[k].totalLoad[p]

◆ stat_total_outflow_vol

std::vector<double> openswmm::NodeData::stat_total_outflow_vol

Cumulative total outflow volume at each node (ft3).

See also
Legacy: NodeOutflow[j]

◆ stat_vol_flooded

std::vector<double> openswmm::NodeData::stat_vol_flooded

Total volume of water lost as overflow (project volume units).

See also
Legacy: NodeStats[i].volFlooded

◆ storage_a

std::vector<double> openswmm::NodeData::storage_a

Functional storage area parameter A (area = A * depth^B + C).

◆ storage_b

std::vector<double> openswmm::NodeData::storage_b

Functional storage area parameter B.

◆ storage_c

std::vector<double> openswmm::NodeData::storage_c

Functional storage area parameter C (baseline area).

◆ storage_curve

std::vector<int> openswmm::NodeData::storage_curve

Storage curve index into TableData (CURVE_STORAGE).

-1 if storage uses functional relationship (a,b,c parameters).

◆ storage_curve_name

std::vector<std::string> openswmm::NodeData::storage_curve_name

Curve name for deferred resolution (populated during parsing).

◆ storage_evap_frac

std::vector<double> openswmm::NodeData::storage_evap_frac

Fraction of potential evaporation realized at storage node (0-1).

◆ storage_evap_loss

std::vector<double> openswmm::NodeData::storage_evap_loss

Storage node evaporation loss this timestep (ft3).

◆ storage_exfil_loss

std::vector<double> openswmm::NodeData::storage_exfil_loss

Storage node exfiltration loss this timestep (ft3).

◆ storage_seep_rate

std::vector<double> openswmm::NodeData::storage_seep_rate

Seepage rate from storage node (project units/day).

◆ sur_depth

std::vector<double> openswmm::NodeData::sur_depth

Maximum depth allowed at the node (ponding or surcharge limit).

See also
Legacy: Node[i].surDepth

◆ tags

std::vector<std::string> openswmm::NodeData::tags

Per-object tag from the INP [TAGS] section.

Free-form string label, used by GUIs for filtering and grouping (e.g. catchment-name labels, asset IDs, user-defined groups). Empty string means no tag. Written back to INP by InpWriter as a Node <name> <tag> row in [TAGS]. Index-keyed (per-NodeData field) so swmm_node_rename keeps the tag attached — the earlier name-keyed SimulationContext::node_tags map lost tags on rename.

◆ type

std::vector<NodeType> openswmm::NodeData::type

Node type for each node.

◆ user_conc_mass_flux

std::vector<double> openswmm::NodeData::user_conc_mass_flux

User-forced quality mass flux at each node (mass/sec).

Flat 2D: [node * n_pollutants + pollutant]. Unlike the transient forcing in ForcingData, this persists until the user explicitly changes it and is applied as an additive mass source at each routing step (analogous to user_lat_flow for flow).

◆ user_lat_flow

std::vector<double> openswmm::NodeData::user_lat_flow

User-forced lateral inflow set via the API (project flow units).

Unlike lat_flow, this is not cleared between routing steps. The value persists until the user explicitly changes it and is added to lat_flow at each routing step.

◆ volume

std::vector<double> openswmm::NodeData::volume

Current water volume (project volume units).

See also
Legacy: Node[i].newVolume

The documentation for this struct was generated from the following file: