OGS
FormEigenVector.cpp
Go to the documentation of this file.
1 /*
2  * \file
3  * \copyright
4  * Copyright (c) 2012-2021, 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 
15 
16 namespace MaterialPropertyLib
17 {
18 template <int GlobalDim>
20 {
21  Eigen::Matrix<double, GlobalDim, 1> operator()(double const value) const
22  {
23  if constexpr (GlobalDim == 1)
24  {
25  return Eigen::Matrix<double, 1, 1>{value};
26  }
27  if constexpr (GlobalDim == 2)
28  {
29  return Eigen::Matrix<double, 2, 1>{value, value};
30  }
31  if constexpr (GlobalDim == 3)
32  {
33  return Eigen::Matrix<double, 3, 1>{value, value, value};
34  }
35  }
36 
37  Eigen::Matrix<double, GlobalDim, 1> operator()(
38  Eigen::Vector2d const& values) const
39  {
40  if constexpr (GlobalDim == 2)
41  {
42  return values;
43  }
44  OGS_FATAL("Cannot convert 2d vector to {:d}d vector.", GlobalDim);
45  }
46 
47  Eigen::Matrix<double, GlobalDim, 1> operator()(
48  Eigen::Vector3d const& values) const
49  {
50  if constexpr (GlobalDim == 3)
51  {
52  return values;
53  }
54  OGS_FATAL("Cannot convert 3d vector to a {:d}d vector.", GlobalDim);
55  }
56 
57  Eigen::Matrix<double, GlobalDim, 1> operator()(
58  Eigen::Matrix<double, 2, 2> const& /*values*/) const
59  {
60  OGS_FATAL("Cannot convert a 2d tensor to a {:d}d Vector.", GlobalDim);
61  }
62  Eigen::Matrix<double, GlobalDim, 1> operator()(
63  Eigen::Matrix<double, 3, 3> const& /*values*/) const
64  {
65  OGS_FATAL("Cannot convert a 3d tensor to a {:d}d Vector.", GlobalDim);
66  }
67 
68  Eigen::Matrix<double, GlobalDim, 1> operator()(
69  Eigen::Matrix<double, 4, 1> const& /*values*/) const
70  {
71  OGS_FATAL("Cannot convert a 4d vector to a {:d}d vector.", GlobalDim);
72  }
73 
74  Eigen::Matrix<double, GlobalDim, 1> operator()(
75  Eigen::Matrix<double, 6, 1> const& /*values*/) const
76  {
77  OGS_FATAL("Cannot convert a 6d vector to a {:d}d vector.", GlobalDim);
78  }
79 };
80 
81 template <int GlobalDim>
82 Eigen::Matrix<double, GlobalDim, 1> formEigenVector(
84 {
85  return std::visit(FormEigenVector<GlobalDim>(), values);
86 }
87 
88 template Eigen::Matrix<double, 1, 1> formEigenVector<1>(
90 
91 template Eigen::Matrix<double, 2, 1> formEigenVector<2>(
93 
94 template Eigen::Matrix<double, 3, 1> formEigenVector<3>(
96 
97 } // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition: Error.h:26
template Eigen::Matrix< double, 1, 1 > formEigenVector< 1 >(MaterialPropertyLib::PropertyDataType const &values)
template Eigen::Matrix< double, 3, 1 > formEigenVector< 3 >(MaterialPropertyLib::PropertyDataType const &values)
Eigen::Matrix< double, GlobalDim, 1 > formEigenVector(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 > > PropertyDataType
Definition: Property.h:35
template Eigen::Matrix< double, 2, 1 > formEigenVector< 2 >(MaterialPropertyLib::PropertyDataType const &values)
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Vector3d const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 4, 1 > const &) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 3, 3 > const &) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(double const value) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Vector2d const &values) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 6, 1 > const &) const
Eigen::Matrix< double, GlobalDim, 1 > operator()(Eigen::Matrix< double, 2, 2 > const &) const