36#ifndef OPENSWMM_RDII_HPP
37#define OPENSWMM_RDII_HPP
42#include <unordered_map>
99 past_rain.assign(
static_cast<std::size_t
>(n), 0.0);
100 past_month.assign(
static_cast<std::size_t
>(n), 0);
121double updateIA_exp(
const UnitHydParams& uh, UHResponseData& rd,
122 const ExpDecayParams& dp,
int month,
int response,
123 double rainDepth,
double dt_sec,
170 using UhNameMap = std::unordered_map<std::string, int, CiHash, CiEqual>;
220 const std::vector<double>&
nodeFlows()
const {
return node_rdii_flow_; }
235 std::vector<double> node_rdii_flow_;
238 double grid_step_ = 0.0;
239 double next_tick_ = 0.0;
240 std::vector<int> grid_node_;
241 std::vector<float> grid_flows_;
248 double uhOrdinate(
const UnitHydParams& uh,
int month,
int response,
double t)
const;
Case-insensitive string helpers matching legacy SWMM name semantics.
std::vector< int > rdiiNodeList() const
Definition RDII.cpp:682
std::vector< std::array< ExpDecayParams, 3 > > decay_params
Definition RDII.hpp:216
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:116
const std::vector< double > & nodeFlows() const
Definition RDII.hpp:220
void advance(SimulationContext &ctx, double new_elapsed_sec)
Advance the strict-grid RDII computation to a runoff clock time.
Definition RDII.cpp:514
void init(SimulationContext &ctx)
Definition RDII.cpp:190
std::vector< UnitHydParams > uh_params
Definition RDII.hpp:211
void applyRdiiInflows(SimulationContext &ctx, double elapsed_sec) const
Apply RDII inflows at a routing time to node lateral flows.
Definition RDII.cpp:660
int findUnitHyd(const std::string &name) const
Look up unit hydrograph index by name.
Definition RDII.cpp:93
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:99
const UhNameMap & uhNameIndex() const
Read-only access to the UH name → index map (for validation).
Definition RDII.hpp:173
int addUnitHydParams(const std::string &name, const UnitHydParams ¶ms)
Register a unit hydrograph parameter set by name.
Definition RDII.cpp:80
std::unordered_map< std::string, int, CiHash, CiEqual > UhNameMap
UH name → index map type; case-insensitive (legacy hash.c parity).
Definition RDII.hpp:170
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:412
double getRecoveryRate(const ExpDecayParams &dp, double T_celsius)
Definition RDII.cpp:385
Definition NodeCoupling.cpp:16
Central, reentrant simulation context.
Definition SimulationContext.hpp:353
bool snow_on
Degree-day snow model enabled.
Definition RDII.hpp:80
double k_dep
Depletion rate (1/project-depth) — temperature-independent.
Definition RDII.hpp:69
double T_freeze
Recovery suppressed below this temperature (deg C)
Definition RDII.hpp:74
double snow_ddf
Degree-day melt factor (project-depth/degC/day)
Definition RDII.hpp:82
double k_T
Thermal recovery rate at T_ref (1/hr)
Definition RDII.hpp:71
double k_0
Base recovery rate (1/hr)
Definition RDII.hpp:70
double snow_T
Rain/snow threshold & melt base (deg C)
Definition RDII.hpp:81
double T_ref
Reference temperature (deg C)
Definition RDII.hpp:72
bool active
Definition RDII.hpp:68
double theta_rec
Temperature sensitivity (1/deg C)
Definition RDII.hpp:73
void resize(int n)
Definition RDII.cpp:38
std::vector< int > gage_idx
Rain gage index per UH group (legacy: UnitHyd[j].rainGage)
Definition RDII.hpp:130
std::vector< int > uh_idx
Unit hydrograph parameter index.
Definition RDII.hpp:129
std::vector< double > rate_recorded_until
Chunk starts with recorded rates (sec)
Definition RDII.hpp:144
std::vector< double > gage_elapsed
Chunk cursor (sec, legacy UHGroup.gageDate)
Definition RDII.hpp:143
std::vector< double > area
Contributing area (acres, project units)
Definition RDII.hpp:131
std::vector< int > node_idx
Target node index.
Definition RDII.hpp:128
std::vector< UHResponseData > uh_data
Per-response data: [group * 3 + response].
Definition RDII.hpp:134
std::vector< std::vector< double > > pending_rates
FIFO of recorded chunk rates.
Definition RDII.hpp:145
std::vector< int > rain_interval
Rain processing interval (sec) per group.
Definition RDII.hpp:136
int count
Definition RDII.hpp:127
int has_past_rain
true if any non-zero past rain
Definition RDII.hpp:92
long dry_seconds
seconds since last non-zero rainfall
Definition RDII.hpp:95
std::vector< int > past_month
month for each past rainfall entry
Definition RDII.hpp:89
int period
current buffer write position
Definition RDII.hpp:90
int max_periods
buffer capacity
Definition RDII.hpp:91
std::vector< double > past_rain
circular buffer of past rainfall depths
Definition RDII.hpp:88
void allocate(int n)
Definition RDII.hpp:97
double ia_used
initial abstraction used so far
Definition RDII.hpp:93
double swe
snow water equivalent (project depth; degree-day snow model)
Definition RDII.hpp:94
double iaRecov[12][3]
IA recovery rate (linear model)
Definition RDII.hpp:57
double iaMax[12][3]
Initial abstraction max depth.
Definition RDII.hpp:56
double tPeak[12][3]
Time to peak (sec) per month × response.
Definition RDII.hpp:54
double tBase[12][3]
Base time (sec) per month × response.
Definition RDII.hpp:55
double r[12][3]
Rainfall fraction per month × response.
Definition RDII.hpp:53
double iaInit[12][3]
Initial IA used.
Definition RDII.hpp:58