OpenSWMM Engine  6.0.0-alpha.3
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.3)
Loading...
Searching...
No Matches
Routing.hpp
Go to the documentation of this file.
1
19
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#include <vector>
28
29namespace openswmm {
30
32
33// ============================================================================
34// Routing model enum
35// ============================================================================
36
37enum class RouteModel : int {
38 STEADY = 0,
39 KINWAVE = 1,
41};
42
43// ============================================================================
44// Routing orchestrator
45// ============================================================================
46
54class Router {
55public:
65 void init(SimulationContext& ctx, RouteModel model);
66
75 int step(SimulationContext& ctx, double dt,
76 double evap_rate = 0.0,
77 dynwave::DWSolver::NonConduitFlowFunc non_conduit_fn = nullptr);
78
88 double fixed_step, double courant);
89
91 const XSectGroups& xsectGroups() const { return groups_; }
92
95 bool hasCycle() const { return cycle_detected_; }
96
98 void setDWNumThreads(int n) { dw_solver_.setNumThreads(n); }
99
101 dynwave::DWSolver& dwSolver() { return dw_solver_; }
102
106 bool lastStepConverged() const {
107 return (model_ == RouteModel::DYNWAVE) ? dw_solver_.lastConverged() : true;
108 }
109
110private:
112 XSectGroups groups_;
113 kinwave::KWSolver kw_solver_;
114 dynwave::DWSolver dw_solver_;
115 // Divider data moved to ctx.node_subtypes.dividers (relational side-table).
116 std::vector<int> steady_sorted_links_;
117 bool cycle_detected_ = false;
118
119
121 void initNodeFlows(SimulationContext& ctx, double dt, double evap_rate);
122
124 void computeConduitLosses(SimulationContext& ctx, double dt, double evap_rate);
125
127 void updateLinkStates(SimulationContext& ctx);
128
131 int executeSteadyFlow(SimulationContext& ctx, double dt);
132};
133
134} // namespace openswmm
135
136#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:54
double getAdaptiveStep(SimulationContext &ctx, double fixed_step, double courant)
Compute adaptive timestep (DW only).
Definition Routing.cpp:408
dynwave::DWSolver & dwSolver()
Access the DW solver (for non-conduit node state scatter).
Definition Routing.hpp:101
const XSectGroups & xsectGroups() const
Access the shape-grouped xsect manager.
Definition Routing.hpp:91
void init(SimulationContext &ctx, RouteModel model)
Initialise the router for the given model.
Definition Routing.cpp:55
bool hasCycle() const
Definition Routing.hpp:95
bool lastStepConverged() const
Definition Routing.hpp:106
int step(SimulationContext &ctx, double dt, double evap_rate=0.0, dynwave::DWSolver::NonConduitFlowFunc non_conduit_fn=nullptr)
Execute one routing timestep.
Definition Routing.cpp:300
void setDWNumThreads(int n)
Set the DWSolver OpenMP thread count (delegates to DWSolver::setNumThreads).
Definition Routing.hpp:98
Shape-grouped cross-section manager for batch computation.
Definition XSectBatch.hpp:219
Dynamic wave solver — operates on entire link/node system.
Definition DynamicWave.hpp:172
std::function< void(SimulationContext &, double, int)> NonConduitFlowFunc
Definition DynamicWave.hpp:190
Kinematic wave solver state.
Definition KinematicWave.hpp:58
Definition NodeCoupling.cpp:15
@ KINWAVE
Kinematic wave approximation.
Definition SimulationOptions.hpp:59
@ STEADY
Steady-state (no routing)
Definition SimulationOptions.hpp:58
@ DYNWAVE
Dynamic wave (full Saint-Venant)
Definition SimulationOptions.hpp:60
RouteModel
Definition Routing.hpp:37
@ DYNWAVE
Dynamic wave (St. Venant)
Definition Routing.hpp:40
Central, reentrant simulation context.
Definition SimulationContext.hpp:292