Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
VoigtTraits.h
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef model_VoigtTraits_H_
9#define model_VoigtTraits_H_
10
11
12#include <Eigen/Dense>
13
14namespace model
15{
16
17
18 template <int dim>
20 {
21 static constexpr int voigtSize=dim*(dim+1)/2;
22 typedef Eigen::Matrix<size_t,voigtSize,2> VoigtSizeMatrixType;
23 typedef Eigen::Matrix<double,dim,dim> MatrixDim;
24 typedef Eigen::Matrix<double,dim,1> VectorDim;
25 typedef Eigen::Matrix<double,voigtSize,1> VectorVoigt;
26
27
28 const VoigtSizeMatrixType tensorIndex; // i=tensorIndex(k,0), j=tensorIndex(k,1)
29// const Eigen::Matrix<size_t,dim,dim> voigtIndex; // k=voigtIndex(i,j)
30
31 SymmetricVoigtTraits(const VoigtSizeMatrixType& voigtOrder_in);
32
33 MatrixDim v2m(const Eigen::Matrix<double,voigtSize,1>& voigtvector, const bool& is_strain) const ;
34 VectorVoigt m2v(const MatrixDim& input_matrix, const bool& is_strain) const;
35
36
37// static Eigen::Matrix<size_t,dim,dim> getVoigtIndex(const VoigtSizeMatrixType& ti);
38
39 };
40
41template <int rows,int cols>
43{
44 static constexpr int voigtSize=rows*cols;
45 typedef Eigen::Matrix<size_t,voigtSize,2> VoigtStorageType;
46 typedef Eigen::Matrix<double,rows,cols> TensorType;
47 typedef Eigen::Matrix<double,voigtSize,1> VoigtVectorType;
48
49
50 const VoigtStorageType tensorIndex; // i=tensorIndex(k,0), j=tensorIndex(k,1)
51
52 VoigtTraits(const VoigtStorageType& voigtOrder_in) :
53 /* init */ tensorIndex(voigtOrder_in)
54 {
55
56 }
57
58 TensorType v2m(const VoigtVectorType& voigtvector) const
59 {
60 //from voigt to matrix format
61 TensorType temp(TensorType::Zero());
62 for (size_t k=0;k<voigtSize;k++)
63 {
64 temp(tensorIndex(k,0),tensorIndex(k,1))=voigtvector(k);
65 }
66 return temp;
67 }
68
69 VoigtVectorType m2v(const TensorType& input_matrix) const
70 {
71 //from matrix to voigt format
72 VoigtVectorType temp(VoigtVectorType::Zero());
73 for (size_t k=0;k<voigtSize;k++)
74 {
75 temp(k)=input_matrix(tensorIndex(k,0),tensorIndex(k,1));
76 }
77 return temp;
78 }
79
80};
81
82}
83#endif
VectorVoigt m2v(const MatrixDim &input_matrix, const bool &is_strain) const
MatrixDim v2m(const Eigen::Matrix< double, voigtSize, 1 > &voigtvector, const bool &is_strain) const
Eigen::Matrix< size_t, voigtSize, 2 > VoigtSizeMatrixType
Definition VoigtTraits.h:22
Eigen::Matrix< double, dim, dim > MatrixDim
Definition VoigtTraits.h:23
SymmetricVoigtTraits(const VoigtSizeMatrixType &voigtOrder_in)
Eigen::Matrix< double, dim, 1 > VectorDim
Definition VoigtTraits.h:24
const VoigtSizeMatrixType tensorIndex
Definition VoigtTraits.h:28
static constexpr int voigtSize
Definition VoigtTraits.h:21
Eigen::Matrix< double, voigtSize, 1 > VectorVoigt
Definition VoigtTraits.h:25
Eigen::Matrix< double, rows, cols > TensorType
Definition VoigtTraits.h:46
TensorType v2m(const VoigtVectorType &voigtvector) const
Definition VoigtTraits.h:58
VoigtVectorType m2v(const TensorType &input_matrix) const
Definition VoigtTraits.h:69
const VoigtStorageType tensorIndex
Definition VoigtTraits.h:50
Eigen::Matrix< double, voigtSize, 1 > VoigtVectorType
Definition VoigtTraits.h:47
Eigen::Matrix< size_t, voigtSize, 2 > VoigtStorageType
Definition VoigtTraits.h:45
VoigtTraits(const VoigtStorageType &voigtOrder_in)
Definition VoigtTraits.h:52
static constexpr int voigtSize
Definition VoigtTraits.h:44
int k
vertex temp