OGS
GetSymmetricTensor.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
5
8
10{
11template <int GlobalDim>
13{
14 SymmetricTensor<GlobalDim> operator()(double const& value) const
15 {
17 result.template head<3>() = Eigen::Vector3d::Constant(value);
18 return result;
19 }
20
21 SymmetricTensor<GlobalDim> operator()(Eigen::Vector2d const& values) const
22 {
24 result.template head<2>() = values;
25 return result;
26 }
27
28 SymmetricTensor<GlobalDim> operator()(Eigen::Vector3d const& values) const
29 {
31 result.template head<3>() = values;
32 return result;
33 }
34
35 SymmetricTensor<GlobalDim> operator()(Eigen::Matrix2d const& values) const
36 {
37 if constexpr (GlobalDim == 2)
38 {
40 result << values(0, 0), values(1, 1), 0., values(0, 1);
41 return result;
42 }
44 "Cannot convert 2d matrix with values [{}] to 3d symmetric Tensor.",
45 values);
46 }
47
48 SymmetricTensor<GlobalDim> operator()(Eigen::Matrix3d const& values) const
49 {
50 if constexpr (GlobalDim == 3)
51 {
53 result << values(0, 0), values(1, 1), values(2, 2), values(0, 1),
54 values(1, 2), values(0, 2);
55 return result;
56 }
58 "Cannot convert 3d matrix with values [{}] to 2d symmetric "
59 "Tensor.",
60 values);
61 }
62
64 SymmetricTensor<2> const& values) const
65 {
66 if constexpr (GlobalDim == 2)
67 {
68 return values;
69 }
71 "Cannot convert 3d symmetric tensor with values [{}] to 2d "
72 "symmetric tensor.",
73 values);
74 }
75
77 SymmetricTensor<3> const& values) const
78 {
79 if constexpr (GlobalDim == 3)
80 {
81 return values;
82 }
84 "Cannot convert 2d symmetric tensor with values [{}] to 3d "
85 "symmetric tensor.",
86 values);
87 }
88
89 SymmetricTensor<GlobalDim> operator()(Eigen::MatrixXd const& values) const
90 {
92 "Cannot convert dynamic Eigen {}x{} matrix with values [{}] to "
93 "{:d}d symmetric tensor.",
94 values.rows(), values.cols(), values, GlobalDim);
95 }
96};
97
98template <int GlobalDim>
104
105template Eigen::Matrix<double, 4, 1> getSymmetricTensor<2>(
107
108template Eigen::Matrix<double, 6, 1> getSymmetricTensor<3>(
110
111} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:19
template Eigen::Matrix< double, 4, 1 > getSymmetricTensor< 2 >(MaterialPropertyLib::PropertyDataType const &values)
template Eigen::Matrix< double, 6, 1 > getSymmetricTensor< 3 >(MaterialPropertyLib::PropertyDataType const &values)
Eigen::Matrix< double, symmetric_tensor_size< GlobalDim >, 1 > SymmetricTensor
SymmetricTensor< GlobalDim > getSymmetricTensor(MaterialPropertyLib::PropertyDataType const &values)
std::variant< double, Eigen::Matrix< double, 2, 1 >, Eigen::Matrix< double, 3, 1 >, Eigen::Matrix< double, 2, 2 >, Eigen::Matrix< double, 3, 3 >, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 >, Eigen::MatrixXd > PropertyDataType
SymmetricTensor< GlobalDim > operator()(double const &value) const
SymmetricTensor< GlobalDim > operator()(Eigen::MatrixXd const &values) const
SymmetricTensor< GlobalDim > operator()(Eigen::Vector3d const &values) const
SymmetricTensor< GlobalDim > operator()(Eigen::Matrix2d const &values) const
SymmetricTensor< GlobalDim > operator()(Eigen::Vector2d const &values) const
SymmetricTensor< GlobalDim > operator()(Eigen::Matrix3d const &values) const
SymmetricTensor< GlobalDim > operator()(SymmetricTensor< 2 > const &values) const
SymmetricTensor< GlobalDim > operator()(SymmetricTensor< 3 > const &values) const