OGS
CreateLubby2.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 "Lubby2.h"
9
10namespace MaterialLib
11{
12namespace Solids
13{
14namespace Lubby2
15{
16template <int DisplacementDim>
17std::unique_ptr<Lubby2<DisplacementDim>> createLubby2(
18 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
19 BaseLib::ConfigTree const& config)
20{
22 config.checkConfigParameter("type", "Lubby2");
23 DBUG("Create Lubby2 material");
24
25 // Kelvin shear modulus.
26 auto& kelvin_shear_modulus = ParameterLib::findParameter<double>(
28 config, "kelvin_shear_modulus", parameters, 1);
29
30 DBUG("Use '{:s}' as kelvin shear modulus parameter.",
31 kelvin_shear_modulus.name);
32
33 // Kelvin viscosity.
34 auto& kelvin_viscosity = ParameterLib::findParameter<double>(
36 config, "kelvin_viscosity", parameters, 1);
37
38 DBUG("Use '{:s}' as kelvin viscosity parameter.", kelvin_viscosity.name);
39
40 // Maxwell shear modulus.
41 auto& maxwell_shear_modulus = ParameterLib::findParameter<double>(
43 config, "maxwell_shear_modulus", parameters, 1);
44
45 DBUG("Use '{:s}' as maxwell shear modulus parameter.",
46 maxwell_shear_modulus.name);
47
48 // Maxwell bulk modulus.
49 auto& maxwell_bulk_modulus = ParameterLib::findParameter<double>(
51 config, "maxwell_bulk_modulus", parameters, 1);
52
53 DBUG("Use '{:s}' as maxwell bulk modulus parameter.",
54 maxwell_bulk_modulus.name);
55
56 // Maxwell viscosity.
57 auto& maxwell_viscosity = ParameterLib::findParameter<double>(
59 config, "maxwell_viscosity", parameters, 1);
60
61 DBUG("Use '{:s}' as maxwell viscosity parameter.", maxwell_viscosity.name);
62
63 // Dependency parameter for mK.
64 auto& dependency_parameter_mK = ParameterLib::findParameter<double>(
66 config, "dependency_parameter_mk", parameters, 1);
67
68 DBUG("Use '{:s}' as dependency parameter mK.",
69 dependency_parameter_mK.name);
70
71 // Dependency parameter for mvK.
72 auto& dependency_parameter_mvK = ParameterLib::findParameter<double>(
74 config, "dependency_parameter_mvk", parameters, 1);
75
76 DBUG("Use '{:s}' as dependency parameter mvK.",
77 dependency_parameter_mvK.name);
78
79 // Dependency parameter for mvM.
80 auto& dependency_parameter_mvM = ParameterLib::findParameter<double>(
82 config, "dependency_parameter_mvm", parameters, 1);
83
84 DBUG("Use '{:s}' as dependency parameter mvM.",
85 dependency_parameter_mvM.name);
86
88 kelvin_shear_modulus, maxwell_shear_modulus,
89 maxwell_bulk_modulus, kelvin_viscosity,
90 maxwell_viscosity, dependency_parameter_mK,
91 dependency_parameter_mvK, dependency_parameter_mvM};
92
93 auto const& nonlinear_solver_config =
95 config.getConfigSubtree("nonlinear_solver");
96 auto const nonlinear_solver_parameters =
97 NumLib::createNewtonRaphsonSolverParameters(nonlinear_solver_config);
98
99 return std::unique_ptr<Lubby2<DisplacementDim>>{
100 new Lubby2<DisplacementDim>{nonlinear_solver_parameters, mp}};
101}
102
103} // namespace Lubby2
104} // namespace Solids
105} // namespace MaterialLib
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
ConfigTree getConfigSubtree(std::string const &root) const
void checkConfigParameter(std::string const &param, std::string_view const value) const
std::unique_ptr< Lubby2< DisplacementDim > > createLubby2(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config)
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)