OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
AcceptedWaterVolumes.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Caleb Buahin
3#pragma once
4#include <algorithm>
5#include <cstddef>
6#include <vector>
7
8namespace openswmm::fv {
15 std::vector<double> face_forward, face_reverse;
17 std::vector<double> cell_lateral, cell_loss, node_deficit;
19
20 void resize(std::size_t nf, std::size_t ns, std::size_t nc, std::size_t nn) {
21 face_forward.assign(nf, 0.0); face_reverse.assign(nf, 0.0);
22 structure_forward.assign(ns, 0.0); structure_reverse.assign(ns, 0.0);
23 cell_lateral.assign(nc, 0.0); cell_loss.assign(nc, 0.0);
24 node_deficit.assign(nn, 0.0);
25 face_lateral_left.assign(nf,0.0); face_lateral_right.assign(nf,0.0); face_spill.assign(nf,0.0);
26 }
27 template<class Fn> void each(Fn fn) {
31 }
32 void clear() { each([](auto& v) { std::fill(v.begin(), v.end(), 0.0); }); }
34 auto avg=[](auto& v, const auto& b) {
35 for (std::size_t i=0;i<v.size();++i) v[i]=b[i]+0.5*(v[i]-b[i]);
36 };
39 avg(cell_lateral,base.cell_lateral); avg(cell_loss,base.cell_loss);
40 avg(node_deficit,base.node_deficit);
42 avg(face_spill,base.face_spill);
43 }
44 void face(std::size_t f, double volume) {
45 if (volume >= 0) face_forward[f] += volume; else face_reverse[f] -= volume;
46 }
47 void structure(std::size_t s, double volume) {
48 if (volume >= 0) structure_forward[s] += volume; else structure_reverse[s] -= volume;
49 }
50};
51} // namespace openswmm::fv
Definition AcceptedWaterVolumes.hpp:8
Definition NodeCoupling2D.cpp:23
Definition AcceptedWaterVolumes.hpp:14
void averageDelta(const AcceptedWaterVolumes &base)
Definition AcceptedWaterVolumes.hpp:33
std::vector< double > structure_reverse
Definition AcceptedWaterVolumes.hpp:16
void clear()
Definition AcceptedWaterVolumes.hpp:32
std::vector< double > structure_forward
Definition AcceptedWaterVolumes.hpp:16
std::vector< double > cell_loss
Definition AcceptedWaterVolumes.hpp:17
std::vector< double > cell_lateral
Definition AcceptedWaterVolumes.hpp:17
void face(std::size_t f, double volume)
Definition AcceptedWaterVolumes.hpp:44
void structure(std::size_t s, double volume)
Definition AcceptedWaterVolumes.hpp:47
std::vector< double > node_deficit
Definition AcceptedWaterVolumes.hpp:17
std::vector< double > face_forward
Definition AcceptedWaterVolumes.hpp:15
std::vector< double > face_lateral_right
Definition AcceptedWaterVolumes.hpp:18
std::vector< double > face_spill
Definition AcceptedWaterVolumes.hpp:18
void each(Fn fn)
Definition AcceptedWaterVolumes.hpp:27
std::vector< double > face_lateral_left
Definition AcceptedWaterVolumes.hpp:18
std::vector< double > face_reverse
Definition AcceptedWaterVolumes.hpp:15
void resize(std::size_t nf, std::size_t ns, std::size_t nc, std::size_t nn)
Definition AcceptedWaterVolumes.hpp:20