OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
SurfaceRouter2D.hpp
Go to the documentation of this file.
1
22#ifndef OPENSWMM_ENGINE_2D_SURFACE_ROUTER_HPP
23#define OPENSWMM_ENGINE_2D_SURFACE_ROUTER_HPP
24
25#include "data/MeshData.hpp"
28#include "data/BoundaryData.hpp"
30
31#ifdef OPENSWMM_HAS_2D
33#endif
34
35namespace openswmm {
36struct SimulationContext;
37}
38
39namespace openswmm::twoD {
40
45public:
46 SurfaceRouter2D() = default;
47 ~SurfaceRouter2D() = default;
48
49 // Non-copyable, movable
54
64
80 void step(SimulationContext& ctx, double dt, double t);
81
90
100 void advancePostRouting(SimulationContext& ctx, double dt, double t);
101
105 void finalize();
106
117 double computeCflHint(const SimulationContext& ctx) const;
118
120 bool isActive() const noexcept { return active_; }
121
123 const MeshData& mesh() const noexcept { return mesh_; }
124
126 MeshData& mesh() noexcept { return mesh_; }
127
129 const SurfaceStateData& state() const noexcept { return state_; }
130
132 SurfaceStateData& state() noexcept { return state_; }
133
135 const SolverOptions2D& options() const noexcept { return options_; }
136
138 SolverOptions2D& options() noexcept { return options_; }
139
141 const BoundaryData& boundary() const noexcept { return boundary_; }
142
144 BoundaryData& boundary() noexcept { return boundary_; }
145
155 int tri = 0;
156 int edge = 0;
157 int bc_type = 0;
158 double param1 = 0.0;
159 std::string name;
160 std::string group;
161 };
162 std::vector<PendingBoundaryRow>& pendingBCRows() noexcept { return pending_bc_rows_; }
163 const std::vector<PendingBoundaryRow>& pendingBCRows() const noexcept { return pending_bc_rows_; }
164
166 double totalVolume() const;
167
169 double totalExchangeFlow() const;
170
171#ifdef OPENSWMM_HAS_2D
173 long lastCvodeSteps() const { return cvode_solver_.last_num_steps(); }
174 double lastCvodeStepSize() const { return cvode_solver_.last_step_size(); }
175#else
176 long lastCvodeSteps() const { return 0; }
177 double lastCvodeStepSize() const { return 0.0; }
178#endif
179
180private:
181 MeshData mesh_;
182 SurfaceStateData state_;
183 SolverOptions2D options_;
184 BoundaryData boundary_;
185
187 std::vector<PendingBoundaryRow> pending_bc_rows_;
188
189 std::vector<CouplingPoint> coupling_points_;
190
191 bool active_ = false;
192 int coupling_counter_ = 0;
193 double sim_time_ = 0.0;
194
195#ifdef OPENSWMM_HAS_2D
196 CvodeSurfaceSolver cvode_solver_;
197#endif
198
200 void updateRainfall(SimulationContext& ctx);
201};
202
203} // namespace openswmm::twoD
204
205#endif // OPENSWMM_ENGINE_2D_SURFACE_ROUTER_HPP
Structure-of-Arrays (SoA) storage for 2D mesh boundary conditions.
CVODE (SUNDIALS) wrapper for the 2D surface routing ODE system.
Structure-of-Arrays (SoA) storage for 2D triangular mesh geometry.
Orifice-equation exchange between 2D surface and SWMM nodes.
Configuration options for the 2D surface routing solver.
Structure-of-Arrays (SoA) storage for 2D surface routing state.
Top-level orchestrator for the 2D surface routing module.
Definition SurfaceRouter2D.hpp:44
const SolverOptions2D & options() const noexcept
Access solver options (read-only).
Definition SurfaceRouter2D.hpp:135
void advancePostRouting(SimulationContext &ctx, double dt, double t)
Post-routing hook: compute coupling exchange and advance 2D solver.
Definition SurfaceRouter2D.cpp:190
SurfaceRouter2D & operator=(const SurfaceRouter2D &)=delete
SurfaceRouter2D & operator=(SurfaceRouter2D &&)=default
BoundaryData & boundary() noexcept
Access per-edge boundary-condition data (mutable, for forcing/parsing).
Definition SurfaceRouter2D.hpp:144
void finalize()
Finalize the 2D module at simulation end.
Definition SurfaceRouter2D.cpp:246
std::vector< PendingBoundaryRow > & pendingBCRows() noexcept
Definition SurfaceRouter2D.hpp:162
void step(SimulationContext &ctx, double dt, double t)
Advance the 2D surface routing by one SWMM routing step.
Definition SurfaceRouter2D.cpp:171
long lastCvodeSteps() const
Definition SurfaceRouter2D.hpp:176
MeshData & mesh() noexcept
Access mesh data (mutable, for input parsing).
Definition SurfaceRouter2D.hpp:126
double lastCvodeStepSize() const
Definition SurfaceRouter2D.hpp:177
const SurfaceStateData & state() const noexcept
Access surface state (read-only).
Definition SurfaceRouter2D.hpp:129
double computeCflHint(const SimulationContext &ctx) const
Compute a CFL-like stability hint for the 2D domain.
Definition SurfaceRouter2D.cpp:254
double totalExchangeFlow() const
Get total exchange flow (sum of coupling flows, m³/s).
Definition SurfaceRouter2D.cpp:290
double totalVolume() const
Get total 2D surface volume (sum of depth * area).
Definition SurfaceRouter2D.cpp:280
void initialize(SimulationContext &ctx)
Initialize the 2D module after input parsing is complete.
Definition SurfaceRouter2D.cpp:21
SurfaceStateData & state() noexcept
Access surface state (mutable, for forcing).
Definition SurfaceRouter2D.hpp:132
const std::vector< PendingBoundaryRow > & pendingBCRows() const noexcept
Definition SurfaceRouter2D.hpp:163
void updateOutfallsPreRouting(SimulationContext &ctx)
Pre-routing hook: update outfall boundaries from 2D surface heads.
Definition SurfaceRouter2D.cpp:184
SurfaceRouter2D(const SurfaceRouter2D &)=delete
SurfaceRouter2D(SurfaceRouter2D &&)=default
const MeshData & mesh() const noexcept
Access mesh data (read-only).
Definition SurfaceRouter2D.hpp:123
bool isActive() const noexcept
Check if the 2D module is active.
Definition SurfaceRouter2D.hpp:120
SolverOptions2D & options() noexcept
Access solver options (mutable).
Definition SurfaceRouter2D.hpp:138
const BoundaryData & boundary() const noexcept
Access per-edge boundary-condition data (read-only).
Definition SurfaceRouter2D.hpp:141
Definition NodeCoupling.cpp:15
Definition NodeCoupling.cpp:15
Central, reentrant simulation context.
Definition SimulationContext.hpp:274
SoA storage for per-edge boundary conditions.
Definition BoundaryData.hpp:55
SoA storage for 2D triangular mesh geometry and topology.
Definition MeshData.hpp:34
Configuration for the 2D surface routing CVODE solver.
Definition SolverOptions2D.hpp:76
Per-row buffer for [2D_BOUNDARY_CONDITIONS] parse output.
Definition SurfaceRouter2D.hpp:154
int bc_type
openswmm::twoD::BoundaryType cast
Definition SurfaceRouter2D.hpp:157
std::string name
TS name or curve name (TS_/Rating variants)
Definition SurfaceRouter2D.hpp:159
int tri
Definition SurfaceRouter2D.hpp:155
std::string group
named group ("" = none)
Definition SurfaceRouter2D.hpp:160
double param1
slope (NormalFlow) / head (Stage) / flow (Flow)
Definition SurfaceRouter2D.hpp:158
int edge
0..2
Definition SurfaceRouter2D.hpp:156
SoA storage for 2D surface routing state variables.
Definition SurfaceStateData.hpp:32