OGS
FormEigenVector.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
4#include "FormEigenVector.h"
5
8
10{
11template <int GlobalDim>
13{
14 Eigen::Matrix<double, GlobalDim, 1> operator()(double const value) const
15 {
16 if constexpr (GlobalDim == 1)
17 {
18 return Eigen::Matrix<double, 1, 1>{value};
19 }
20 if constexpr (GlobalDim == 2)
21 {
22 return Eigen::Matrix<double, 2, 1>{value, value};
23 }
24 if constexpr (GlobalDim == 3)
25 {
26 return Eigen::Matrix<double, 3, 1>{value, value, value};
27 }
28 OGS_FATAL("Cannot convert a scalar {} to a {:d}d vector.", value,
29 GlobalDim);
30 }
31
32 Eigen::Matrix<double, GlobalDim, 1> operator()(
33 Eigen::Vector2d const& values) const
34 {
35 if constexpr (GlobalDim == 2)
36 {
37 return values;
38 }
40 "Cannot convert a 2d vector with values [{}] to a {:d}d vector.",
41 values, GlobalDim);
42 }
43
44 Eigen::Matrix<double, GlobalDim, 1> operator()(
45 Eigen::Vector3d const& values) const
46 {
47 if constexpr (GlobalDim == 3)
48 {
49 return values;
50 }
52 "Cannot convert a 3d vector with values [{}] to a {:d}d vector.",
53 values, GlobalDim);
54 }
55
56 Eigen::Matrix<double, GlobalDim, 1> operator()(
57 Eigen::Matrix<double, 2, 2> const& values) const
58 {
60 "Cannot convert a 2d tensor with values [{}] to a {:d}d Vector.",
61 values, GlobalDim);
62 }
63 Eigen::Matrix<double, GlobalDim, 1> operator()(
64 Eigen::Matrix<double, 3, 3> const& values) const
65 {
67 "Cannot convert a 3d tensor with values [{}] to a {:d}d Vector.",
68 values, GlobalDim);
69 }
70
71 Eigen::Matrix<double, GlobalDim, 1> operator()(
72 Eigen::Matrix<double, 4, 1> const& values) const
73 {
75 "Cannot convert a 4d vector with values [{}] to a {:d}d vector.",
76 values, GlobalDim);
77 }
78
79 Eigen::Matrix<double, GlobalDim, 1> operator()(
80 Eigen::Matrix<double, 6, 1> const& values) const
81 {
83 "Cannot convert a 6d vector with values [{}] to a {:d}d vector.",
84 values, GlobalDim);
85 }
86
87 Eigen::Matrix<double, GlobalDim, 1> operator()(
88 Eigen::MatrixXd const& values) const
89 {
91 "Cannot convert a dynamic {}x{} Eigen matrix with values [{}] to a "
92 "{:d}d vector ",
93 values.rows(), values.cols(), values, GlobalDim);
94 }
95};
96
97template <int GlobalDim>
98Eigen::Matrix<double, GlobalDim, 1> formEigenVector(
100{
101 return std::visit(FormEigenVector<GlobalDim>(), values);
102}
103
104template Eigen::Matrix<double, 1, 1> formEigenVector<1>(
106
107template Eigen::Matrix<double, 2, 1> formEigenVector<2>(
109
110template Eigen::Matrix<double, 3, 1> formEigenVector<3>(
112
113} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:19
template Eigen::Matrix< double, 1, 1 > formEigenVector< 1 >(MaterialPropertyLib::PropertyDataType const &values)
Eigen::Matrix< double, GlobalDim, 1 > formEigenVector(MaterialPropertyLib::PropertyDataType const &values)
template Eigen::Matrix< double, 2, 1 > formEigenVector< 2 >(MaterialPropertyLib::PropertyDataType const &values)
template Eigen::Matrix< double, 3, 1 > formEigenVector< 3 >(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
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::MatrixXd const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Vector2d const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 4, 1 > const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(double const value) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 3, 3 > const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Vector3d const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 2, 2 > const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 6, 1 > const &values) const