OGS
CreateReactionRate.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
4#include <optional>
5
9
10namespace ChemistryLib
11{
12template <typename ReactionRate>
13std::vector<ReactionRate> createReactionRates(
14 std::optional<BaseLib::ConfigTree> const& config)
15{
16 if (!config)
17 {
18 return {};
19 }
20
21 std::vector<ReactionRate> reaction_rates;
22 for (auto const& rate_config :
24 config->getConfigSubtreeList("rate"))
25 {
26 auto kinetic_reactant =
28 rate_config.getConfigParameter<std::string>("kinetic_reactant");
29
30 auto const expression_config =
32 rate_config.getConfigSubtree("expression");
33 auto const& statements =
35 expression_config.getConfigParameterList<std::string>("statement");
36
37 std::vector<std::string> expression_statements;
38 expression_statements.reserve(statements.size());
39 std::copy(begin(statements),
40 end(statements),
41 back_inserter(expression_statements));
42
43 reaction_rates.emplace_back(std::move(kinetic_reactant),
44 std::move(expression_statements));
45 }
46
47 return reaction_rates;
48}
49
50template std::vector<PhreeqcIOData::ReactionRate>
52 std::optional<BaseLib::ConfigTree> const& config);
53
54template std::vector<PhreeqcKernelData::ReactionRate>
56 std::optional<BaseLib::ConfigTree> const& config);
57} // namespace ChemistryLib
template std::vector< PhreeqcKernelData::ReactionRate > createReactionRates< PhreeqcKernelData::ReactionRate >(std::optional< BaseLib::ConfigTree > const &config)
std::vector< ReactionRate > createReactionRates(std::optional< BaseLib::ConfigTree > const &config)
template std::vector< PhreeqcIOData::ReactionRate > createReactionRates< PhreeqcIOData::ReactionRate >(std::optional< BaseLib::ConfigTree > const &config)