OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
Routing.hpp
Go to the documentation of this file.
1
20#ifndef OPENSWMM_ROUTING_HPP
21#define OPENSWMM_ROUTING_HPP
22
23#include "XSectBatch.hpp"
24#include "KinematicWave.hpp"
25#include "DynamicWave.hpp"
26#include "Divider.hpp"
27
28namespace openswmm {
29
30struct SimulationContext;
31
32// ============================================================================
33// Routing model enum
34// ============================================================================
35
36enum class RouteModel : int {
37 STEADY = 0,
38 KINWAVE = 1,
39 DYNWAVE = 2
40};
41
42// ============================================================================
43// Routing orchestrator
44// ============================================================================
45
53class Router {
54public:
64 void init(SimulationContext& ctx, RouteModel model);
65
73 int step(SimulationContext& ctx, double dt);
74
83 double getAdaptiveStep(const SimulationContext& ctx,
84 double fixed_step, double courant) const;
85
87 const XSectGroups& xsectGroups() const { return groups_; }
88
90 void setDWNumThreads(int n) { dw_solver_.setNumThreads(n); }
91
92private:
94 XSectGroups groups_;
95 kinwave::KWSolver kw_solver_;
96 dynwave::DWSolver dw_solver_;
97 divider::DividerSoA dividers_;
98
100 void saveOldStates(SimulationContext& ctx);
101
103 void initNodeFlows(SimulationContext& ctx, double dt);
104
106 void updateLinkStates(SimulationContext& ctx);
107};
108
109} // namespace openswmm
110
111#endif // OPENSWMM_ROUTING_HPP
Flow divider node logic — cutoff, overflow, tabular, weir.
Dynamic wave routing solver — batch-oriented St. Venant equations.
Kinematic wave routing solver — batch-oriented design.
Cross-section geometry — unified batch + per-element API.
Top-level routing orchestrator.
Definition Routing.hpp:53
double getAdaptiveStep(const SimulationContext &ctx, double fixed_step, double courant) const
Compute adaptive timestep (DW only).
Definition Routing.cpp:246
const XSectGroups & xsectGroups() const
Access the shape-grouped xsect manager.
Definition Routing.hpp:87
void init(SimulationContext &ctx, RouteModel model)
Initialise the router for the given model.
Definition Routing.cpp:27
int step(SimulationContext &ctx, double dt)
Execute one routing timestep.
Definition Routing.cpp:156
void setDWNumThreads(int n)
Set the DWSolver OpenMP thread count (delegates to DWSolver::setNumThreads).
Definition Routing.hpp:90
Shape-grouped cross-section manager for batch computation.
Definition XSectBatch.hpp:193
Dynamic wave solver — operates on entire link/node system.
Definition DynamicWave.hpp:90
void setNumThreads(int n)
Set the number of OpenMP threads for parallel loops.
Definition DynamicWave.cpp:180
Kinematic wave solver state.
Definition KinematicWave.hpp:58
Definition Controls.cpp:24
@ KINWAVE
Kinematic wave approximation.
@ STEADY
Steady-state (no routing)
@ DYNWAVE
Dynamic wave (full Saint-Venant)
RouteModel
Definition Routing.hpp:36
@ DYNWAVE
Dynamic wave (St. Venant)
Central, reentrant simulation context.
Definition SimulationContext.hpp:141
Definition Divider.hpp:41