OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
PollutantData.hpp
Go to the documentation of this file.
1
19#ifndef OPENSWMM_ENGINE_POLLUTANT_DATA_HPP
20#define OPENSWMM_ENGINE_POLLUTANT_DATA_HPP
21
22#include <vector>
23#include <string>
24#include <cstdint>
25
26namespace openswmm {
27
28// ============================================================================
29// Concentration units
30// ============================================================================
31
36enum class MassUnits : int8_t {
37 MG_PER_L = 0,
38 UG_PER_L = 1,
39 COUNTS_PER_L = 2
40};
41
42// ============================================================================
43// PollutantData — pollutant definitions
44// ============================================================================
45
56
57 // -----------------------------------------------------------------------
58 // Pollutant definition arrays (indexed by pollutant index)
59 // -----------------------------------------------------------------------
60
65 std::vector<MassUnits> units;
66
71 std::vector<double> mwt;
72
77 std::vector<double> k_decay;
78
83 std::vector<double> c_rain;
84
89 std::vector<double> c_gw;
90
95 std::vector<double> c_rdii;
96
101 std::vector<double> init_conc;
102
108 std::vector<int> co_pollut;
109
114 std::vector<double> co_frac;
115
120 std::vector<bool> snow_only;
121
122 // -----------------------------------------------------------------------
123 // Per-node quality state — flat 2D: [node * n_pollutants + pollutant]
124 // -----------------------------------------------------------------------
125
131 std::vector<double> node_conc;
132
134 std::vector<double> node_conc_old;
135
136 // -----------------------------------------------------------------------
137 // Per-link quality state — flat 2D: [link * n_pollutants + pollutant]
138 // -----------------------------------------------------------------------
139
145 std::vector<double> link_conc;
146
148 std::vector<double> link_conc_old;
149
150 // -----------------------------------------------------------------------
151 // Per-subcatch quality state — flat 2D: [subcatch * n_pollutants + pollutant]
152 // -----------------------------------------------------------------------
153
159 std::vector<double> subcatch_conc;
160
162 std::vector<double> subcatch_conc_old;
163
164 // -----------------------------------------------------------------------
165 // Capacity management
166 // -----------------------------------------------------------------------
167
168 int n_pollutants() const noexcept { return static_cast<int>(units.size()); }
169
171 void resize_pollutants(int n) {
172 const auto un = static_cast<std::size_t>(n);
173 units.assign(un, MassUnits::MG_PER_L);
174 mwt.assign(un, 1.0);
175 k_decay.assign(un, 0.0);
176 c_rain.assign(un, 0.0);
177 c_gw.assign(un, 0.0);
178 c_rdii.assign(un, 0.0);
179 init_conc.assign(un, 0.0);
180 co_pollut.assign(un, -1);
181 co_frac.assign(un, 0.0);
182 snow_only.assign(un, false);
183 }
184
193 void resize_quality(int n_nodes, int n_links, int n_subcatches) {
194 const auto np = static_cast<std::size_t>(n_pollutants());
195 node_conc.assign(static_cast<std::size_t>(n_nodes) * np, 0.0);
196 node_conc_old.assign(static_cast<std::size_t>(n_nodes) * np, 0.0);
197 link_conc.assign(static_cast<std::size_t>(n_links) * np, 0.0);
198 link_conc_old.assign(static_cast<std::size_t>(n_links) * np, 0.0);
199 subcatch_conc.assign(static_cast<std::size_t>(n_subcatches) * np, 0.0);
200 subcatch_conc_old.assign(static_cast<std::size_t>(n_subcatches) * np, 0.0);
201 }
202
208
209 void reset_quality_state() noexcept {
210 std::fill(node_conc.begin(), node_conc.end(), 0.0);
211 std::fill(node_conc_old.begin(),node_conc_old.end(),0.0);
212 std::fill(link_conc.begin(), link_conc.end(), 0.0);
213 std::fill(link_conc_old.begin(),link_conc_old.end(),0.0);
214 std::fill(subcatch_conc.begin(), subcatch_conc.end(), 0.0);
215 std::fill(subcatch_conc_old.begin(),subcatch_conc_old.end(),0.0);
216 }
217};
218
219} /* namespace openswmm */
220
221#endif /* OPENSWMM_ENGINE_POLLUTANT_DATA_HPP */
Definition Controls.cpp:24
MassUnits
Pollutant concentration units.
Definition PollutantData.hpp:36
@ MG_PER_L
Milligrams per liter.
@ UG_PER_L
Micrograms per liter.
@ COUNTS_PER_L
Counts per liter (bacteria)
Static properties for each pollutant species.
Definition PollutantData.hpp:55
std::vector< double > link_conc_old
Previous-step quality in each link.
Definition PollutantData.hpp:148
std::vector< double > init_conc
Initial concentration everywhere in the network.
Definition PollutantData.hpp:101
int n_pollutants() const noexcept
Definition PollutantData.hpp:168
void resize_pollutants(int n)
Resize pollutant definition arrays to hold n pollutants.
Definition PollutantData.hpp:171
std::vector< double > c_gw
Groundwater concentration.
Definition PollutantData.hpp:89
std::vector< double > node_conc_old
Previous-step quality at each node.
Definition PollutantData.hpp:134
void save_quality_state() noexcept
Definition PollutantData.hpp:203
std::vector< double > subcatch_conc_old
Previous-step quality in subcatchment runoff.
Definition PollutantData.hpp:162
std::vector< int > co_pollut
Co-pollutant index (-1 if none).
Definition PollutantData.hpp:108
std::vector< double > c_rain
Rain concentration (project mass/volume units).
Definition PollutantData.hpp:83
std::vector< double > link_conc
Current quality concentration in each link.
Definition PollutantData.hpp:145
std::vector< double > mwt
Molecular weight (g/mol). Used for unit conversions.
Definition PollutantData.hpp:71
std::vector< double > k_decay
First-order decay coefficient (1/day).
Definition PollutantData.hpp:77
std::vector< bool > snow_only
True if the pollutant should be printed in output.
Definition PollutantData.hpp:120
void reset_quality_state() noexcept
Definition PollutantData.hpp:209
std::vector< double > c_rdii
RDII concentration.
Definition PollutantData.hpp:95
void resize_quality(int n_nodes, int n_links, int n_subcatches)
Allocate per-object quality arrays.
Definition PollutantData.hpp:193
std::vector< MassUnits > units
Concentration units for each pollutant.
Definition PollutantData.hpp:65
std::vector< double > subcatch_conc
Current quality concentration in subcatchment runoff.
Definition PollutantData.hpp:159
std::vector< double > co_frac
Co-fraction (fraction of co-pollutant concentration).
Definition PollutantData.hpp:114
std::vector< double > node_conc
Current quality concentration at each node.
Definition PollutantData.hpp:131