22#ifndef OPENSWMM_ENGINE_2D_SURFACE_ROUTER_HPP
23#define OPENSWMM_ENGINE_2D_SURFACE_ROUTER_HPP
36struct SimulationContext;
162 std::vector<PendingBoundaryRow>&
pendingBCRows() noexcept {
return pending_bc_rows_; }
163 const std::vector<PendingBoundaryRow>&
pendingBCRows() const noexcept {
return pending_bc_rows_; }
171#ifdef OPENSWMM_HAS_2D
173 long lastCvodeSteps()
const {
return cvode_solver_.last_num_steps(); }
187 std::vector<PendingBoundaryRow> pending_bc_rows_;
189 std::vector<CouplingPoint> coupling_points_;
191 bool active_ =
false;
192 int coupling_counter_ = 0;
193 double sim_time_ = 0.0;
195#ifdef OPENSWMM_HAS_2D
196 CvodeSurfaceSolver cvode_solver_;
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
~SurfaceRouter2D()=default
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
SurfaceRouter2D()=default
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