![]() |
OpenSWMM Engine
6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
|
Dynamic wave routing solver — batch-oriented St. Venant equations. More...
#include "XSectBatch.hpp"#include "../core/Constants.hpp"#include "../core/SimulationOptions.hpp"#include "../data/NodeData.hpp"#include "../data/LinkData.hpp"#include <cstdint>#include <functional>#include <vector>Go to the source code of this file.
Classes | |
| struct | openswmm::dynwave::DPSConfig |
| DPS configuration parameters (derived from SimulationOptions at init). More... | |
| struct | openswmm::dynwave::DPSLinkArrays |
| struct | openswmm::dynwave::DWNodeArrays |
| class | openswmm::dynwave::DWSolver |
| Dynamic wave solver — operates on entire link/node system. More... | |
Namespaces | |
| namespace | openswmm |
| namespace | openswmm::dynwave |
Enumerations | |
| enum class | openswmm::dynwave::SurchargeMethod : int { openswmm::dynwave::EXTRAN = 0 , openswmm::dynwave::SLOT = 1 , openswmm::dynwave::DYNAMIC_SLOT = 2 } |
| Surcharge method: EXTRAN (classic) or SLOT (Preissmann). More... | |
| enum class | openswmm::dynwave::MomentumCategory : uint8_t { openswmm::dynwave::SKIP_DRY = 0 , openswmm::dynwave::MANNING_OPEN = 1 , openswmm::dynwave::MANNING_CLOSED_FS = 2 , openswmm::dynwave::MANNING_CLOSED_FULL = 3 , openswmm::dynwave::FORCE_MAIN_HW = 4 , openswmm::dynwave::FORCE_MAIN_DW = 5 , openswmm::dynwave::N_CATEGORIES = 6 } |
| Momentum category for branch-free per-category kernel dispatch. More... | |
Dynamic wave routing solver — batch-oriented St. Venant equations.
Port of legacy dwflow.c + dynwave.c, restructured for batch execution:
**Per Picard iteration:**
1. **Batch geometry** — XSectGroups pre-computes a1[], a2[], aMid[],
rMid[], wMid[] for ALL conduits simultaneously (shape-grouped,
SIMD-vectorisable)
2. **Batch momentum** — friction slope, head gradient, inertial terms
computed as array operations over pre-computed geometry (no xsect
dispatch in the inner loop)
3. **Scatter** — link flows transferred to node inflow/outflow
4. **Node depth update** — per-node (Picard convergence check)
Uses theta-implicit scheme with Preissmann slot for surcharge,
inertial damping based on Froude number, and under-relaxation.