OGS
ChemistryLib::PhreeqcKernelData Namespace Reference

Classes

class  AqueousSolution
class  Component
class  EquilibriumReactants
class  InitialAqueousSolution
class  KineticReactant
class  Kinetics
class  PhaseComponent
class  PhreeqcKernel
class  ReactionRate

Functions

static bool isHydrogen (std::string_view const element)
AqueousSolution createAqueousSolution (BaseLib::ConfigTree const &config, std::vector< std::pair< int, std::string > > const &process_id_to_component_name_map)
std::unique_ptr< EquilibriumReactantscreateEquilibriumReactants (std::optional< BaseLib::ConfigTree > const &config, MeshLib::Mesh const &mesh)
InitialAqueousSolution createInitialAqueousSolution (BaseLib::ConfigTree const &config, std::vector< std::pair< int, std::string > > const &process_id_to_component_name_map)
std::unique_ptr< KineticscreateKineticReactants (std::optional< BaseLib::ConfigTree > const &config, MeshLib::Mesh const &mesh)

Function Documentation

◆ createAqueousSolution()

AqueousSolution ChemistryLib::PhreeqcKernelData::createAqueousSolution ( BaseLib::ConfigTree const & config,
std::vector< std::pair< int, std::string > > const & process_id_to_component_name_map )
Input File Parameter
prj__chemical_system__solution__temperature
Input File Parameter
prj__chemical_system__solution__pressure
Input File Parameter
prj__chemical_system__solution__pe

Definition at line 13 of file PhreeqcKernelData/CreateAqueousSolution.cpp.

17{
19 auto const temperature = config.getConfigParameter<double>("temperature");
20
22 auto const pressure = config.getConfigParameter<double>("pressure");
23
25 auto const pe = config.getConfigParameter<double>("pe");
26
27 auto const initial_aqueous_solution =
28 createInitialAqueousSolution(config, process_id_to_component_name_map);
29
30 return {temperature, pressure, pe, initial_aqueous_solution};
31}
InitialAqueousSolution createInitialAqueousSolution(BaseLib::ConfigTree const &config, std::vector< std::pair< int, std::string > > const &process_id_to_component_name_map)

References createInitialAqueousSolution(), BaseLib::ConfigTree::getConfigParameter(), and ChemistryLib::pe.

◆ createEquilibriumReactants()

std::unique_ptr< EquilibriumReactants > ChemistryLib::PhreeqcKernelData::createEquilibriumReactants ( std::optional< BaseLib::ConfigTree > const & config,
MeshLib::Mesh const & mesh )
Input File Parameter
prj__chemical_system__equilibrium_reactants__phase_component
Input File Parameter
prj__chemical_system__equilibrium_reactants__phase_component__name
Input File Parameter
prj__chemical_system__equilibrium_reactants__phase_component__initial_amount
Input File Parameter
prj__chemical_system__equilibrium_reactants__phase_component__saturation_index

Definition at line 18 of file PhreeqcKernelData/CreateEquilibriumReactants.cpp.

20{
21 if (!config)
22 {
23 return nullptr;
24 }
25
26 std::vector<PhaseComponent> phase_components;
27 for (
28 auto const& phase_component_config :
30 config->getConfigSubtreeList("phase_component"))
31 {
32 auto name =
34 phase_component_config.getConfigParameter<std::string>("name");
35
36 double const initial_amount =
38 phase_component_config.getConfigParameter<double>("initial_amount");
39
40 double const saturation_index =
42 phase_component_config.getConfigParameter<double>(
43 "saturation_index");
44
46 const_cast<MeshLib::Mesh&>(mesh),
47 name,
49 1);
50 std::fill(amount->begin(), amount->end(), initial_amount);
51
52 phase_components.emplace_back(
53 std::move(name), initial_amount, saturation_index);
54 }
55
56 return std::make_unique<EquilibriumReactants>(phase_components);
57}
PropertyVector< T > * getOrCreateMeshProperty(Mesh &mesh, std::string const &property_name, MeshItemType const item_type, int const number_of_components)

References MeshLib::getOrCreateMeshProperty(), and MeshLib::Node.

◆ createInitialAqueousSolution()

InitialAqueousSolution ChemistryLib::PhreeqcKernelData::createInitialAqueousSolution ( BaseLib::ConfigTree const & config,
std::vector< std::pair< int, std::string > > const & process_id_to_component_name_map )
Input File Parameter
prj__chemical_system__solution__components
Input File Parameter
prj__chemical_system__solution__components__component

Definition at line 16 of file CreateInitialAqueousSolution.cpp.

20{
21 std::map<std::string, cxxISolutionComp> components;
23 auto comp_config = config.getConfigSubtree("components");
24 for (
25 auto const& component_config :
27 comp_config.getConfigSubtreeList("component"))
28 {
29 auto const component_name = component_config.getValue<std::string>();
30 Component component(component_name);
31 components.emplace(component_name, component);
32 }
33
34 for (auto const& component : components)
35 {
36 auto process_id_to_component_name_pair =
37 std::find_if(process_id_to_component_name_map.begin(),
38 process_id_to_component_name_map.end(),
39 [&component](auto const& pair)
40 { return pair.second == component.first; });
41
42 if (process_id_to_component_name_pair ==
43 process_id_to_component_name_map.end())
44 {
46 "Component {:s} given in <solution>/<components> is not found "
47 "in specified coupled processes (see "
48 "<process>/<process_variables>/<concentration>).",
49 component.first);
50 }
51 }
52
53 if (components.size() + 1 != process_id_to_component_name_map.size())
54 {
56 "The number of components given in <solution>/<components> is not "
57 "in line with the number of transport processes - 1 which stands "
58 "for the transport process of hydrogen.");
59 }
60
61 auto const charge_balance = createChargeBalance(config);
62 if (charge_balance == ChargeBalance::pH)
63 {
64 Component component("H(1)");
65 component.Set_equation_name("charge");
66 components.emplace("H(1)", component);
67 }
68 if (charge_balance == ChargeBalance::pe)
69 {
71 "Adjusting pe value for charge balance is unsupported yet with the "
72 "chemical solver 'PhreeqcKernel'. Please use the chemical solver "
73 "'Phreeqc' for this functionality.");
74 }
75
76 return InitialAqueousSolution(components);
77}
#define OGS_FATAL(...)
Definition Error.h:19
ChargeBalance createChargeBalance(BaseLib::ConfigTree const &config)

References ChemistryLib::createChargeBalance(), BaseLib::ConfigTree::getConfigSubtree(), OGS_FATAL, ChemistryLib::pe, and ChemistryLib::pH.

Referenced by createAqueousSolution().

◆ createKineticReactants()

std::unique_ptr< Kinetics > ChemistryLib::PhreeqcKernelData::createKineticReactants ( std::optional< BaseLib::ConfigTree > const & config,
MeshLib::Mesh const & mesh )
Input File Parameter
prj__chemical_system__kinetic_reactants__kinetic_reactant
Input File Parameter
prj__chemical_system__kinetic_reactants__kinetic_reactant__name
Input File Parameter
prj__chemical_system__kinetic_reactants__kinetic_reactant__initial_amount

Definition at line 18 of file PhreeqcKernelData/CreateKineticReactant.cpp.

20{
21 if (!config)
22 {
23 return nullptr;
24 }
25
26 std::vector<KineticReactant> kinetic_reactants;
27 for (
28 auto const& reactant_config :
30 config->getConfigSubtreeList("kinetic_reactant"))
31 {
33 auto name = reactant_config.getConfigParameter<std::string>("name");
34
35 double const initial_amount =
37 reactant_config.getConfigParameter<double>("initial_amount");
38
40 const_cast<MeshLib::Mesh&>(mesh),
41 name,
43 1);
44 std::fill(std::begin(*amount), std::end(*amount), initial_amount);
45
46 kinetic_reactants.emplace_back(std::move(name), initial_amount);
47 }
48
49 return std::make_unique<Kinetics>(kinetic_reactants);
50}

References MeshLib::getOrCreateMeshProperty(), and MeshLib::Node.

◆ isHydrogen()

bool ChemistryLib::PhreeqcKernelData::isHydrogen ( std::string_view const element)
static