22#ifndef OPENSWMM_ENGINE_2D_SURFACE_ROUTER_HPP
23#define OPENSWMM_ENGINE_2D_SURFACE_ROUTER_HPP
35#include <unordered_map>
193 std::vector<PendingBoundaryRow>&
pendingBCRows() noexcept {
return pending_bc_rows_; }
194 const std::vector<PendingBoundaryRow>&
pendingBCRows() const noexcept {
return pending_bc_rows_; }
208 return pending_edge_conveyance_rows_;
211 return pending_edge_conveyance_rows_;
219#ifdef OPENSWMM_HAS_2D
222 return solver_ ? solver_->last_num_steps() : 0;
225 return solver_ ? solver_->last_step_size() : 0.0;
236 void drainPendingRows();
244 std::vector<PendingBoundaryRow> pending_bc_rows_;
249 std::vector<PendingEdgeConveyanceRow> pending_edge_conveyance_rows_;
251 std::vector<CouplingPoint> coupling_points_;
256 std::vector<CouplingPoint> node_coupling_points_;
258 bool active_ =
false;
259 int coupling_counter_ = 0;
260 double sim_time_ = 0.0;
264 double pending_dt_ = 0.0;
265 bool force_next_window_ =
false;
269 double prev_boundary_cum_ = 0.0;
275 std::unordered_map<int, double> outfall_applied_q_;
278 long outfall_clamp_windows_ = 0;
281 long failed_advance_windows_ = 0;
286 double cfl_hint_ = 1.0e30;
289 std::vector<int> cfl_cells_;
290 void updateCflHint();
300 double effective_window_ = 0.0;
302 double window_target_ = 0.0;
304 int clean_windows_ = 0;
306 long quiescent_windows_ = 0;
308 double last_t_ = 0.0;
318 bool boundary_names_resolved_ =
false;
319#ifdef OPENSWMM_HAS_2D
324 std::unique_ptr<ISurfaceSolver> solver_;
338 std::vector<double> rain_si_;
Dry-cell active-set (wet-front) mask for the 2D RHS pipeline.
Structure-of-Arrays (SoA) storage for 2D mesh boundary conditions.
Backend-neutral interface for the 2D surface-routing time integrator.
Structure-of-Arrays (SoA) storage for 2D triangular mesh geometry.
Orifice-equation exchange between 2D surface and SWMM nodes.
Parse-time scratch rows for [2D_BOUNDARY_CONDITIONS] and [2D_EDGE_CONVEYANCE] input sections.
Static per-cell weights mapping raingage rainfall onto the 2D mesh.
Configuration options for the 2D surface routing solver.
Structure-of-Arrays (SoA) storage for 2D surface routing state.
Builds and applies static rainfall-interpolation weights for the mesh.
Definition RainfallInterpolator.hpp:44
~SurfaceRouter2D()=default
const SolverOptions2D & options() const noexcept
Access solver options (read-only).
Definition SurfaceRouter2D.hpp:171
void advancePostRouting(SimulationContext &ctx, double dt, double t)
Post-routing hook: compute coupling exchange and advance 2D solver.
Definition SurfaceRouter2D.cpp:635
SurfaceRouter2D & operator=(const SurfaceRouter2D &)=delete
SurfaceRouter2D & operator=(SurfaceRouter2D &&)=default
twoD::PendingBoundaryRow PendingBoundaryRow
Per-row buffer for [2D_BOUNDARY_CONDITIONS] parse output.
Definition SurfaceRouter2D.hpp:192
std::vector< PendingEdgeConveyanceRow > & pendingEdgeConveyanceRows() noexcept
Definition SurfaceRouter2D.hpp:207
BoundaryData & boundary() noexcept
Access per-edge boundary-condition data (mutable, for forcing/parsing).
Definition SurfaceRouter2D.hpp:180
std::vector< PendingBoundaryRow > & pendingBCRows() noexcept
Definition SurfaceRouter2D.hpp:193
void step(SimulationContext &ctx, double dt, double t)
Advance the 2D surface routing by one SWMM routing step.
Definition SurfaceRouter2D.cpp:616
long lastCvodeSteps() const
Definition SurfaceRouter2D.hpp:228
MeshData & mesh() noexcept
Access mesh data (mutable, for input parsing).
Definition SurfaceRouter2D.hpp:162
double lastCvodeStepSize() const
Definition SurfaceRouter2D.hpp:229
const SurfaceStateData & state() const noexcept
Access surface state (read-only).
Definition SurfaceRouter2D.hpp:165
double computeCflHint(const SimulationContext &ctx) const
Compute a CFL-like stability hint for the 2D domain.
Definition SurfaceRouter2D.cpp:1003
double totalExchangeFlow() const
Get total exchange flow (sum of coupling flows, m³/s).
Definition SurfaceRouter2D.cpp:1043
double totalVolume() const
Get total 2D surface volume (sum of depth * area).
Definition SurfaceRouter2D.cpp:1031
void initialize(SimulationContext &ctx)
Initialize the 2D module after input parsing is complete.
Definition SurfaceRouter2D.cpp:170
SurfaceRouter2D()=default
SurfaceStateData & state() noexcept
Access surface state (mutable, for forcing).
Definition SurfaceRouter2D.hpp:168
const std::vector< PendingBoundaryRow > & pendingBCRows() const noexcept
Definition SurfaceRouter2D.hpp:194
void updateOutfallsPreRouting(SimulationContext &ctx)
Pre-routing hook: update outfall boundaries from 2D surface heads.
Definition SurfaceRouter2D.cpp:629
SurfaceRouter2D(const SurfaceRouter2D &)=delete
void finalize(SimulationContext &ctx)
Finalize the 2D module at simulation end.
Definition SurfaceRouter2D.cpp:967
SurfaceRouter2D(SurfaceRouter2D &&)=default
const MeshData & mesh() const noexcept
Access mesh data (read-only).
Definition SurfaceRouter2D.hpp:159
void prepareOneShotForcing(SimulationContext &ctx)
Prepare a RESET 2D forcing to apply on the next routing step.
Definition SurfaceRouter2D.cpp:677
bool isActive() const noexcept
Check if the 2D module is active.
Definition SurfaceRouter2D.hpp:143
SolverOptions2D & options() noexcept
Access solver options (mutable).
Definition SurfaceRouter2D.hpp:174
const BoundaryData & boundary() const noexcept
Access per-edge boundary-condition data (read-only).
Definition SurfaceRouter2D.hpp:177
twoD::PendingEdgeConveyanceRow PendingEdgeConveyanceRow
Per-row buffer for [2D_EDGE_CONVEYANCE] parse output (§11A).
Definition SurfaceRouter2D.hpp:206
const std::vector< PendingEdgeConveyanceRow > & pendingEdgeConveyanceRows() const noexcept
Definition SurfaceRouter2D.hpp:210
void prepareForEdit()
Make the parsed mesh editable without a full initialize().
Definition SurfaceRouter2D.cpp:161
Definition NodeCoupling.cpp:15
Definition NodeCoupling.cpp:15
Central, reentrant simulation context.
Definition SimulationContext.hpp:292
Definition ActiveSetData.hpp:39
SoA storage for per-edge boundary conditions.
Definition BoundaryData.hpp:55
SoA storage for 2D triangular mesh geometry and topology.
Definition MeshData.hpp:34
Per-row buffer for [2D_BOUNDARY_CONDITIONS] parse output.
Definition PendingRows2D.hpp:37
Per-row buffer for [2D_EDGE_CONVEYANCE] parse output (§11A).
Definition PendingRows2D.hpp:56
Configuration for the 2D surface routing CVODE solver.
Definition SolverOptions2D.hpp:132
Definition SurfaceStateData.hpp:41