OGS
CreateLinearElasticOrthotropic.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
6
7namespace MaterialLib
8{
9namespace Solids
10{
11template <int DisplacementDim>
12std::unique_ptr<LinearElasticOrthotropic<DisplacementDim>>
14 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
15 std::optional<ParameterLib::CoordinateSystem> const&
16 local_coordinate_system,
17 BaseLib::ConfigTree const& config, const bool skip_type_checking)
18{
19 if (!skip_type_checking)
20 {
22 config.checkConfigParameter("type", "LinearElasticOrthotropic");
23 DBUG("Create LinearElasticOrthotropic material");
24 }
25
26 // The three Youngs moduli are required even in two-dimensional case. Same
27 // for the shear moduli and the Poissons ratios.
28 auto& youngs_moduli = ParameterLib::findParameter<double>(
30 config, "youngs_moduli", parameters, 3);
31 DBUG("Use '{:s}' as youngs_moduli parameter.", youngs_moduli.name);
32
33 // Shear moduli
34 auto& shear_moduli = ParameterLib::findParameter<double>(
36 config, "shear_moduli", parameters, 3);
37 DBUG("Use '{:s}' as shear_moduli parameter.", shear_moduli.name);
38
39 // Poissons ratios
40 auto& poissons_ratios = ParameterLib::findParameter<double>(
42 config, "poissons_ratios", parameters, 3);
43 DBUG("Use '{:s}' as poissons_ratios parameter.", poissons_ratios.name);
44
46 youngs_moduli, shear_moduli, poissons_ratios};
47
48 return std::make_unique<LinearElasticOrthotropic<DisplacementDim>>(
49 mp, local_coordinate_system);
50}
51
52template std::unique_ptr<LinearElasticOrthotropic<2>>
54 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
55 std::optional<ParameterLib::CoordinateSystem> const&
56 local_coordinate_system,
57 BaseLib::ConfigTree const& config, const bool skip_type_checking);
58
59template std::unique_ptr<LinearElasticOrthotropic<3>>
61 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
62 std::optional<ParameterLib::CoordinateSystem> const&
63 local_coordinate_system,
64 BaseLib::ConfigTree const& config, const bool skip_type_checking);
65} // namespace Solids
66} // namespace MaterialLib
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
void checkConfigParameter(std::string const &param, std::string_view const value) const
std::unique_ptr< LinearElasticOrthotropic< DisplacementDim > > createLinearElasticOrthotropic(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config, const bool skip_type_checking)
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)