#include <WaterAgeData.hpp>
|
| void | resize (int n_nodes, int n_links, int n_subcatch) |
| |
| void | clear () |
| |
◆ clear()
| void openswmm::WaterAgeState::clear |
( |
| ) |
|
|
inline |
◆ resize()
| void openswmm::WaterAgeState::resize |
( |
int | n_nodes, |
|
|
int | n_links, |
|
|
int | n_subcatch ) |
|
inline |
- Note
n_subcatch is deliberately NOT defaulted. A default would let a two-argument call compile and silently empty the watershed arrays at runtime — and every one of the five call sites is guarded by a size mismatch, so the wipe would be repaired by the next routeSubcatchmentAge and never show up in any assertion. Requiring the argument moves the trap from runtime to the compiler, which is the only observer that can actually see it.
◆ hotstart_loaded
| bool openswmm::WaterAgeState::hotstart_loaded = false |
A2a: set by HotStartManager::apply when a V3 file restored ages — both engines then seed from node_age/link_age instead of INITIAL_STATE (the ARD engine consumes and clears it at init).
◆ legacy_seeded
| bool openswmm::WaterAgeState::legacy_seeded = false |
A1b: the LEGACY mirror seeds INITIAL_STATE on its first step (the ARD engine seeds at its own init instead).
◆ link_age
| std::vector<double> openswmm::WaterAgeState::link_age |
◆ node_age
| std::vector<double> openswmm::WaterAgeState::node_age |
◆ node_age_vol_in
| std::vector<double> openswmm::WaterAgeState::node_age_vol_in |
◆ node_ext_inflow_age
| std::vector<double> openswmm::WaterAgeState::node_ext_inflow_age |
Z1 (amendment D-Y4): [node] age (SECONDS) prescribed by an [INFLOWS] row naming __WATER_AGE__, refreshed by InflowSolver::computeAll each routing step; quiet_NaN where no row exists. The row is the more specific statement of the node's inflow age and WINS over the source table's EXTERNAL_INFLOW entry (global or node override) — the conflict is warned at init.
◆ node_lid_drain_age_vol_in
| std::vector<double> openswmm::WaterAgeState::node_lid_drain_age_vol_in |
A4: [node] age·ft³/s arriving through LID underdrains, accumulated in A6b beside the drain volume and consumed by the wet-weather loader. Separate from node_age_vol_in because the drain volume has its own per-runoff-step lifecycle (nodes.lid_drain_qual_vol), and the age has to be zeroed and consumed on exactly that cadence or it would be counted against a volume from a different step.
◆ subarea_age
| std::vector<double> openswmm::WaterAgeState::subarea_age |
[subcatch*3 + subarea] mean age of the water ponded on each subarea, SECONDS. Per-subarea rather than per-subcatchment (user decision, 2026-08-17): impervious water is systematically younger than pervious, and the three depths already exist separately.
◆ subarea_vol_prev
| std::vector<double> openswmm::WaterAgeState::subarea_vol_prev |
[subcatch*3 + subarea] the previous step's stored volume (ft³) — the mixing denominator. Kept here rather than recomputed because the RunoffSolver overwrites its depths in place.
◆ subcatch_lid_drain_age_cfs
| std::vector<double> openswmm::WaterAgeState::subcatch_lid_drain_age_cfs |
A4: [subcatch] age·ft³ (LID drain) and age·ft³ (outfall) waiting to be handed to subcatch_runon_age_vol_in when assembleRunon converts the matching volumes into run-on rates.
A3 filled subcatch_runon_age_vol_in from the subcatchment cascade ALONE, then divided it by runon_inflow — a denominator that also carries LID drain water and outfall return flow. A numerator missing terms the denominator has does not merely lose precision: it produced a run-on age BELOW every source age in the model (3.834 h of arriving water under a 4 h rain, with nothing younger than 4 h anywhere). The flow path knew about all three contributors; the age path knew about one.
◆ subcatch_outfall_age_vol
| std::vector<double> openswmm::WaterAgeState::subcatch_outfall_age_vol |
◆ subcatch_runoff_age
| std::vector<double> openswmm::WaterAgeState::subcatch_runoff_age |
[subcatch] age of the water LEAVING as runoff, SECONDS — the volume-weighted mean of the contributing subareas. This is what the wet-weather loader delivers to the outlet node, and what run-on carries to a downstream subcatchment.
◆ subcatch_runon_age_vol_in
| std::vector<double> openswmm::WaterAgeState::subcatch_runon_age_vol_in |
[subcatch] age·ft³/s arriving as RUN-ON from upstream subcatchments, the watershed analogue of node_age_vol_in. Without this, run-on water arrived with no age at all — the flow path adds q_runon while the quality path never did.
The documentation for this struct was generated from the following file:
- /home/runner/work/openswmm.engine/openswmm.engine/src/engine/data/WaterAgeData.hpp