OGS
CreateEhlers.h
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#pragma once
5
6#include "Ehlers.h"
9
10namespace MaterialLib
11{
12namespace Solids
13{
14namespace Ehlers
15{
16inline std::unique_ptr<DamagePropertiesParameters> createDamageProperties(
17 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
18 BaseLib::ConfigTree const& config)
19{
21 auto& alpha_d =
22 ParameterLib::findParameter<double>(config, "alpha_d", parameters, 1);
23
24 DBUG("Use '{:s}' as alpha_d.", alpha_d.name);
25
27 auto& beta_d =
28 ParameterLib::findParameter<double>(config, "beta_d", parameters, 1);
29
30 DBUG("Use '{:s}' as beta_d.", beta_d.name);
31
33 auto& h_d =
34 ParameterLib::findParameter<double>(config, "h_d", parameters, 1);
35
36 DBUG("Use '{:s}' as h_d.", h_d.name);
37
38 return std::make_unique<DamagePropertiesParameters>(
39 DamagePropertiesParameters{alpha_d, beta_d, h_d});
40}
41
42template <int DisplacementDim>
43std::unique_ptr<SolidEhlers<DisplacementDim>> createEhlers(
44 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
45 BaseLib::ConfigTree const& config)
46{
48 config.checkConfigParameter("type", "Ehlers");
49 DBUG("Create Ehlers material");
50
52 auto& shear_modulus = ParameterLib::findParameter<double>(
53 config, "shear_modulus", parameters, 1);
54
55 DBUG("Use '{:s}' as shear modulus parameter.", shear_modulus.name);
56
58 auto& bulk_modulus = ParameterLib::findParameter<double>(
59 config, "bulk_modulus", parameters, 1);
60
61 DBUG("Use '{:s}' as bulk modulus parameter.", bulk_modulus.name);
62
64 auto& kappa =
65 ParameterLib::findParameter<double>(config, "kappa", parameters, 1);
66
67 DBUG("Use '{:s}' as kappa.", kappa.name);
68
70 auto& beta =
71 ParameterLib::findParameter<double>(config, "beta", parameters, 1);
72
73 DBUG("Use '{:s}' as beta.", beta.name);
74
76 auto& gamma =
77 ParameterLib::findParameter<double>(config, "gamma", parameters, 1);
78
79 DBUG("Use '{:s}' as gamma.", gamma.name);
80
82 auto& hardening_modulus = ParameterLib::findParameter<double>(
83 config, "hardening_modulus", parameters, 1);
84
85 DBUG("Use '{:s}' as hardening modulus parameter.", hardening_modulus.name);
86
88 auto& alpha =
89 ParameterLib::findParameter<double>(config, "alpha", parameters, 1);
90
91 DBUG("Use '{:s}' as alpha.", alpha.name);
92
94 auto& delta =
95 ParameterLib::findParameter<double>(config, "delta", parameters, 1);
96
97 DBUG("Use '{:s}' as delta.", delta.name);
98
100 auto& eps =
101 ParameterLib::findParameter<double>(config, "eps", parameters, 1);
102
103 DBUG("Use '{:s}' as eps.", eps.name);
104
106 auto& m = ParameterLib::findParameter<double>(config, "m", parameters, 1);
107
108 DBUG("Use '{:s}' as m.", m.name);
109
111 auto& alphap =
112 ParameterLib::findParameter<double>(config, "alphap", parameters, 1);
113
114 DBUG("Use '{:s}' as alphap.", alphap.name);
115
117 auto& deltap =
118 ParameterLib::findParameter<double>(config, "deltap", parameters, 1);
119
120 DBUG("Use '{:s}' as deltap.", deltap.name);
121
123 auto& epsp =
124 ParameterLib::findParameter<double>(config, "epsp", parameters, 1);
125
126 DBUG("Use '{:s}' as epsp.", epsp.name);
127
129 auto& paremeter_mp =
130 ParameterLib::findParameter<double>(config, "mp", parameters, 1);
131
132 DBUG("Use '{:s}' as mp.", paremeter_mp.name);
133
135 auto& betap =
136 ParameterLib::findParameter<double>(config, "betap", parameters, 1);
137
138 DBUG("Use '{:s}' as betap.", betap.name);
139
141 auto& gammap =
142 ParameterLib::findParameter<double>(config, "gammap", parameters, 1);
143
144 DBUG("Use '{:s}' as gammap.", gammap.name);
145
146 auto tangent_type =
148 makeTangentType(config.getConfigParameter<std::string>("tangent_type"));
149
151 shear_modulus, bulk_modulus, alpha, beta,
152 gamma, delta, eps, m,
153 alphap, betap, gammap, deltap,
154 epsp, paremeter_mp, kappa, hardening_modulus};
155
156 // Damage properties.
157 std::unique_ptr<DamagePropertiesParameters> ehlers_damage_properties;
158
159 auto const& ehlers_damage_config =
161 config.getConfigSubtreeOptional("damage_properties");
162 if (ehlers_damage_config)
163 {
164 ehlers_damage_properties =
165 createDamageProperties(parameters, *ehlers_damage_config);
166 }
167
168 auto const& nonlinear_solver_config =
170 config.getConfigSubtree("nonlinear_solver");
171 auto const nonlinear_solver_parameters =
172 NumLib::createNewtonRaphsonSolverParameters(nonlinear_solver_config);
173
174 return std::make_unique<SolidEhlers<DisplacementDim>>(
175 nonlinear_solver_parameters,
176 mp,
177 std::move(ehlers_damage_properties),
178 tangent_type);
179}
180
181} // namespace Ehlers
182} // namespace Solids
183} // namespace MaterialLib
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
T getConfigParameter(std::string const &param) const
ConfigTree getConfigSubtree(std::string const &root) const
void checkConfigParameter(std::string const &param, std::string_view const value) const
std::unique_ptr< DamagePropertiesParameters > createDamageProperties(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config)
std::unique_ptr< SolidEhlers< DisplacementDim > > createEhlers(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config)
TangentType makeTangentType(std::string const &s)
Definition Ehlers.h:39
NewtonRaphsonSolverParameters createNewtonRaphsonSolverParameters(BaseLib::ConfigTree const &config)
OGS_NO_DANGLING Parameter< ParameterDataType > & findParameter(std::string const &parameter_name, std::vector< std::unique_ptr< ParameterBase > > const &parameters, int const num_components, MeshLib::Mesh const *const mesh=nullptr)