OGS
PhreeqcIO.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <memory>
14 
16 #include "PhreeqcIOData/Knobs.h"
17 
18 namespace MeshLib
19 {
20 class Mesh;
21 }
22 
23 namespace ChemistryLib
24 {
25 namespace PhreeqcIOData
26 {
27 struct ChemicalSystem;
28 struct ReactionRate;
29 struct Output;
30 struct SurfaceSite;
31 struct Dump;
32 struct UserPunch;
33 
34 class PhreeqcIO final : public ChemicalSolverInterface
35 {
36 public:
38  std::string const& project_file_name,
39  std::string&& database,
40  std::unique_ptr<ChemicalSystem>&& chemical_system,
41  std::vector<ReactionRate>&& reaction_rates,
42  std::vector<SurfaceSite>&& surface,
43  std::unique_ptr<UserPunch>&& user_punch,
44  std::unique_ptr<Output>&& output,
45  std::unique_ptr<Dump>&& dump,
46  Knobs&& knobs);
47 
48  void initialize() override;
49 
51  std::vector<double> const& concentrations,
52  GlobalIndexType const& chemical_system_id,
53  MaterialPropertyLib::Medium const& medium,
55  double const t) override;
56 
58  std::vector<double> const& concentrations,
59  GlobalIndexType const& chemical_system_id,
60  MaterialPropertyLib::Medium const* medium,
62  ParameterLib::SpatialPosition const& pos, double const t,
63  double const dt) override;
64 
66 
67  void executeSpeciationCalculation(double const dt) override;
68 
69  std::vector<GlobalVector*> getIntPtProcessSolutions() const override;
70 
71  double getConcentration(
72  int const component_id,
73  GlobalIndexType const chemical_system_id) const override;
74 
75  friend std::ostream& operator<<(std::ostream& os,
76  PhreeqcIO const& phreeqc_io);
77 
78  friend std::istream& operator>>(std::istream& in, PhreeqcIO& phreeqc_io);
79 
81  GlobalIndexType const& chemical_system_id,
82  MaterialPropertyLib::Medium const& medium,
83  ParameterLib::SpatialPosition const& pos, double const porosity,
84  double const t, double const dt) override;
85 
86  void updatePorosityPostReaction(GlobalIndexType const& chemical_system_id,
87  MaterialPropertyLib::Medium const& medium,
88  double& porosity) override;
89 
91  std::size_t const ele_id,
92  std::vector<GlobalIndexType> const& chemical_system_indices) override;
93 
94  std::vector<std::string> const getComponentList() const override;
95 
96  std::string const _phreeqc_input_file;
97 
98 private:
99  void writeInputsToFile(double const dt);
100 
101  void callPhreeqc();
102 
103  void readOutputsFromFile();
104 
105  PhreeqcIO& operator<<(double const dt)
106  {
107  _dt = dt;
108  return *this;
109  }
110 
111  std::string const _database;
112  std::unique_ptr<ChemicalSystem> _chemical_system;
113  std::vector<ReactionRate> const _reaction_rates;
114  std::vector<SurfaceSite> const _surface;
115  std::unique_ptr<UserPunch> _user_punch;
116  std::unique_ptr<Output> const _output;
117  std::unique_ptr<Dump> const _dump;
118  Knobs const _knobs;
119  double _dt = std::numeric_limits<double>::quiet_NaN();
120  const int phreeqc_instance_id = 0;
121  std::size_t _num_chemical_systems = -1;
122 };
123 } // namespace PhreeqcIOData
124 } // namespace ChemistryLib
GlobalMatrix::IndexType GlobalIndexType
std::vector< SurfaceSite > const _surface
Definition: PhreeqcIO.h:114
std::string const _phreeqc_input_file
Definition: PhreeqcIO.h:96
PhreeqcIO(GlobalLinearSolver &linear_solver, std::string const &project_file_name, std::string &&database, std::unique_ptr< ChemicalSystem > &&chemical_system, std::vector< ReactionRate > &&reaction_rates, std::vector< SurfaceSite > &&surface, std::unique_ptr< UserPunch > &&user_punch, std::unique_ptr< Output > &&output, std::unique_ptr< Dump > &&dump, Knobs &&knobs)
Definition: PhreeqcIO.cpp:251
double getConcentration(int const component_id, GlobalIndexType const chemical_system_id) const override
Definition: PhreeqcIO.cpp:400
void setAqueousSolutionsPrevFromDumpFile() override
Definition: PhreeqcIO.cpp:412
std::unique_ptr< ChemicalSystem > _chemical_system
Definition: PhreeqcIO.h:112
std::vector< ReactionRate > const _reaction_rates
Definition: PhreeqcIO.h:113
std::unique_ptr< UserPunch > _user_punch
Definition: PhreeqcIO.h:115
void writeInputsToFile(double const dt)
Definition: PhreeqcIO.cpp:436
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
Definition: PhreeqcIO.cpp:349
std::unique_ptr< Dump > const _dump
Definition: PhreeqcIO.h:117
std::unique_ptr< Output > const _output
Definition: PhreeqcIO.h:116
friend std::istream & operator>>(std::istream &in, PhreeqcIO &phreeqc_io)
Definition: PhreeqcIO.cpp:611
std::vector< GlobalVector * > getIntPtProcessSolutions() const override
Definition: PhreeqcIO.cpp:384
friend std::ostream & operator<<(std::ostream &os, PhreeqcIO const &phreeqc_io)
Definition: PhreeqcIO.cpp:460
void computeSecondaryVariable(std::size_t const ele_id, std::vector< GlobalIndexType > const &chemical_system_indices) override
Definition: PhreeqcIO.cpp:827
void initializeChemicalSystemConcrete(std::vector< double > const &concentrations, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const &medium, ParameterLib::SpatialPosition const &pos, double const t) override
Definition: PhreeqcIO.cpp:317
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
Definition: PhreeqcIO.cpp:790
PhreeqcIO & operator<<(double const dt)
Definition: PhreeqcIO.h:105
void executeSpeciationCalculation(double const dt) override
Definition: PhreeqcIO.cpp:375
std::vector< std::string > const getComponentList() const override
Definition: PhreeqcIO.cpp:777
void updatePorosityPostReaction(GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const &medium, double &porosity) override
Definition: PhreeqcIO.cpp:809
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
Definition: VariableType.h:108