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

#include <SurfaceStateData.hpp>

Collaboration diagram for openswmm::twoD::SurfaceStateData:

Public Member Functions

void resize (int n_triangles, int n_vertices)
 
void save_state () noexcept
 
void reset_state () noexcept
 
void clear_reset_forcings () noexcept
 Clear RESET forcings after each step.
 
void update_statistics (const std::vector< double > &tri_area, double dt, int nthreads=1) noexcept
 

Public Attributes

const BoundaryDataboundary = nullptr
 
const NodeDatanodes_1d = nullptr
 
const std::vector< CouplingPoint > * node_coupling = nullptr
 non-outfall points
 
const ActiveSetDataactive_set = nullptr
 
std::vector< double > depth
 Mean wetted depth h̄ = V/A_wet (m) [reconstructed].
 
std::vector< double > head
 Free-surface elevation η (m) [reconstructed].
 
std::vector< double > volume
 Cell water volume V (m³) — the integrated state.
 
std::vector< double > grad_hx
 ∂h/∂x (unlimited gradient)
 
std::vector< double > grad_hy
 ∂h/∂y (unlimited gradient)
 
std::vector< double > grad_hx_lim
 Limited gradient X.
 
std::vector< double > grad_hy_lim
 Limited gradient Y.
 
std::vector< double > vert_head
 Head reconstructed at vertices.
 
std::vector< double > face_vx
 Cell velocity X component (m/s)
 
std::vector< double > face_vy
 Cell velocity Y component (m/s)
 
std::vector< double > cell_continuity_err
 
std::vector< double > edge_flux
 Normal flux through each edge.
 
std::vector< double > rainfall
 Rainfall intensity (m/s)
 
std::vector< double > evap_rate
 Evaporation demand rate (m/s, >= 0)
 
std::vector< double > coupling_flux
 Exchange with SWMM node (m/s, + = into 2D)
 
std::vector< double > net_source
 Net source/sink per cell (m/s)
 
std::vector< int8_t > rainfall_forced
 0=computed, 1=override, 2=add
 
std::vector< int8_t > rainfall_persist
 0=reset, 1=persist
 
std::vector< double > rainfall_force_val
 Forced rainfall value.
 
std::vector< int8_t > evap_forced
 0=computed, 1=override, 2=add
 
std::vector< int8_t > evap_persist
 0=reset, 1=persist
 
std::vector< double > evap_force_val
 Forced evaporation value.
 
std::vector< int8_t > coupling_forced
 0=computed, 1=override, 2=add
 
std::vector< int8_t > coupling_persist
 0=reset, 1=persist
 
std::vector< double > coupling_force_val
 Forced coupling value.
 
std::vector< double > old_depth
 Mean depth at start of coupling interval.
 
std::vector< double > old_volume
 Volume at start of coupling interval (m³)
 
std::vector< double > stat_max_depth
 Maximum depth ψ_o seen at each cell (m)
 
std::vector< double > stat_max_velocity
 Max cell speed |v| = √(vx²+vy²) (m/s)
 
std::vector< double > stat_max_cont_err
 Max |cell_continuity_err| (m³/s)
 
std::vector< double > stat_cum_volume
 Cumulative volume through cell (m³)
 
double evap_loss_total = 0.0
 

Member Function Documentation

◆ clear_reset_forcings()

void openswmm::twoD::SurfaceStateData::clear_reset_forcings ( )
inlinenoexcept

Clear RESET forcings after each step.

◆ reset_state()

void openswmm::twoD::SurfaceStateData::reset_state ( )
inlinenoexcept

◆ resize()

void openswmm::twoD::SurfaceStateData::resize ( int n_triangles,
int n_vertices )
inline

◆ save_state()

void openswmm::twoD::SurfaceStateData::save_state ( )
inlinenoexcept

◆ update_statistics()

void openswmm::twoD::SurfaceStateData::update_statistics ( const std::vector< double > & tri_area,
double dt,
int nthreads = 1 )
inlinenoexcept

Update cumulative statistics / rendering envelopes.

Aggregates once per model (routing) step at the accepted end-of-step state. MUST be called after computeFaceVelocity and computeCellContinuity so face_vx/vy and cell_continuity_err hold the accepted values. All envelopes fuse into the single per-cell loop already walked for stat_cum_volume — no extra passes, no sub-step sampling.

Member Data Documentation

◆ active_set

const ActiveSetData* openswmm::twoD::SurfaceStateData::active_set = nullptr

Non-owning view of the dry-cell active-set mask (owned by SurfaceRouter2D; rebuilt once per advance window). nullptr or !enabled ⇒ every pipeline stage takes its exact full-mesh loop (the legacy behaviour, bit-identical). When active, the RHS stages iterate the compact active-cell/vertex lists and treat active→inactive edges as walls (locally conservative by construction).

◆ boundary

const BoundaryData* openswmm::twoD::SurfaceStateData::boundary = nullptr

Non-owning view of the per-edge boundary conditions (owned by SurfaceRouter2D). nullptr ⇒ all boundary edges are no-flux walls (the legacy behaviour, and what the unit-test call sites that build a bare state get). When set, computeEdgeFluxes applies the per-type boundary flux (NORMAL_FLOW / SPECIFIED_STAGE / SPECIFIED_FLOW / RATING_CURVE). The pointer is shallow-copied on assignment (it references config, not per-cell state), which is fine — both copies see the same BC config.

◆ cell_continuity_err

std::vector<double> openswmm::twoD::SurfaceStateData::cell_continuity_err

◆ coupling_flux

std::vector<double> openswmm::twoD::SurfaceStateData::coupling_flux

Exchange with SWMM node (m/s, + = into 2D)

◆ coupling_force_val

std::vector<double> openswmm::twoD::SurfaceStateData::coupling_force_val

Forced coupling value.

◆ coupling_forced

std::vector<int8_t> openswmm::twoD::SurfaceStateData::coupling_forced

0=computed, 1=override, 2=add

◆ coupling_persist

std::vector<int8_t> openswmm::twoD::SurfaceStateData::coupling_persist

0=reset, 1=persist

◆ depth

std::vector<double> openswmm::twoD::SurfaceStateData::depth

Mean wetted depth h̄ = V/A_wet (m) [reconstructed].

◆ edge_flux

std::vector<double> openswmm::twoD::SurfaceStateData::edge_flux

Normal flux through each edge.

◆ evap_force_val

std::vector<double> openswmm::twoD::SurfaceStateData::evap_force_val

Forced evaporation value.

◆ evap_forced

std::vector<int8_t> openswmm::twoD::SurfaceStateData::evap_forced

0=computed, 1=override, 2=add

◆ evap_loss_total

double openswmm::twoD::SurfaceStateData::evap_loss_total = 0.0

Cumulative evaporation loss over the whole simulation (m³). Kept here (not in core's MassBalance2D, owned by another work stream) and folded into the API-level totals by Api2D.cpp.

◆ evap_persist

std::vector<int8_t> openswmm::twoD::SurfaceStateData::evap_persist

0=reset, 1=persist

◆ evap_rate

std::vector<double> openswmm::twoD::SurfaceStateData::evap_rate

Evaporation demand rate (m/s, >= 0)

◆ face_vx

std::vector<double> openswmm::twoD::SurfaceStateData::face_vx

Cell velocity X component (m/s)

◆ face_vy

std::vector<double> openswmm::twoD::SurfaceStateData::face_vy

Cell velocity Y component (m/s)

◆ grad_hx

std::vector<double> openswmm::twoD::SurfaceStateData::grad_hx

∂h/∂x (unlimited gradient)

◆ grad_hx_lim

std::vector<double> openswmm::twoD::SurfaceStateData::grad_hx_lim

Limited gradient X.

◆ grad_hy

std::vector<double> openswmm::twoD::SurfaceStateData::grad_hy

∂h/∂y (unlimited gradient)

◆ grad_hy_lim

std::vector<double> openswmm::twoD::SurfaceStateData::grad_hy_lim

Limited gradient Y.

◆ head

std::vector<double> openswmm::twoD::SurfaceStateData::head

Free-surface elevation η (m) [reconstructed].

◆ net_source

std::vector<double> openswmm::twoD::SurfaceStateData::net_source

Net source/sink per cell (m/s)

◆ node_coupling

const std::vector<CouplingPoint>* openswmm::twoD::SurfaceStateData::node_coupling = nullptr

non-outfall points

◆ nodes_1d

const NodeData* openswmm::twoD::SurfaceStateData::nodes_1d = nullptr

Live node-coupling view, set by SurfaceRouter2D ONLY when the macro-step path is active (COUPLING_INTERVAL > 1). When non-null the CVODE RHS evaluates the 1D↔2D orifice exchange against the CURRENT 2D head (so it self-limits and integrates stably over a large window) instead of a held per-window source; the ∫Q dt is carried by CVODE quadrature for conservative booking. nullptr ⇒ the legacy held-flux path (default). nodes_1d is the 1D node data, frozen for the duration of the advance.

◆ old_depth

std::vector<double> openswmm::twoD::SurfaceStateData::old_depth

Mean depth at start of coupling interval.

◆ old_volume

std::vector<double> openswmm::twoD::SurfaceStateData::old_volume

Volume at start of coupling interval (m³)

◆ rainfall

std::vector<double> openswmm::twoD::SurfaceStateData::rainfall

Rainfall intensity (m/s)

◆ rainfall_force_val

std::vector<double> openswmm::twoD::SurfaceStateData::rainfall_force_val

Forced rainfall value.

◆ rainfall_forced

std::vector<int8_t> openswmm::twoD::SurfaceStateData::rainfall_forced

0=computed, 1=override, 2=add

◆ rainfall_persist

std::vector<int8_t> openswmm::twoD::SurfaceStateData::rainfall_persist

0=reset, 1=persist

◆ stat_cum_volume

std::vector<double> openswmm::twoD::SurfaceStateData::stat_cum_volume

Cumulative volume through cell (m³)

◆ stat_max_cont_err

std::vector<double> openswmm::twoD::SurfaceStateData::stat_max_cont_err

Max |cell_continuity_err| (m³/s)

◆ stat_max_depth

std::vector<double> openswmm::twoD::SurfaceStateData::stat_max_depth

Maximum depth ψ_o seen at each cell (m)

◆ stat_max_velocity

std::vector<double> openswmm::twoD::SurfaceStateData::stat_max_velocity

Max cell speed |v| = √(vx²+vy²) (m/s)

◆ vert_head

std::vector<double> openswmm::twoD::SurfaceStateData::vert_head

Head reconstructed at vertices.

◆ volume

std::vector<double> openswmm::twoD::SurfaceStateData::volume

Cell water volume V (m³) — the integrated state.


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