OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
InitialQualityData.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2//
3// Copyright 2026 Caleb Buahin
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
34
35#ifndef OPENSWMM_ENGINE_INITIAL_QUALITY_DATA_HPP
36#define OPENSWMM_ENGINE_INITIAL_QUALITY_DATA_HPP
37
38#include <vector>
39#include <string>
40
41namespace openswmm {
42
43// ============================================================================
44// Per-element initial quality (from [INITIAL_QUALITY] section)
45// ============================================================================
46
49 static constexpr int kKindWaterAge = -1;
50 static constexpr int kKindTemperature = -2;
51 static constexpr int kKindUnresolved = -3;
57 static constexpr int kKindMsxFirst = -100;
64 static constexpr int msxKind(int species) noexcept { return kKindMsxFirst - species; }
72 static constexpr int msxSpecies(int k) noexcept {
73 return (k <= kKindMsxFirst) ? (kKindMsxFirst - k) : -1;
74 }
75
80 int count() const { return static_cast<int>(is_link.size()); }
81
82 std::vector<uint8_t> is_link;
83 std::vector<std::string> elem_name;
84 std::vector<int> elem_idx;
85 std::vector<std::string> constituent;
86 std::vector<int> kind;
87 std::vector<double> value;
91 std::vector<uint8_t> from_file;
92
95 std::string file;
96
111 void add(bool link, const std::string& name, const std::string& cons, double v, int ei = -1,
112 int k = kKindUnresolved, bool fromFile = false) {
113 is_link.push_back(link ? 1 : 0);
114 elem_name.push_back(name);
115 elem_idx.push_back(ei);
116 constituent.push_back(cons);
117 kind.push_back(k);
118 value.push_back(v);
119 from_file.push_back(fromFile ? 1 : 0);
120 }
121
131 void erase(int idx) {
132 if (idx < 0 || idx >= count())
133 return;
134 const auto u = static_cast<std::size_t>(idx);
135 is_link.erase(is_link.begin() + u);
136 elem_name.erase(elem_name.begin() + u);
137 elem_idx.erase(elem_idx.begin() + u);
138 constituent.erase(constituent.begin() + u);
139 kind.erase(kind.begin() + u);
140 value.erase(value.begin() + u);
141 if (u < from_file.size())
142 from_file.erase(from_file.begin() + u);
143 }
144};
145
146} // namespace openswmm
147
148#endif // OPENSWMM_ENGINE_INITIAL_QUALITY_DATA_HPP
Definition ExchangeLaw.hpp:60
Definition InitialQualityData.hpp:47
std::vector< uint8_t > from_file
Definition InitialQualityData.hpp:91
static constexpr int kKindWaterAge
Classified constituent kinds (see kind).
Definition InitialQualityData.hpp:49
std::vector< std::string > constituent
Raw constituent name (writer round-trip)
Definition InitialQualityData.hpp:85
static constexpr int msxSpecies(int k) noexcept
Decode a negative MSX kind into its reaction-species index.
Definition InitialQualityData.hpp:72
int count() const
Count initial-quality rows from the element-kind column.
Definition InitialQualityData.hpp:80
std::vector< int > kind
>=0 pollutant idx; kKind* otherwise
Definition InitialQualityData.hpp:86
std::vector< int > elem_idx
Resolved node/link index (-1 until resolved)
Definition InitialQualityData.hpp:84
std::string file
Definition InitialQualityData.hpp:95
static constexpr int msxKind(int species) noexcept
Encode a reaction-species index as a negative constituent kind.
Definition InitialQualityData.hpp:64
void add(bool link, const std::string &name, const std::string &cons, double v, int ei=-1, int k=kKindUnresolved, bool fromFile=false)
Append an initial-quality row without resolving its names.
Definition InitialQualityData.hpp:111
std::vector< std::string > elem_name
Raw element name (post-parse re-resolution)
Definition InitialQualityData.hpp:83
std::vector< uint8_t > is_link
0 = NODE row, 1 = LINK row
Definition InitialQualityData.hpp:82
static constexpr int kKindMsxFirst
Definition InitialQualityData.hpp:57
static constexpr int kKindUnresolved
Definition InitialQualityData.hpp:51
static constexpr int kKindTemperature
TEMPERATURE (degC)
Definition InitialQualityData.hpp:50
void erase(int idx)
Remove a stored initial-quality row when its index exists.
Definition InitialQualityData.hpp:131
std::vector< double > value
Definition InitialQualityData.hpp:87