OGS
CreateKineticReactant.cpp
Go to the documentation of this file.
1 
11 #include "CreateKineticReactant.h"
12 
13 #include <optional>
14 
15 #include "BaseLib/ConfigTree.h"
16 #include "KineticReactant.h"
17 #include "MeshLib/Mesh.h"
18 
19 namespace ChemistryLib
20 {
21 namespace PhreeqcIOData
22 {
23 std::vector<KineticReactant> createKineticReactants(
24  std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
25 {
26  if (!config)
27  {
28  return {};
29  }
30 
31  std::vector<KineticReactant> kinetic_reactants;
32  for (
33  auto const& reactant_config :
35  config->getConfigSubtreeList("kinetic_reactant"))
36  {
38  auto name = reactant_config.getConfigParameter<std::string>("name");
39 
40  auto chemical_formula =
42  reactant_config.getConfigParameter<std::string>("chemical_formula",
43  "");
44 
45  auto parameters =
47  reactant_config.getConfigParameter<std::vector<double>>(
48  "parameters", {});
49 
50  bool const fix_amount =
52  reactant_config.getConfigParameter<bool>("fix_amount", false);
53 
54  auto molality = MeshLib::getOrCreateMeshProperty<double>(
56 
57  auto molality_prev = MeshLib::getOrCreateMeshProperty<double>(
58  mesh, name + "_prev", MeshLib::MeshItemType::IntegrationPoint, 1);
59 
60  auto volume_fraction = MeshLib::getOrCreateMeshProperty<double>(
62 
63  auto volume_fraction_prev = MeshLib::getOrCreateMeshProperty<double>(
64  mesh,
65  "phi_" + name + "_prev",
67  1);
68 
69  auto mesh_prop_molality = MeshLib::getOrCreateMeshProperty<double>(
70  mesh, name + "_avg", MeshLib::MeshItemType::Cell, 1);
71  mesh_prop_molality->resize(mesh.getNumberOfElements());
72 
73  if (chemical_formula.empty() && fix_amount)
74  {
75  OGS_FATAL(
76  "fix_amount can only be used if a chemical_formula has been "
77  "defined");
78  }
79 
80  kinetic_reactants.emplace_back(std::move(name),
81  std::move(chemical_formula),
82  molality,
83  molality_prev,
85  volume_fraction_prev,
86  mesh_prop_molality,
87  std::move(parameters),
88  fix_amount);
89  }
90 
91  return kinetic_reactants;
92 }
93 } // namespace PhreeqcIOData
94 } // namespace ChemistryLib
#define OGS_FATAL(...)
Definition: Error.h:26
Definition of the Mesh class.
std::size_t getNumberOfElements() const
Get the number of elements.
Definition: Mesh.h:86
std::vector< KineticReactant > createKineticReactants(std::optional< BaseLib::ConfigTree > const &config, MeshLib::Mesh &mesh)