diff --git a/ChemistryLib/ChemicalSolverInterface.h b/ChemistryLib/ChemicalSolverInterface.h index ed55c782aad66a923289a042046f812093608b44..1572924bc356c5c1c554ef5c582ceb169bde5d7c 100644 --- a/ChemistryLib/ChemicalSolverInterface.h +++ b/ChemistryLib/ChemicalSolverInterface.h @@ -17,6 +17,8 @@ namespace ChemistryLib class ChemicalSolverInterface { public: + virtual void initialize() {} + virtual void executeInitialCalculation( std::vector<GlobalVector*>& process_solutions) = 0; diff --git a/ChemistryLib/PhreeqcIO.cpp b/ChemistryLib/PhreeqcIO.cpp index 54ec132c52c9a7c9708803fae7fe39ee9d75fea9..33778212c4c020fac1cc4c4d7b1c5754d405594d 100644 --- a/ChemistryLib/PhreeqcIO.cpp +++ b/ChemistryLib/PhreeqcIO.cpp @@ -15,6 +15,7 @@ #include <boost/algorithm/string.hpp> #include <cmath> #include <fstream> +#include <numeric> #include "BaseLib/Algorithm.h" #include "BaseLib/ConfigTreeUtil.h" @@ -101,6 +102,15 @@ PhreeqcIO::PhreeqcIO(std::string const project_file_name, } } +void PhreeqcIO::initialize() +{ + _num_chemical_systems = std::accumulate( + begin(chemical_system_index_map), end(chemical_system_index_map), 0, + [](auto result, auto const& chemical_system_index) { + return result + chemical_system_index.size(); + }); +} + void PhreeqcIO::executeInitialCalculation( std::vector<GlobalVector*>& process_solutions) { diff --git a/ChemistryLib/PhreeqcIO.h b/ChemistryLib/PhreeqcIO.h index 4c59ca563b295b92f38f76e7ebc2aa1066177baf..0f8dcf1565083ee3cf00e551a91137f1b1bfde5c 100644 --- a/ChemistryLib/PhreeqcIO.h +++ b/ChemistryLib/PhreeqcIO.h @@ -51,6 +51,8 @@ public: std::unique_ptr<Dump>&& dump, Knobs&& knobs); + void initialize() override; + void executeInitialCalculation( std::vector<GlobalVector*>& process_solutions) override; @@ -97,6 +99,7 @@ private: Knobs const _knobs; double _dt = std::numeric_limits<double>::quiet_NaN(); const int phreeqc_instance_id = 0; + int _num_chemical_systems = -1; }; } // namespace PhreeqcIOData } // namespace ChemistryLib