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

Classes

struct  overloaded

Functions

template<class... Ts>
 overloaded (Ts...) -> overloaded< Ts... >
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 Site>
void initializeSiteMolality (Site &site, 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>
double ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::averageReactantMolality ( Reactant const & reactant,
std::vector< GlobalIndexType > const & chemical_system_indices )
static

Definition at line 243 of file PhreeqcIO.cpp.

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

References averageReactantMolality().

Referenced by averageReactantMolality().

◆ 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 79 of file PhreeqcIO.cpp.

86{
87 auto const& solid_constituent = solid_phase.component(reactant.name);
88
89 if (solid_constituent.hasProperty(
91 {
92 auto const molality =
94 .template initialValue<double>(pos, t);
95
96 (*reactant.molality)[chemical_system_id] = molality;
97 (*reactant.molality_prev)[chemical_system_id] = molality;
98 }
99 else
100 {
101 auto const volume_fraction =
102 solid_constituent
104 .template initialValue<double>(pos, t);
105
106 (*reactant.volume_fraction)[chemical_system_id] = volume_fraction;
107
108 (*reactant.volume_fraction_prev)[chemical_system_id] = volume_fraction;
109
110 auto const fluid_density =
112 .template initialValue<double>(pos, t);
113
114 auto const porosity =
116 .template initialValue<double>(pos, t);
117
118 auto const molar_volume =
120 .template initialValue<double>(pos, t);
121
122 (*reactant.molality)[chemical_system_id] =
123 volume_fraction / fluid_density / porosity / molar_volume;
124
125 (*reactant.molality_prev)[chemical_system_id] =
126 (*reactant.molality)[chemical_system_id];
127 }
128}

References MaterialPropertyLib::Phase::component(), MaterialPropertyLib::density, initializeReactantMolality(), MaterialPropertyLib::molality, MaterialPropertyLib::molar_volume, MaterialPropertyLib::porosity, and MaterialPropertyLib::volume_fraction.

Referenced by initializeReactantMolality().

◆ initializeSiteMolality()

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

Definition at line 172 of file PhreeqcIO.cpp.

177{
178 auto const& solid_constituent = solid_phase.component(site.name);
179
180 auto const molality =
182 .template initialValue<double>(pos, t);
183
184 (*site.molality)[chemical_system_id] = molality;
185}

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

Referenced by initializeSiteMolality().

◆ 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 47 of file PhreeqcIO.cpp.

49{
50 std::copy(data_blocks.begin(), data_blocks.end(),
51 std::ostream_iterator<DataBlock>(os));
52 return os;
53}

◆ overloaded()

template<class... Ts>
ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::overloaded ( Ts... ) -> overloaded< Ts... >

◆ 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 55 of file PhreeqcIO.cpp.

58{
59 GlobalIndexType const offset = aqueous_solution.pH->getRangeBegin();
60 GlobalIndexType const global_index = offset + chemical_system_id;
61
62 // components
63 auto& components = aqueous_solution.components;
64 for (unsigned component_id = 0; component_id < components.size();
65 ++component_id)
66 {
68 *components[component_id].amount);
69 components[component_id].amount->set(global_index,
70 concentrations[component_id]);
71 }
72
73 // pH
75 aqueous_solution.pH->set(global_index, concentrations.back());
76}
void setLocalAccessibleVector(PETScVector const &x)
Definition LinAlg.cpp:20

References ChemistryLib::PhreeqcIOData::AqueousSolution::components, ChemistryLib::PhreeqcIOData::AqueousSolution::pH, setAqueousSolution(), and MathLib::LinAlg::setLocalAccessibleVector().

Referenced by setAqueousSolution().

◆ 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 223 of file PhreeqcIO.cpp.

227{
228 auto const& solid_phase = medium.phase("Solid");
229
230 auto const& solid_constituent = solid_phase.component(reactant.name);
231
232 if (solid_constituent.hasProperty(
234 {
235 return;
236 }
237
238 porosity -= ((*reactant.volume_fraction)[chemical_system_id] -
239 (*reactant.volume_fraction_prev)[chemical_system_id]);
240}

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

Referenced by setPorosityPostReaction().

◆ 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 131 of file PhreeqcIO.cpp.

138{
139 auto const& solid_constituent = solid_phase.component(reactant.name);
140
141 if (solid_constituent.hasProperty(
143 {
144 (*reactant.molality_prev)[chemical_system_id] =
145 (*reactant.molality)[chemical_system_id];
146
147 return;
148 }
149
150 auto const volume_fraction =
151 (*reactant.volume_fraction)[chemical_system_id];
152
153 (*reactant.volume_fraction_prev)[chemical_system_id] =
154 (*reactant.volume_fraction)[chemical_system_id];
155
156 auto const fluid_density =
158 .template value<double>(vars, pos, t, dt);
159
160 auto const molar_volume =
162 .template value<double>(vars, pos, t, dt);
163
164 (*reactant.molality)[chemical_system_id] =
165 volume_fraction / fluid_density / vars.porosity / molar_volume;
166
167 (*reactant.molality_prev)[chemical_system_id] =
168 (*reactant.molality)[chemical_system_id];
169}

References MaterialPropertyLib::Phase::component(), MaterialPropertyLib::density, MaterialPropertyLib::molality, MaterialPropertyLib::molar_volume, MaterialPropertyLib::VariableArray::porosity, and setReactantMolality().

Referenced by setReactantMolality().

◆ 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 188 of file PhreeqcIO.cpp.

194{
195 auto const& solid_phase = medium.phase("Solid");
196 auto const& liquid_phase = medium.phase("AqueousLiquid");
197
199
200 auto const liquid_density =
202 .template value<double>(vars, pos, t, dt);
203
204 auto const& solid_constituent = solid_phase.component(reactant.name);
205
206 if (solid_constituent.hasProperty(
208 {
209 return;
210 }
211
212 auto const molar_volume =
214 .template value<double>(vars, pos, t, dt);
215
216 (*reactant.volume_fraction)[chemical_system_id] +=
217 ((*reactant.molality)[chemical_system_id] -
218 (*reactant.molality_prev)[chemical_system_id]) *
219 liquid_density * porosity * molar_volume;
220}

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

Referenced by updateReactantVolumeFraction().