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;
58 static constexpr int msxKind(int species) noexcept { return kKindMsxFirst - species; }
60 static constexpr int msxSpecies(int k) noexcept {
61 return (k <= kKindMsxFirst) ? (kKindMsxFirst - k) : -1;
62 }
63
64 int count() const { return static_cast<int>(is_link.size()); }
65
66 std::vector<uint8_t> is_link;
67 std::vector<std::string> elem_name;
68 std::vector<int> elem_idx;
69 std::vector<std::string> constituent;
70 std::vector<int> kind;
71 std::vector<double> value;
75 std::vector<uint8_t> from_file;
76
79 std::string file;
80
81 void add(bool link, const std::string& name, const std::string& cons,
82 double v, int ei = -1, int k = kKindUnresolved, bool fromFile = false) {
83 is_link.push_back(link ? 1 : 0);
84 elem_name.push_back(name);
85 elem_idx.push_back(ei);
86 constituent.push_back(cons);
87 kind.push_back(k);
88 value.push_back(v);
89 from_file.push_back(fromFile ? 1 : 0);
90 }
91
94 void erase(int idx) {
95 if (idx < 0 || idx >= count()) return;
96 const auto u = static_cast<std::size_t>(idx);
97 is_link.erase(is_link.begin() + u);
98 elem_name.erase(elem_name.begin() + u);
99 elem_idx.erase(elem_idx.begin() + u);
100 constituent.erase(constituent.begin() + u);
101 kind.erase(kind.begin() + u);
102 value.erase(value.begin() + u);
103 if (u < from_file.size()) from_file.erase(from_file.begin() + u);
104 }
105};
106
107} // namespace openswmm
108
109#endif // OPENSWMM_ENGINE_INITIAL_QUALITY_DATA_HPP
Definition NodeCoupling.cpp:16
Definition InitialQualityData.hpp:47
std::vector< uint8_t > from_file
Definition InitialQualityData.hpp:75
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:69
static constexpr int msxSpecies(int k) noexcept
Species index for an MSX kind, -1 for any other kind.
Definition InitialQualityData.hpp:60
int count() const
Definition InitialQualityData.hpp:64
std::vector< int > kind
>=0 pollutant idx; kKind* otherwise
Definition InitialQualityData.hpp:70
std::vector< int > elem_idx
Resolved node/link index (-1 until resolved)
Definition InitialQualityData.hpp:68
std::string file
Definition InitialQualityData.hpp:79
static constexpr int msxKind(int species) noexcept
Definition InitialQualityData.hpp:58
void add(bool link, const std::string &name, const std::string &cons, double v, int ei=-1, int k=kKindUnresolved, bool fromFile=false)
Definition InitialQualityData.hpp:81
std::vector< std::string > elem_name
Raw element name (post-parse re-resolution)
Definition InitialQualityData.hpp:67
std::vector< uint8_t > is_link
0 = NODE row, 1 = LINK row
Definition InitialQualityData.hpp:66
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)
Definition InitialQualityData.hpp:94
std::vector< double > value
Definition InitialQualityData.hpp:71