Go to the documentation of this file.
35 namespace ContinuumMechanics::CommonTensors {
73 template <
int sizeI,
int sizeJ >
95 Eigen::Matrix< double, sizeI * sizeJ, sizeI * sizeJ >
P;
97 auto d = [](
int a,
int b ) ->
double {
return a == b ? 1.0 : 0.0; };
99 for (
int i = 0;
i < sizeI;
i++ )
100 for (
int j = 0;
j < sizeJ;
j++ )
101 for (
int l = 0;
l < sizeI;
l++ )
102 for (
int k = 0;
k < sizeJ;
k++ )
103 P(
i +
j * sizeI,
l * sizeJ +
k ) =
d(
i,
l ) *
d(
k,
j );
108 template <
int nDim >
115 if constexpr (
nDim == 2 )
123 namespace ContinuumMechanics::TensorUtility {
125 constexpr
int d(
int a,
int b )
127 return a == b ? 1 : 0;
133 typename = std::enable_if< !std::is_const< std::remove_reference< T > >::value > >
136 return Eigen::Map< Eigen::Matrix< typename T::Scalar, x, y > >( t.data() );
139 template <
int x,
int y,
typename T,
typename =
void >
140 auto as(
const T& t )
142 return Eigen::Map< const Eigen::Matrix< typename T::Scalar, x, y > >( t.data() );
145 template <
typename Derived,
146 typename = std::enable_if< !std::is_const< std::remove_reference< Derived > >::value > >
150 Eigen::Matrix< typename Derived::Scalar, Derived::RowsAtCompileTime * Derived::ColsAtCompileTime, 1 > >(
154 template <
typename Derived,
typename =
void >
158 const Eigen::Matrix< typename Derived::Scalar, Derived::RowsAtCompileTime * Derived::ColsAtCompileTime, 1 > >(
162 template <
int... Pairs >
165 static_assert(
sizeof...( Pairs ) % 2 == 0,
"Pairs must contain an even number of elements." );
167 constexpr
int numPairs =
sizeof...( Pairs ) / 2;
169 Eigen::array< Eigen::IndexPair< int >, numPairs > result{};
171 if constexpr ( numPairs > 0 ) {
172 constexpr
int values[] = { Pairs... };
175 for (
int i = 0;
i < numPairs; ++
i ) {
176 result[
i] = { values[2 *
i], values[2 *
i + 1] };
184 namespace IndexNotation {
185 template <
int nDim >
188 if constexpr (
nDim == 1 )
189 return std::pair< int, int >( 0, 0 );
190 else if (
nDim == 2 )
192 case 0:
return std::pair< int, int >( 0, 0 );
193 case 1:
return std::pair< int, int >( 1, 1 );
194 case 2:
return std::pair< int, int >( 0, 1 );
197 else if (
nDim == 3 ) {
199 case 0:
return std::pair< int, int >( 0, 0 );
200 case 1:
return std::pair< int, int >( 1, 1 );
201 case 2:
return std::pair< int, int >( 2, 2 );
202 case 3:
return std::pair< int, int >( 0, 1 );
203 case 4:
return std::pair< int, int >( 0, 2 );
204 case 5:
return std::pair< int, int >( 1, 2 );
209 << __PRETTY_FUNCTION__ <<
": invalid dimension / voigt index specified" );
212 template <
int nDim >
215 if constexpr (
nDim == 1 )
217 else if (
nDim == 2 )
218 return (
i ==
j ) ? (
i == 0 ? 0 : 1 ) : 2;
220 else if (
nDim == 3 ) {
221 constexpr
int tensor2VoigtNotationIndicesMapping[3][3] = { { 0, 3, 4 }, { 3, 1, 5 }, { 4, 5, 2 } };
222 return tensor2VoigtNotationIndicesMapping[
i][
j];
225 throw std::invalid_argument(
MakeString() << __PRETTY_FUNCTION__ <<
": invalid dimension specified" );
228 template <
int nDim >
231 using namespace Eigen;
234 for (
int i = 0;
i <
nDim;
i++ )
235 for (
int j = 0;
j <
nDim;
j++ )
236 result( toVoigt< nDim >(
i,
j ),
i,
j ) = 1;
EigenTensors::Tensor3333d Initialize_I2xI2()
Definition: MarmotTensor.cpp:34
EigenTensors::Tensor3333d Initialize_Iskew()
Definition: MarmotTensor.cpp:71
Fastor::Index< i_ > i
Definition: MarmotFastorTensorBasics.h:137
const EigenTensors::Tensor122d LeviCivita2D
Definition: MarmotTensor.h:60
EigenTensors::Tensor3333d Initialize_dDeviatoricStress_dStress()
Definition: MarmotTensor.cpp:84
constexpr Eigen::TensorFixedSize< double, Eigen::Sizes< getNumberOfDofForRotation(nDim), nDim, nDim > > getReferenceToCorrectLeviCivita()
Definition: MarmotTensor.h:109
Eigen::TensorFixedSize< double, Eigen::Sizes< VOIGTFROMDIM(nDim), nDim, nDim > > voigtMap()
Definition: MarmotTensor.h:229
constexpr auto contractionDims()
Definition: MarmotTensor.h:163
const EigenTensors::Tensor3333d dDeviatoricStress_dStress
Definition: MarmotTensor.h:53
Fastor::Index< l_ > l
Definition: MarmotFastorTensorBasics.h:207
EigenTensors::Tensor3333d Initialize_IFourthOrder()
Definition: MarmotTensor.cpp:8
const EigenTensors::Tensor3333d I2xI2
Definition: MarmotTensor.h:38
const EigenTensors::Tensor3333d IFourthOrder
Definition: MarmotTensor.h:47
const EigenTensors::Tensor3333d IFourthOrderTranspose
Definition: MarmotTensor.h:50
EigenTensors::Tensor122d Initialize_LeviCivita2D()
Definition: MarmotTensor.cpp:113
const EigenTensors::Tensor3333d Isym
Definition: MarmotTensor.h:41
EigenTensors::Tensor3333d Initialize_IFourthOrderTranspose()
Definition: MarmotTensor.cpp:21
constexpr int nDim
Definition: MarmotFiniteElement.h:112
EigenTensors::Tensor3333d Initialize_Isym()
Definition: MarmotTensor.cpp:58
Eigen::Matrix< double, 3, 1 > Vector3d
Definition: MarmotTypedefs.h:42
#define VOIGTFROMDIM(x)
Definition: MarmotVoigt.h:35
constexpr int d(int a, int b)
Definition: MarmotTensor.h:125
Eigen::Matrix3d dyadicProduct(const Eigen::Vector3d &vector1, const Eigen::Vector3d &vector2)
Definition: MarmotTensor.cpp:127
Eigen::TensorFixedSize< double, Eigen::Sizes< 3, 3 > > Tensor33d
Definition: MarmotTypedefs.h:80
Eigen::Matrix< double, 3, 3 > Matrix3d
Definition: MarmotTypedefs.h:40
Eigen::TensorFixedSize< double, Eigen::Sizes< 3, 3, 3, 3 > > Tensor3333d
Definition: MarmotTypedefs.h:73
constexpr int toVoigt(int i, int j)
Definition: MarmotTensor.h:213
Fastor::Index< j_ > j
Definition: MarmotFastorTensorBasics.h:182
This file includes functions needed for calculations with stress and strain tensors written in voigt ...
Definition: MarmotTesting.h:37
constexpr std::pair< int, int > fromVoigt(int ij)
Definition: MarmotTensor.h:186
const EigenTensors::Tensor333d LeviCivita3D
Definition: MarmotTensor.h:57
auto as(T &t)
Definition: MarmotTensor.h:134
const Marmot::Vector6d P
Definition: MarmotVoigt.cpp:15
auto flatten(Derived &t)
Definition: MarmotTensor.h:147
const EigenTensors::Tensor33d I2
Definition: MarmotTensor.h:63
const EigenTensors::Tensor3333d Iskew
Definition: MarmotTensor.h:44
Fastor::Index< i_, j_ > ij
Definition: MarmotFastorTensorBasics.h:158
Fastor::Index< k_ > k
Definition: MarmotFastorTensorBasics.h:195
EigenTensors::Tensor333d Initialize_LeviCivita3D()
Definition: MarmotTensor.cpp:97
Eigen::Matrix< double, sizeI *sizeJ, sizeI *sizeJ > makeIndexSwapTensor()
Definition: MarmotTensor.h:74
Eigen::TensorFixedSize< double, Eigen::Sizes< 1, 2, 2 > > Tensor122d
Definition: MarmotTypedefs.h:75
EigenTensors::Tensor33d Initialize_I2()
Definition: MarmotTensor.cpp:47
Eigen::TensorFixedSize< double, Eigen::Sizes< 3, 3, 3 > > Tensor333d
Definition: MarmotTypedefs.h:74
constexpr int getNumberOfDofForRotation(int nDim)
Definition: MarmotTensor.h:65
Definition: MarmotJournal.h:32