OGS
ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp} Namespace Reference

Functions

template<typename DataBlock >
std::ostream & operator<< (std::ostream &os, std::vector< DataBlock > const &data_blocks)
 
void setAqueousSolution (std::vector< double > const &concentrations, GlobalIndexType const &chemical_system_id, AqueousSolution &aqueous_solution)
 
template<typename Reactant >
void initializeReactantMolality (Reactant &reactant, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Phase const &solid_phase, MaterialPropertyLib::Phase const &liquid_phase, MaterialPropertyLib::Medium const &medium, ParameterLib::SpatialPosition const &pos, double const t)
 
template<typename Reactant >
void setReactantMolality (Reactant &reactant, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Phase const &solid_phase, MaterialPropertyLib::Phase const &liquid_phase, MaterialPropertyLib::VariableArray const &vars, ParameterLib::SpatialPosition const &pos, double const t, double const dt)
 
template<typename Exchanger >
void initializeExchangerMolality (Exchanger &exchanger, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Phase const &solid_phase, ParameterLib::SpatialPosition const &pos, double const t)
 
template<typename Reactant >
void updateReactantVolumeFraction (Reactant &reactant, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const &medium, ParameterLib::SpatialPosition const &pos, double const porosity, double const t, double const dt)
 
template<typename Reactant >
void setPorosityPostReaction (Reactant &reactant, GlobalIndexType const &chemical_system_id, MaterialPropertyLib::Medium const &medium, double &porosity)
 
template<typename Reactant >
static double averageReactantMolality (Reactant const &reactant, std::vector< GlobalIndexType > const &chemical_system_indices)
 

Function Documentation

◆ averageReactantMolality()

template<typename Reactant >
static double ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::averageReactantMolality ( Reactant const &  reactant,
std::vector< GlobalIndexType > const &  chemical_system_indices 
)
static

Definition at line 239 of file PhreeqcIO.cpp.

242 {
243  double const sum = std::accumulate(
244  chemical_system_indices.begin(), chemical_system_indices.end(), 0.0,
245  [&](double const s, GlobalIndexType const id)
246  { return s + (*reactant.molality)[id]; });
247  return sum / chemical_system_indices.size();
248 }
GlobalMatrix::IndexType GlobalIndexType

Referenced by ChemistryLib::PhreeqcIOData::PhreeqcIO::computeSecondaryVariable().

◆ initializeExchangerMolality()

template<typename Exchanger >
void ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::initializeExchangerMolality ( Exchanger &  exchanger,
GlobalIndexType const &  chemical_system_id,
MaterialPropertyLib::Phase const &  solid_phase,
ParameterLib::SpatialPosition const &  pos,
double const  t 
)

Definition at line 168 of file PhreeqcIO.cpp.

173 {
174  auto const& solid_constituent = solid_phase.component(exchanger.name);
175 
176  auto const molality =
178  .template initialValue<double>(pos, t);
179 
180  (*exchanger.molality)[chemical_system_id] = molality;
181 }

References MaterialPropertyLib::Phase::component(), and MaterialPropertyLib::molality.

Referenced by ChemistryLib::PhreeqcIOData::PhreeqcIO::initializeChemicalSystemConcrete().

◆ initializeReactantMolality()

template<typename Reactant >
void ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::initializeReactantMolality ( Reactant &  reactant,
GlobalIndexType const &  chemical_system_id,
MaterialPropertyLib::Phase const &  solid_phase,
MaterialPropertyLib::Phase const &  liquid_phase,
MaterialPropertyLib::Medium const &  medium,
ParameterLib::SpatialPosition const &  pos,
double const  t 
)

Definition at line 72 of file PhreeqcIO.cpp.

79 {
80  auto const& solid_constituent = solid_phase.component(reactant.name);
81 
82  if (solid_constituent.hasProperty(
84  {
85  auto const molality =
87  .template initialValue<double>(pos, t);
88 
89  (*reactant.molality)[chemical_system_id] = molality;
90  (*reactant.molality_prev)[chemical_system_id] = molality;
91  }
92  else
93  {
94  auto const volume_fraction =
95  solid_constituent
97  .template initialValue<double>(pos, t);
98 
99  (*reactant.volume_fraction)[chemical_system_id] = volume_fraction;
100 
101  (*reactant.volume_fraction_prev)[chemical_system_id] = volume_fraction;
102 
103  auto const fluid_density =
105  .template initialValue<double>(pos, t);
106 
107  auto const porosity =
109  .template initialValue<double>(pos, t);
110 
111  auto const molar_volume =
113  .template initialValue<double>(pos, t);
114 
115  (*reactant.molality)[chemical_system_id] =
117 
118  (*reactant.molality_prev)[chemical_system_id] =
119  (*reactant.molality)[chemical_system_id];
120  }
121 }
double fluid_density(const double p, const double T, const double x)

References MaterialPropertyLib::Phase::component(), MaterialPropertyLib::density, ProcessLib::TES::fluid_density(), MaterialPropertyLib::molality, MaterialPropertyLib::molar_volume, MaterialPropertyLib::porosity, and MaterialPropertyLib::volume_fraction.

Referenced by ChemistryLib::PhreeqcIOData::PhreeqcIO::initializeChemicalSystemConcrete().

◆ operator<<()

template<typename DataBlock >
std::ostream& ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::operator<< ( std::ostream &  os,
std::vector< DataBlock > const &  data_blocks 
)

Definition at line 46 of file PhreeqcIO.cpp.

48 {
49  std::copy(data_blocks.begin(), data_blocks.end(),
50  std::ostream_iterator<DataBlock>(os));
51  return os;
52 }
void copy(PETScVector const &x, PETScVector &y)
Definition: LinAlg.cpp:37

References MathLib::LinAlg::copy().

◆ setAqueousSolution()

void ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::setAqueousSolution ( std::vector< double > const &  concentrations,
GlobalIndexType const &  chemical_system_id,
AqueousSolution aqueous_solution 
)

Definition at line 54 of file PhreeqcIO.cpp.

57 {
58  // components
59  auto& components = aqueous_solution.components;
60  for (unsigned component_id = 0; component_id < components.size();
61  ++component_id)
62  {
63  components[component_id].amount->set(chemical_system_id,
64  concentrations[component_id]);
65  }
66 
67  // pH
68  aqueous_solution.pH->set(chemical_system_id, concentrations.back());
69 }

References ChemistryLib::PhreeqcIOData::AqueousSolution::components, and ChemistryLib::PhreeqcIOData::AqueousSolution::pH.

Referenced by ChemistryLib::PhreeqcIOData::PhreeqcIO::initializeChemicalSystemConcrete(), and ChemistryLib::PhreeqcIOData::PhreeqcIO::setChemicalSystemConcrete().

◆ setPorosityPostReaction()

template<typename Reactant >
void ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::setPorosityPostReaction ( Reactant &  reactant,
GlobalIndexType const &  chemical_system_id,
MaterialPropertyLib::Medium const &  medium,
double &  porosity 
)

Definition at line 219 of file PhreeqcIO.cpp.

223 {
224  auto const& solid_phase = medium.phase("Solid");
225 
226  auto const& solid_constituent = solid_phase.component(reactant.name);
227 
228  if (solid_constituent.hasProperty(
230  {
231  return;
232  }
233 
234  porosity -= ((*reactant.volume_fraction)[chemical_system_id] -
235  (*reactant.volume_fraction_prev)[chemical_system_id]);
236 }

References MaterialPropertyLib::Phase::component(), MaterialPropertyLib::molality, and MaterialPropertyLib::Medium::phase().

Referenced by ChemistryLib::PhreeqcIOData::PhreeqcIO::updatePorosityPostReaction().

◆ setReactantMolality()

template<typename Reactant >
void ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::setReactantMolality ( Reactant &  reactant,
GlobalIndexType const &  chemical_system_id,
MaterialPropertyLib::Phase const &  solid_phase,
MaterialPropertyLib::Phase const &  liquid_phase,
MaterialPropertyLib::VariableArray const &  vars,
ParameterLib::SpatialPosition const &  pos,
double const  t,
double const  dt 
)

Definition at line 124 of file PhreeqcIO.cpp.

131 {
132  auto const& solid_constituent = solid_phase.component(reactant.name);
133 
134  if (solid_constituent.hasProperty(
136  {
137  (*reactant.molality_prev)[chemical_system_id] =
138  (*reactant.molality)[chemical_system_id];
139 
140  return;
141  }
142 
143  auto const volume_fraction =
144  (*reactant.volume_fraction)[chemical_system_id];
145 
146  (*reactant.volume_fraction_prev)[chemical_system_id] =
147  (*reactant.volume_fraction)[chemical_system_id];
148 
149  auto const fluid_density =
151  .template value<double>(vars, pos, t, dt);
152 
153  auto const porosity = std::get<double>(
154  vars[static_cast<int>(MaterialPropertyLib::Variable::porosity)]);
155 
156  auto const molar_volume =
158  .template value<double>(vars, pos, t, dt);
159 
160  (*reactant.molality)[chemical_system_id] =
162 
163  (*reactant.molality_prev)[chemical_system_id] =
164  (*reactant.molality)[chemical_system_id];
165 }

References MaterialPropertyLib::Phase::component(), MaterialPropertyLib::density, ProcessLib::TES::fluid_density(), MaterialPropertyLib::molality, MaterialPropertyLib::molar_volume, MaterialPropertyLib::porosity, and MaterialPropertyLib::volume_fraction.

Referenced by ChemistryLib::PhreeqcIOData::PhreeqcIO::setChemicalSystemConcrete().

◆ updateReactantVolumeFraction()

template<typename Reactant >
void ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::updateReactantVolumeFraction ( Reactant &  reactant,
GlobalIndexType const &  chemical_system_id,
MaterialPropertyLib::Medium const &  medium,
ParameterLib::SpatialPosition const &  pos,
double const  porosity,
double const  t,
double const  dt 
)

Definition at line 184 of file PhreeqcIO.cpp.

190 {
191  auto const& solid_phase = medium.phase("Solid");
192  auto const& liquid_phase = medium.phase("AqueousLiquid");
193 
195 
196  auto const liquid_density =
198  .template value<double>(vars, pos, t, dt);
199 
200  auto const& solid_constituent = solid_phase.component(reactant.name);
201 
202  if (solid_constituent.hasProperty(
204  {
205  return;
206  }
207 
208  auto const molar_volume =
210  .template value<double>(vars, pos, t, dt);
211 
212  (*reactant.volume_fraction)[chemical_system_id] +=
213  ((*reactant.molality)[chemical_system_id] -
214  (*reactant.molality_prev)[chemical_system_id]) *
215  liquid_density * porosity * molar_volume;
216 }
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
Definition: VariableType.h:108

References MaterialPropertyLib::density, MaterialPropertyLib::molality, MaterialPropertyLib::molar_volume, and MaterialPropertyLib::Medium::phase().

Referenced by ChemistryLib::PhreeqcIOData::PhreeqcIO::updateVolumeFractionPostReaction().