OGS
FormEigenVector.cpp
Go to the documentation of this file.
1/*
2 * \file
3 * \copyright
4 * Copyright (c) 2012-2025, OpenGeoSys Community (http://www.opengeosys.org)
5 * Distributed under a Modified BSD License.
6 * See accompanying file LICENSE.txt or
7 * http://www.opengeosys.org/project/license
8 *
9 * Created on July 31, 2019, 11:28 AM
10 */
11
12#include "FormEigenVector.h"
13
16
17namespace MaterialPropertyLib
18{
19template <int GlobalDim>
21{
22 Eigen::Matrix<double, GlobalDim, 1> operator()(double const value) const
23 {
24 if constexpr (GlobalDim == 1)
25 {
26 return Eigen::Matrix<double, 1, 1>{value};
27 }
28 if constexpr (GlobalDim == 2)
29 {
30 return Eigen::Matrix<double, 2, 1>{value, value};
31 }
32 if constexpr (GlobalDim == 3)
33 {
34 return Eigen::Matrix<double, 3, 1>{value, value, value};
35 }
36 OGS_FATAL("Cannot convert a scalar {} to a {:d}d vector.", value,
37 GlobalDim);
38 }
39
40 Eigen::Matrix<double, GlobalDim, 1> operator()(
41 Eigen::Vector2d const& values) const
42 {
43 if constexpr (GlobalDim == 2)
44 {
45 return values;
46 }
48 "Cannot convert a 2d vector with values [{}] to a {:d}d vector.",
49 values, GlobalDim);
50 }
51
52 Eigen::Matrix<double, GlobalDim, 1> operator()(
53 Eigen::Vector3d const& values) const
54 {
55 if constexpr (GlobalDim == 3)
56 {
57 return values;
58 }
60 "Cannot convert a 3d vector with values [{}] to a {:d}d vector.",
61 values, GlobalDim);
62 }
63
64 Eigen::Matrix<double, GlobalDim, 1> operator()(
65 Eigen::Matrix<double, 2, 2> const& values) const
66 {
68 "Cannot convert a 2d tensor with values [{}] to a {:d}d Vector.",
69 values, GlobalDim);
70 }
71 Eigen::Matrix<double, GlobalDim, 1> operator()(
72 Eigen::Matrix<double, 3, 3> const& values) const
73 {
75 "Cannot convert a 3d tensor with values [{}] to a {:d}d Vector.",
76 values, GlobalDim);
77 }
78
79 Eigen::Matrix<double, GlobalDim, 1> operator()(
80 Eigen::Matrix<double, 4, 1> const& values) const
81 {
83 "Cannot convert a 4d vector with values [{}] to a {:d}d vector.",
84 values, GlobalDim);
85 }
86
87 Eigen::Matrix<double, GlobalDim, 1> operator()(
88 Eigen::Matrix<double, 6, 1> const& values) const
89 {
91 "Cannot convert a 6d vector with values [{}] to a {:d}d vector.",
92 values, GlobalDim);
93 }
94
95 Eigen::Matrix<double, GlobalDim, 1> operator()(
96 Eigen::MatrixXd const& values) const
97 {
99 "Cannot convert a dynamic {}x{} Eigen matrix with values [{}] to a "
100 "{:d}d vector ",
101 values.rows(), values.cols(), values, GlobalDim);
102 }
103};
104
105template <int GlobalDim>
106Eigen::Matrix<double, GlobalDim, 1> formEigenVector(
108{
109 return std::visit(FormEigenVector<GlobalDim>(), values);
110}
111
112template Eigen::Matrix<double, 1, 1> formEigenVector<1>(
114
115template Eigen::Matrix<double, 2, 1> formEigenVector<2>(
117
118template Eigen::Matrix<double, 3, 1> formEigenVector<3>(
120
121} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:26
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
Definition Property.h:31
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