28#ifndef OPENSWMM_DYNAMIC_WAVE_HPP
29#define OPENSWMM_DYNAMIC_WAVE_HPP
32#include "../data/NodeData.hpp"
33#include "../data/LinkData.hpp"
38struct SimulationContext;
118 double fixed_step,
double courant_factor)
const;
128 int num_threads_ = 1;
132 std::vector<DWNodeState> xnode_;
135 std::vector<double> area1_;
136 std::vector<double> area2_;
137 std::vector<double> area_mid_;
138 std::vector<double> hrad_mid_;
139 std::vector<double> width_mid_;
140 std::vector<double> depth1_;
141 std::vector<double> depth2_;
142 std::vector<double> depth_mid_;
145 std::vector<double> velocity_;
146 std::vector<double> froude_;
147 std::vector<double> sigma_;
148 std::vector<double> dqdh_;
149 std::vector<double> new_flow_;
152 std::vector<double> area_old_;
156 std::vector<double> surf_area1_;
157 std::vector<double> surf_area2_;
160 std::vector<double> hrad1_;
161 std::vector<double> width1_;
162 std::vector<double> width2_;
166 std::vector<double> h1_;
167 std::vector<double> h2_;
168 std::vector<double> fasnh_;
180 double getSlotWidth(
double y,
double y_full,
double w_max,
XsectShape shape)
const;
181 double getSlotArea(
double y,
double y_full,
double a_full,
double slot_width)
const;
182 double getSlotHydRad(
double y,
double y_full,
double r_full)
const;
183 double getCrownCutoff()
const;
Cross-section geometry — unified batch + per-element API.
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
int execute(SimulationContext &ctx, double dt)
Execute one DW routing timestep.
Definition DynamicWave.cpp:198
void setNumThreads(int n)
Set the number of OpenMP threads for parallel loops.
Definition DynamicWave.cpp:180
SurchargeMethod surcharge_method
Definition DynamicWave.hpp:123
void init(int n_nodes, int n_links, const XSectGroups &groups)
Definition DynamicWave.cpp:141
double head_tol
Definition DynamicWave.hpp:120
double omega
Definition DynamicWave.hpp:122
int max_trials
Definition DynamicWave.hpp:121
double getRoutingStep(const SimulationContext &ctx, double fixed_step, double courant_factor) const
Compute CFL-based variable timestep.
Definition DynamicWave.cpp:1106
constexpr double EXTRAN_CROWN_CUTOFF
EXTRAN surcharge fraction.
Definition DynamicWave.hpp:51
constexpr double OMEGA
Picard under-relaxation.
Definition DynamicWave.hpp:46
constexpr double SLOT_WIDTH_FACTOR
Slot width = y_full * this factor.
Definition DynamicWave.hpp:53
constexpr double DEFAULT_HEADTOL
Convergence tolerance (ft)
Definition DynamicWave.hpp:47
SurchargeMethod
Surcharge method: EXTRAN (classic) or SLOT (Preissmann).
Definition DynamicWave.hpp:76
@ SLOT
Preissmann slot — fictitious narrow slot above crown.
@ DYNAMIC_SLOT
Dynamic slot — slot width varies with flow conditions (experimental) Sharior, S., Hodges,...
@ EXTRAN
Classic EXTRAN approach — dQ/dH for surcharged nodes.
constexpr double MAXVELOCITY
Velocity limiter (ft/s)
Definition DynamicWave.hpp:49
constexpr double MINTIMESTEP
Minimum timestep (s)
Definition DynamicWave.hpp:50
constexpr double SLOT_CROWN_CUTOFF
Preissmann slot crown cutoff.
Definition DynamicWave.hpp:52
constexpr int DEFAULT_MAXTRIALS
Max Picard iterations.
Definition DynamicWave.hpp:48
Definition Controls.cpp:24
XsectShape
Conduit cross-section shape code.
Definition LinkData.hpp:52
double * y
Definition odesolve.c:28
Central, reentrant simulation context.
Definition SimulationContext.hpp:141
Definition DynamicWave.hpp:59
bool is_surcharged
TRUE when node depth > crown elevation.
Definition DynamicWave.hpp:65
bool converged
Definition DynamicWave.hpp:64
double dYdT
Definition DynamicWave.hpp:63
double sumdqdh
Definition DynamicWave.hpp:62
double old_surf_area
Surface area from last non-surcharged state.
Definition DynamicWave.hpp:61
double new_surf_area
Definition DynamicWave.hpp:60