119 std::string
const& project_file_name,
120 std::string&& database,
121 std::unique_ptr<ChemicalSystem>&& chemical_system,
122 std::vector<ReactionRate>&& reaction_rates,
123 std::unique_ptr<UserPunch>&& user_punch,
124 std::unique_ptr<Output>&& output,
125 std::unique_ptr<Dump>&& dump,
127 bool use_stream_mode,
128 int num_chemistry_threads,
129 double concentration_warning_threshold);
136 std::vector<double>
const& concentrations,
140 double const t)
override;
143 std::vector<double>
const& concentrations,
148 double const dt)
override;
155 int const component_id,
158 friend std::ostream&
operator<<(std::ostream& os,
167 double const t,
double const dt)
override;
171 double& porosity)
override;
174 std::size_t
const ele_id,
175 std::vector<GlobalIndexType>
const& chemical_system_indices)
override;
201 std::size_t chemical_system_id,
202 std::size_t solution_id,
203 std::size_t prev_solution_id,
210 std::size_t chemical_system_id);
221 double const dt)
const;
224 std::size_t chemical_system_id);
227 std::vector<double>
const& accepted_items,
228 std::size_t chemical_system_id);
251 double _dt = std::numeric_limits<double>::quiet_NaN();
Interface for coupling OpenGeoSys with an external geochemical solver.
MathLib::EigenLisLinearSolver GlobalLinearSolver
GlobalMatrix::IndexType GlobalIndexType
GlobalLinearSolver & linear_solver
ChemicalSolverInterface(MeshLib::Mesh const &mesh, GlobalLinearSolver &linear_solver_)
void parseOutputForSystem(std::string_view output_content, std::size_t chemical_system_id)
std::string generateInputForSystem(std::size_t chemical_system_id, double const dt) const
int num_chemistry_threads_
friend std::ostream & operator<<(std::ostream &os, PhreeqcIO const &phreeqc_io)
void writeSystemBlock(std::ostream &os, std::size_t chemical_system_id, std::size_t solution_id, std::size_t prev_solution_id, double dt) const
std::string const _phreeqc_input_file
void updateSystemFromOutputLine(std::string_view line, std::size_t chemical_system_id)
double _concentration_warning_threshold
double getConcentration(int const component_id, GlobalIndexType const chemical_system_id) const override
void setAqueousSolutionsPrevFromDumpFile() override
std::unique_ptr< ChemicalSystem > _chemical_system
std::vector< ReactionRate > const _reaction_rates
std::unique_ptr< UserPunch > _user_punch
std::unique_ptr< PhreeqcInstancePool > instance_pool_
void writeInputsToFile(double const dt)
void setChemicalSystemConcrete(std::vector< double > const &concentrations, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const *medium, MaterialPropertyLib::VariableArray const &vars, ParameterLib::SpatialPosition const &pos, double const t, double const dt) override
PhreeqcIO & operator<<(double const dt)
PhreeqcIO(MeshLib::Mesh const &mesh, GlobalLinearSolver &linear_solver, std::string const &project_file_name, std::string &&database, std::unique_ptr< ChemicalSystem > &&chemical_system, std::vector< ReactionRate > &&reaction_rates, std::unique_ptr< UserPunch > &&user_punch, std::unique_ptr< Output > &&output, std::unique_ptr< Dump > &&dump, Knobs &&knobs, bool use_stream_mode, int num_chemistry_threads, double concentration_warning_threshold)
void executeSpeciationCalculationParallel(double const dt)
std::unique_ptr< Dump > const _dump
void initialize() override
std::unique_ptr< Output > const _output
void readOutputsFromFile()
std::size_t _num_chemical_systems
ClampingStats _clamping_totals
void computeSecondaryVariable(std::size_t const ele_id, std::vector< GlobalIndexType > const &chemical_system_indices) override
void updateChemicalSystemFromOutput(std::vector< double > const &accepted_items, std::size_t chemical_system_id)
void writeInputHeader(std::ostream &os) const
void initializeChemicalSystemConcrete(std::vector< double > const &concentrations, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const &medium, ParameterLib::SpatialPosition const &pos, double const t) override
void updateVolumeFractionPostReaction(GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const &medium, ParameterLib::SpatialPosition const &pos, double const porosity, double const t, double const dt) override
void executeSpeciationCalculation(double const dt) override
void setAqueousSolutionsPrevFromDumpString(std::string_view dump_content)
std::string const _database
friend std::istream & operator>>(std::istream &in, PhreeqcIO &phreeqc_io)
std::vector< std::string > const getComponentList() const override
void updatePorosityPostReaction(GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const &medium, double &porosity) override
Complete description of one local reactive system passed to PHREEQC.
Specification of which PHREEQC output columns are imported into OpenGeoSys.