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

Dense SoA for storage-unit properties (one row per STORAGE node). More...

#include <NodeSubtypes.hpp>

Collaboration diagram for openswmm::StorageData:

Public Member Functions

int count () const noexcept
 Count StorageData rows from the base-object join-key column.
 
void clear () noexcept
 Erase all StorageData rows while retaining vector capacities.
 
void reserve (int n)
 Request capacity for each StorageData column without changing row count.
 
int add_default (int i)
 Insert a default StorageData row at the sorted base-object key position.
 
void erase_at (int r)
 Erase dense StorageData row data and shift later dense rows down.
 

Public Attributes

std::vector< LidNodeConfig > lid
 
std::vector< LidNodeState > lid_state
 
std::vector< int > node_idx
 Base NodeData index this row belongs to (the join key).
 
std::vector< int > curve
 Storage curve index into TableData (-1 = not tabulated).
 
std::vector< std::string > curve_name
 Curve name for deferred resolution.
 
std::vector< StorageShape > shape
 Surface-area relation. Selects how a/b/c below are interpreted.
 
std::vector< double > a
 Area coefficient A (legacy a1). FUNCTIONAL: A·d^B; geometric shapes: the linear term of C + A·d + B·d². Derived from p1..p3 for the latter.
 
std::vector< double > b
 Area coefficient B (legacy a2). FUNCTIONAL: the exponent; geometric shapes: the quadratic term.
 
std::vector< double > c
 Area coefficient C (legacy a0). Baseline area at zero depth.
 
std::vector< double > p1
 Raw shape parameter 1 — major axis / base length L (geometric shapes only). Kept alongside the derived a/b/c so .inp/.gpkg round-trip losslessly; legacy discards these, which is why a legacy model cannot rewrite its own shape params.
 
std::vector< double > p2
 Raw shape parameter 2 — minor axis / base width W.
 
std::vector< double > p3
 Raw shape parameter 3 — side slope Z (run/rise), or height for PARABOLOID.
 
std::vector< double > seep_rate
 Seepage rate (project units/day).
 
std::vector< double > evap_frac
 Fraction of potential evaporation realized (0-1).
 
std::vector< double > evap_loss
 Evaporation loss this timestep (ft3).
 
std::vector< double > exfil_loss
 Exfiltration loss this timestep (ft3).
 
std::vector< double > exfil_rate
 Raw (uncapped) exfiltration rate this timestep (cfs), written by ExfilSolver::computeAll and consumed by Router::initNodeFlows, which applies legacy's single joint evap+exfil volume cap and books the final exfil_loss volume. Kept as a rate so no dt round-trip perturbs bits.
 
std::vector< double > exfil_suction
 Green-Ampt suction head for exfiltration.
 
std::vector< double > exfil_ksat
 Green-Ampt saturated conductivity for exfiltration.
 
std::vector< double > exfil_imd
 Green-Ampt initial moisture deficit for exfiltration (0-1).
 

Detailed Description

Dense SoA for storage-unit properties (one row per STORAGE node).

Row r corresponds to base node node_idx[r]. Mirrors the storage_* / exfil_* fields of NodeData.

Member Function Documentation

◆ add_default()

int openswmm::StorageData::add_default ( int i)
inline

Insert a default StorageData row at the sorted base-object key position.

Assumes ascending node_idx and aligned columns. Seeds FUNCTIONAL shape, curve=-1, zero coefficients/losses and default unassigned LID state. Does not update the enclosing reverse map, reject duplicate keys, enforce lifecycle or initialize solver caches. Allocation failure can leave partially inserted parallel columns.

Parameters
[in]iNonnegative base-object index; caller ensures it exists, is of this subtype and is absent from this table.
Returns
Inserted dense row index; later dense rows shift up.

◆ clear()

void openswmm::StorageData::clear ( )
inlinenoexcept

Erase all StorageData rows while retaining vector capacities.

Invalidates element references/iterators and removes owned nested state. Does not clear base objects or repair the enclosing reverse map.

◆ count()

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

Count StorageData rows from the base-object join-key column.

Returns
node_idx.size() converted to int; other column lengths are not checked.
Here is the caller graph for this function:

◆ erase_at()

void openswmm::StorageData::erase_at ( int r)
inline

Erase dense StorageData row data and shift later dense rows down.

Erases every defined side-table column. Does not erase a base object, renumber stored base keys or rebuild the reverse map; enclosing maintenance handles those steps.

Parameters
[in]rExisting dense subtype-row index, NOT the base-object index; caller validates bounds/alignment.

◆ reserve()

void openswmm::StorageData::reserve ( int n)
inline

Request capacity for each StorageData column without changing row count.

May invalidate column references/iterators. Allocation failure can leave different reserved capacities, while existing row values remain.

Parameters
[in]nNonnegative anticipated row count; caller validates before conversion to size_t.

Member Data Documentation

◆ a

std::vector<double> openswmm::StorageData::a

Area coefficient A (legacy a1). FUNCTIONAL: A·d^B; geometric shapes: the linear term of C + A·d + B·d². Derived from p1..p3 for the latter.

◆ b

std::vector<double> openswmm::StorageData::b

Area coefficient B (legacy a2). FUNCTIONAL: the exponent; geometric shapes: the quadratic term.

◆ c

std::vector<double> openswmm::StorageData::c

Area coefficient C (legacy a0). Baseline area at zero depth.

◆ curve

std::vector<int> openswmm::StorageData::curve

Storage curve index into TableData (-1 = not tabulated).

◆ curve_name

std::vector<std::string> openswmm::StorageData::curve_name

Curve name for deferred resolution.

◆ evap_frac

std::vector<double> openswmm::StorageData::evap_frac

Fraction of potential evaporation realized (0-1).

◆ evap_loss

std::vector<double> openswmm::StorageData::evap_loss

Evaporation loss this timestep (ft3).

◆ exfil_imd

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

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

◆ exfil_ksat

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

Green-Ampt saturated conductivity for exfiltration.

◆ exfil_loss

std::vector<double> openswmm::StorageData::exfil_loss

Exfiltration loss this timestep (ft3).

◆ exfil_rate

std::vector<double> openswmm::StorageData::exfil_rate

Raw (uncapped) exfiltration rate this timestep (cfs), written by ExfilSolver::computeAll and consumed by Router::initNodeFlows, which applies legacy's single joint evap+exfil volume cap and books the final exfil_loss volume. Kept as a rate so no dt round-trip perturbs bits.

◆ exfil_suction

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

Green-Ampt suction head for exfiltration.

◆ lid

std::vector<LidNodeConfig> openswmm::StorageData::lid

◆ lid_state

std::vector<LidNodeState> openswmm::StorageData::lid_state

◆ node_idx

std::vector<int> openswmm::StorageData::node_idx

Base NodeData index this row belongs to (the join key).

◆ p1

std::vector<double> openswmm::StorageData::p1

Raw shape parameter 1 — major axis / base length L (geometric shapes only). Kept alongside the derived a/b/c so .inp/.gpkg round-trip losslessly; legacy discards these, which is why a legacy model cannot rewrite its own shape params.

◆ p2

std::vector<double> openswmm::StorageData::p2

Raw shape parameter 2 — minor axis / base width W.

◆ p3

std::vector<double> openswmm::StorageData::p3

Raw shape parameter 3 — side slope Z (run/rise), or height for PARABOLOID.

◆ seep_rate

std::vector<double> openswmm::StorageData::seep_rate

Seepage rate (project units/day).

◆ shape

std::vector<StorageShape> openswmm::StorageData::shape

Surface-area relation. Selects how a/b/c below are interpreted.


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