OGS
CreatePermeabilityOrthotropicPowerLaw.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
7
9{
10std::unique_ptr<Property> createPermeabilityOrthotropicPowerLaw(
11 BaseLib::ConfigTree const& config,
12 ParameterLib::CoordinateSystem const* const local_coordinate_system)
13{
15 config.checkConfigParameter("type", "PermeabilityOrthotropicPowerLaw");
16
17 // Second access for storage.
19 auto property_name = config.peekConfigParameter<std::string>("name");
20
21 DBUG("Create PermeabilityOrthotropicPowerLaw solid phase property {:s}.",
22 property_name);
23
24 auto const intrinsic_permeabilities =
26 config.getConfigParameter<std::vector<double>>(
27 "intrinsic_permeabilities");
28
29 if (!((intrinsic_permeabilities.size() == 3) ||
30 (intrinsic_permeabilities.size() == 2)))
31 {
33 "The number of intrinsic permeabilities must be two or three, but "
34 "{:d} were given.",
35 intrinsic_permeabilities.size());
36 }
37
38 auto const exponents =
40 config.getConfigParameter<std::vector<double>>("exponents");
41
42 if (exponents.size() != 3 && exponents.size() != 2)
43 {
45 "The number of exponents must be two or three, but {:d} were "
46 "given.",
47 exponents.size());
48 }
49
50 if (intrinsic_permeabilities.size() != exponents.size())
51 {
53 "The number of intrinsic permeabilities and exponents must be "
54 "equal, but they are {:d} and {:d}, respectively.",
55 intrinsic_permeabilities.size(), exponents.size());
56 }
57
58 if (exponents.size() == 2)
59 {
60 return std::make_unique<PermeabilityOrthotropicPowerLaw<2>>(
61 std::move(property_name),
62 std::array<double, 2>{intrinsic_permeabilities[0],
63 intrinsic_permeabilities[1]},
64 std::array<double, 2>{exponents[0], exponents[1]},
65 local_coordinate_system);
66 }
67 if (exponents.size() == 3)
68 {
69 return std::make_unique<PermeabilityOrthotropicPowerLaw<3>>(
70 std::move(property_name),
71 std::array<double, 3>{intrinsic_permeabilities[0],
72 intrinsic_permeabilities[1],
73 intrinsic_permeabilities[2]},
74 std::array<double, 3>{exponents[0], exponents[1], exponents[2]},
75 local_coordinate_system);
76 }
78 "Could not create PermeabilityOrthotropicPowerLaw material model.");
79}
80} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:19
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
T peekConfigParameter(std::string const &param) const
T getConfigParameter(std::string const &param) const
void checkConfigParameter(std::string const &param, std::string_view const value) const
std::unique_ptr< Property > createPermeabilityOrthotropicPowerLaw(BaseLib::ConfigTree const &config, ParameterLib::CoordinateSystem const *const local_coordinate_system)
A local coordinate system used for tensor transformations.