OGS
PhreeqcKernelData/CreateKineticReactant.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
5
6#include <optional>
7#include <vector>
8
10#include "KineticReactant.h"
11#include "MeshLib/Mesh.h"
13
14namespace ChemistryLib
15{
16namespace PhreeqcKernelData
17{
18std::unique_ptr<Kinetics> createKineticReactants(
19 std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh const& mesh)
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}
51} // namespace PhreeqcKernelData
52} // namespace ChemistryLib
std::unique_ptr< Kinetics > createKineticReactants(std::optional< BaseLib::ConfigTree > const &config, MeshLib::Mesh const &mesh)
PropertyVector< T > * getOrCreateMeshProperty(Mesh &mesh, std::string const &property_name, MeshItemType const item_type, int const number_of_components)