OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
ConservativeMixing.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Caleb Buahin
3#pragma once
5#include <cstddef>
6#include <vector>
7
8namespace openswmm::quality {
11struct WaterTransfer { std::size_t donor, receiver; double volume; };
13 std::vector<double> old_volume, new_volume, source_volume;
14 std::vector<double> exported, seeped, evaporated;
15 std::vector<WaterTransfer> transfers;
16};
19 bool nonnegative = true; // false for temperature-volume
20};
24
29public:
30 struct Result {
31 bool converged=false;
34 };
35 bool prepare(const MixingWater& water, double relative_water_tolerance=1e-9);
36 Result solve(const MixingScalar& scalar, MixedScalar& output);
37private:
38 MixingWater water_;
39 std::vector<double> diagonal_, rhs_, image_, correction_, guess_;
40 fv::NativeGmres gmres_;
41 MixedScalar candidate_;
42 std::vector<double> incoming_, outgoing_;
43 bool prepared_=false;
44 double water_residual_=0;
45};
46} // namespace openswmm::quality
Native GMRES iteration for finite-volume linear systems.
Definition NativeGmres.hpp:25
Definition ConservativeMixing.hpp:28
Result solve(const MixingScalar &scalar, MixedScalar &output)
Definition ConservativeMixing.cpp:43
bool prepare(const MixingWater &water, double relative_water_tolerance=1e-9)
Definition ConservativeMixing.cpp:9
Definition ConservativeMixing.cpp:8
Definition ConservativeMixing.hpp:30
int iterations
Definition ConservativeMixing.hpp:33
bool converged
Definition ConservativeMixing.hpp:31
double max_water_residual
Definition ConservativeMixing.hpp:32
double mass_residual
Definition ConservativeMixing.hpp:32
Definition ConservativeMixing.hpp:21
std::vector< double > exported_mass
Definition ConservativeMixing.hpp:22
std::vector< double > concentration
Definition ConservativeMixing.hpp:22
std::vector< double > seeped_mass
Definition ConservativeMixing.hpp:22
std::vector< double > transfer_mass
Definition ConservativeMixing.hpp:22
std::vector< double > held_dry_mass
Definition ConservativeMixing.hpp:22
Definition ConservativeMixing.hpp:17
std::vector< double > old_concentration
Definition ConservativeMixing.hpp:18
std::vector< double > source_mass
Definition ConservativeMixing.hpp:18
bool nonnegative
Definition ConservativeMixing.hpp:19
std::vector< double > held_dry_mass
Definition ConservativeMixing.hpp:18
Definition ConservativeMixing.hpp:12
std::vector< double > seeped
Definition ConservativeMixing.hpp:14
std::vector< double > exported
Definition ConservativeMixing.hpp:14
std::vector< WaterTransfer > transfers
Definition ConservativeMixing.hpp:15
std::vector< double > new_volume
Definition ConservativeMixing.hpp:13
std::vector< double > old_volume
Definition ConservativeMixing.hpp:13
std::vector< double > evaporated
Definition ConservativeMixing.hpp:14
std::vector< double > source_volume
Definition ConservativeMixing.hpp:13
Definition ConservativeMixing.hpp:11
std::size_t receiver
Definition ConservativeMixing.hpp:11
std::size_t donor
Definition ConservativeMixing.hpp:11
double volume
Definition ConservativeMixing.hpp:11