OpenSWMM Engine  6.0.0-alpha.3
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.3)
Loading...
Searching...
No Matches
RDII.hpp
Go to the documentation of this file.
1
19
20#ifndef OPENSWMM_RDII_HPP
21#define OPENSWMM_RDII_HPP
22
23#include <array>
24#include <vector>
25#include <string>
26#include <unordered_map>
27
28namespace openswmm {
29
31
32namespace rdii {
33
35 double r[12][3] = {};
36 double tPeak[12][3] = {};
37 double tBase[12][3] = {};
38 double iaMax[12][3] = {};
39 double iaRecov[12][3] = {};
40 double iaInit[12][3] = {};
41};
42
50 bool active = false;
51 double k_dep = 0.0;
52 double k_0 = 0.0;
53 double k_T = 0.0;
54 double T_ref = 10.0;
55 double theta_rec = 0.0;
56 double T_freeze = 0.0;
57};
58
62 std::vector<double> past_rain;
63 std::vector<int> past_month;
64 int period = 0;
65 int max_periods = 0;
66 int has_past_rain = 0;
67 double ia_used = 0.0;
68 long dry_seconds = 0;
69
70 void allocate(int n) {
71 max_periods = n;
72 past_rain.assign(static_cast<std::size_t>(n), 0.0);
73 past_month.assign(static_cast<std::size_t>(n), 0);
74 period = 0;
75 has_past_rain = 0;
76 ia_used = 0.0;
77 dry_seconds = static_cast<long>(n) * 300 + 1; // start dry
78 }
79};
80
84double getRecoveryRate(const ExpDecayParams& dp, double T_celsius);
85
90double updateIA_exp(const UnitHydParams& uh, UHResponseData& rd,
91 const ExpDecayParams& dp, int month, int response,
92 double rainDepth, double dt_sec,
93 const SimulationContext& ctx);
94
96 int count = 0;
97 std::vector<int> node_idx;
98 std::vector<int> uh_idx;
99 std::vector<int> gage_idx;
100 std::vector<double> area;
101
103 std::vector<UHResponseData> uh_data;
104
105 std::vector<int> rain_interval;
106 std::vector<double> time_accum;
107 std::vector<double> rain_at_start;
108
109 void resize(int n);
110};
111
113public:
114 void init(SimulationContext& ctx);
115
123 int addUnitHydParams(const std::string& name, const UnitHydParams& params);
124
129 int findUnitHyd(const std::string& name) const;
130
132 const std::unordered_map<std::string, int>& uhNameIndex() const { return uh_name_to_idx_; }
133
142 void computeAll(SimulationContext& ctx, int month, double dt);
143
150 void applyRdiiInflows(SimulationContext& ctx) const;
151
152 std::vector<UnitHydParams> uh_params;
153
157 std::vector<std::array<ExpDecayParams, 3>> decay_params;
158
161 const std::vector<double>& nodeFlows() const { return node_rdii_flow_; }
162
165 std::vector<int> rdiiNodeList() const;
166
168 static int getRainInterval(const UnitHydParams& uh, double wet_step);
169
171 static int getMaxPeriods(const UnitHydParams& uh, int response, int rainInterval);
172
173private:
174 RDIIGroupSoA groups_;
175 std::unordered_map<std::string, int> uh_name_to_idx_;
176 std::vector<double> node_rdii_flow_;
177
179 double uhOrdinate(const UnitHydParams& uh, int month, int response, double t) const;
180
182 void validateExpDecay(SimulationContext& ctx) const;
183};
184
185} // namespace rdii
186} // namespace openswmm
187
188#endif // OPENSWMM_RDII_HPP
Definition RDII.hpp:112
std::vector< int > rdiiNodeList() const
Definition RDII.cpp:545
std::vector< std::array< ExpDecayParams, 3 > > decay_params
Definition RDII.hpp:157
static int getMaxPeriods(const UnitHydParams &uh, int response, int rainInterval)
Compute max past periods for a UH response given a rain interval.
Definition RDII.cpp:98
const std::vector< double > & nodeFlows() const
Definition RDII.hpp:161
void applyRdiiInflows(SimulationContext &ctx) const
Apply buffered RDII inflows to node lateral flows.
Definition RDII.cpp:533
void computeAll(SimulationContext &ctx, int month, double dt)
Compute RDII inflows for all groups (buffered, not added to lat_flow).
Definition RDII.cpp:407
void init(SimulationContext &ctx)
Definition RDII.cpp:155
std::vector< UnitHydParams > uh_params
Definition RDII.hpp:152
int findUnitHyd(const std::string &name) const
Look up unit hydrograph index by name.
Definition RDII.cpp:75
static int getRainInterval(const UnitHydParams &uh, double wet_step)
Compute rain processing interval for a UH (minimum limb duration, capped by wet_step).
Definition RDII.cpp:81
int addUnitHydParams(const std::string &name, const UnitHydParams &params)
Register a unit hydrograph parameter set by name.
Definition RDII.cpp:62
const std::unordered_map< std::string, int > & uhNameIndex() const
Read-only access to the UH name → index map (for validation).
Definition RDII.hpp:132
Definition RDII.cpp:19
double updateIA_exp(const UnitHydParams &uh, UHResponseData &rd, const ExpDecayParams &dp, int month, int response, double rainDepth, double dt_sec, const SimulationContext &ctx)
Definition RDII.cpp:332
double getRecoveryRate(const ExpDecayParams &dp, double T_celsius)
Definition RDII.cpp:311
Definition NodeCoupling.cpp:15
Central, reentrant simulation context.
Definition SimulationContext.hpp:292
Definition RDII.hpp:49
double k_dep
Depletion rate (1/project-depth) — temperature-independent.
Definition RDII.hpp:51
double T_freeze
Recovery suppressed below this temperature (deg C)
Definition RDII.hpp:56
double k_T
Thermal recovery rate at T_ref (1/hr)
Definition RDII.hpp:53
double k_0
Base recovery rate (1/hr)
Definition RDII.hpp:52
double T_ref
Reference temperature (deg C)
Definition RDII.hpp:54
bool active
Definition RDII.hpp:50
double theta_rec
Temperature sensitivity (1/deg C)
Definition RDII.hpp:55
Definition RDII.hpp:95
void resize(int n)
Definition RDII.cpp:21
std::vector< int > gage_idx
Rain gage index per UH group (legacy: UnitHyd[j].rainGage)
Definition RDII.hpp:99
std::vector< int > uh_idx
Unit hydrograph parameter index.
Definition RDII.hpp:98
std::vector< double > area
Contributing area (acres, project units)
Definition RDII.hpp:100
std::vector< int > node_idx
Target node index.
Definition RDII.hpp:97
std::vector< UHResponseData > uh_data
Per-response data: [group * 3 + response].
Definition RDII.hpp:103
std::vector< double > time_accum
Accumulated time (sec) within current interval.
Definition RDII.hpp:106
std::vector< int > rain_interval
Rain processing interval (sec) per group.
Definition RDII.hpp:105
int count
Definition RDII.hpp:96
std::vector< double > rain_at_start
Rainfall (in/hr) captured at start of interval.
Definition RDII.hpp:107
Definition RDII.hpp:61
int has_past_rain
true if any non-zero past rain
Definition RDII.hpp:66
long dry_seconds
seconds since last non-zero rainfall
Definition RDII.hpp:68
std::vector< int > past_month
month for each past rainfall entry
Definition RDII.hpp:63
int period
current buffer write position
Definition RDII.hpp:64
int max_periods
buffer capacity
Definition RDII.hpp:65
std::vector< double > past_rain
circular buffer of past rainfall depths
Definition RDII.hpp:62
void allocate(int n)
Definition RDII.hpp:70
double ia_used
initial abstraction used so far
Definition RDII.hpp:67
Definition RDII.hpp:34
double iaRecov[12][3]
IA recovery rate (linear model)
Definition RDII.hpp:39
double iaMax[12][3]
Initial abstraction max depth.
Definition RDII.hpp:38
double tPeak[12][3]
Time to peak (sec) per month × response.
Definition RDII.hpp:36
double tBase[12][3]
Base time (sec) per month × response.
Definition RDII.hpp:37
double r[12][3]
Rainfall fraction per month × response.
Definition RDII.hpp:35
double iaInit[12][3]
Initial IA used.
Definition RDII.hpp:40