Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
src/Math/VoigtTraits.cpp
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_cpp_
9#define model_VoigtTraits_cpp_
10
11
12#include <Math/VoigtTraits.h>
13
14namespace model
15{
16
17template <int dim>
19/* init */ tensorIndex(tensorIndex_in)
21{
22
23}
24
25//template <int dim>
26//Eigen::Matrix<size_t,dim,dim> SymmetricVoigtTraits<dim>::getVoigtIndex(const VoigtSizeMatrixType& ti)
27//{
28//
29// Eigen::Matrix<size_t,dim,dim> temp(Eigen::Matrix<size_t,dim,dim>::Zero());
30// for(int k=0;k<ti.rows();++k)
31// {
32// temp(ti(k,0),ti(k,1))=k;
33// temp(ti(k,1),ti(k,0))=k;
34// }
35// return temp;
36//}
37
38
39template <int dim>
40typename SymmetricVoigtTraits<dim>::MatrixDim SymmetricVoigtTraits<dim>::v2m(const Eigen::Matrix<double,voigtSize,1>& voigtvector, const bool& is_strain) const
41{
42 //from voigt to matrix format
43 MatrixDim temp(MatrixDim::Zero());
44 for (size_t i=0;i<voigtSize;i++)
45 {
46 if(is_strain && tensorIndex.row(i)[0] != tensorIndex.row(i)[1])
47 {
48 temp.row(tensorIndex.row(i)[0])[tensorIndex.row(i)[1]]=0.5*voigtvector[i];
49 temp.row(tensorIndex.row(i)[1])[tensorIndex.row(i)[0]]=0.5*voigtvector[i];
50 }
51 else
52 {
53 temp.row(tensorIndex.row(i)[0])[tensorIndex.row(i)[1]]=voigtvector[i];
54 temp.row(tensorIndex.row(i)[1])[tensorIndex.row(i)[0]]=voigtvector[i];
55 }
56 }
57 return temp;
58}
59
60template <int dim>
61typename SymmetricVoigtTraits<dim>::VectorVoigt SymmetricVoigtTraits<dim>::m2v(const MatrixDim& input_matrix, const bool& is_strain) const
62{
63 //from matrix to voigt format
64 VectorVoigt temp(VectorVoigt::Zero());
65 for (size_t i=0;i<voigtSize;i++)
66 {
67 if(is_strain && tensorIndex.row(i)[0] != tensorIndex.row(i)[1])
68 {
69 temp.row(i)[0]=2.0*input_matrix.row(tensorIndex.row(i)[0])[tensorIndex.row(i)[1]];
70 }
71 else
72 {
73 temp.row(i)[0]=input_matrix.row(tensorIndex.row(i)[0])[tensorIndex.row(i)[1]];
74 }
75 }
76 return temp;
77}
78
79//template class SymmetricVoigtTraits<2>;
80template struct SymmetricVoigtTraits<3>;
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)
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
int i
vertex temp