26 if (displacement_dim == 2)
30 else if (displacement_dim == 3)
35 "Cannot convert displacement dimension {} to kelvin vector dimension.",
46template <
int DisplacementDim>
54template <
int DisplacementDim>
60template <
int DisplacementDim>
67template <
int DisplacementDim>
74template <
int DisplacementDim>
78 std::numeric_limits<double>::quiet_NaN());
82template <
int DisplacementDim>
86 std::numeric_limits<double>::quiet_NaN());
92template <
int KelvinVectorSize>
95 static_assert(KelvinVectorSize == 4 || KelvinVectorSize == 6,
96 "KelvinVector invariants for vectors of size different than "
97 "4 or 6 is not allowed.");
100 static Eigen::Matrix<double, KelvinVectorSize, KelvinVectorSize>
const
104 static Eigen::Matrix<double, KelvinVectorSize, KelvinVectorSize>
const
107 static Eigen::Matrix<double, KelvinVectorSize, 1>
const identity2;
111 static Eigen::Matrix<double, KelvinVectorSize, 1>
const ones2;
115 Eigen::Matrix<double, KelvinVectorSize, 1>
const&
v);
120 Eigen::Matrix<double, KelvinVectorSize, 1>
const& deviatoric_v);
124 Eigen::Matrix<double, KelvinVectorSize, 1>
const& deviatoric_v);
129 Eigen::Matrix<double, KelvinVectorSize, 1>
const& deviatoric_v);
134 Eigen::Matrix<double, KelvinVectorSize, 1>
const& deviatoric_v);
137 static double trace(Eigen::Matrix<double, KelvinVectorSize, 1>
const&
v);
142 Eigen::Matrix<double, KelvinVectorSize, 1>
const&
v);
151template <
int KelvinVectorSize>
152Eigen::Matrix<double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1>
162template <
int KelvinVectorSize>
172template <
int DisplacementDim>
174 Eigen::Matrix<double, 3, 3>
const& m);
187template <
int KelvinVectorSize>
188Eigen::Matrix<double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1>
203template <
typename Derived>
204Eigen::Matrix<double, Eigen::MatrixBase<Derived>::RowsAtCompileTime, 1>
208 (Eigen::MatrixBase<Derived>::ColsAtCompileTime == 1) ||
209 (Eigen::MatrixBase<Derived>::ColsAtCompileTime == Eigen::Dynamic),
210 "KelvinVector must be a column vector");
214 "KelvinVector must be a column vector, but input has {:d} columns.",
218 Eigen::Matrix<double, Eigen::MatrixBase<Derived>::RowsAtCompileTime, 1>
223 result <<
v[0],
v[1],
v[2],
v[3] * std::sqrt(2.);
225 else if (
v.rows() == 6)
228 result <<
v[0],
v[1],
v[2],
v[3] * std::sqrt(2.),
v[4] * std::sqrt(2.),
229 v[5] * std::sqrt(2.);
234 "Symmetric tensor to Kelvin vector conversion expected an input "
235 "vector of size 4 or 6, but a vector of size {:d} was given.",
245template <
int DisplacementDim>
247 std::vector<double>
const& values)
249 constexpr int kelvin_vector_size =
252 if (values.size() != kelvin_vector_size)
255 "Symmetric tensor to Kelvin vector conversion expected an input "
256 "vector of size {:d}, but a vector of size {:d} was given.",
257 kelvin_vector_size, values.size());
262 DisplacementDim>
const>(
269template <
int DisplacementDim>
270Eigen::Matrix<double, DisplacementDim,
276template <
int DisplacementDim>
278 Eigen::Matrix<
double, DisplacementDim,
285template <
int DisplacementDim>
287 Eigen::Matrix<
double, DisplacementDim, DisplacementDim, Eigen::ColMajor,
288 DisplacementDim, DisplacementDim>
const& transformation);
Eigen::Matrix< double, DisplacementDim, 1 > reduceKelvinToVector(Eigen::Matrix< double, DisplacementDim, kelvin_vector_dimensions(DisplacementDim)> const &m)
KelvinMatrixType< DisplacementDim > fourthOrderRotationMatrix(Eigen::Matrix< double, DisplacementDim, DisplacementDim, Eigen::ColMajor, DisplacementDim, DisplacementDim > const &transformation)
Eigen::Matrix< double, 4, 1 > kelvinVectorToSymmetricTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
constexpr auto KVnan()
Returns an expressions for a Kelvin vector filled with NaN.
Eigen::Matrix< double, Eigen::MatrixBase< Derived >::RowsAtCompileTime, 1 > symmetricTensorToKelvinVector(Eigen::MatrixBase< Derived > const &v)
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
constexpr auto KMzero()
Returns an expressions for a Kelvin matrix filled with zero.
constexpr auto KVzero()
Returns an expressions for a Kelvin vector filled with zero.
Eigen::Matrix< double, DisplacementDim, kelvin_vector_dimensions(DisplacementDim)> liftVectorToKelvin(Eigen::Matrix< double, DisplacementDim, 1 > const &v)
constexpr auto KMnan()
Returns an expressions for a Kelvin matrix filled with NaN.
KelvinVectorType< DisplacementDim > tensorToKelvin(Eigen::Matrix< double, 3, 3 > const &m)
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > inverse(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
static double FrobeniusNorm(Eigen::Matrix< double, KelvinVectorSize, 1 > const &deviatoric_v)
Get the norm of the deviatoric stress.
static Eigen::Matrix< double, KelvinVectorSize, 1 > const ones2
static Eigen::Matrix< double, KelvinVectorSize, 1 > const identity2
Kelvin mapping of 2nd order identity tensor.
static Eigen::Vector3d diagonal(Eigen::Matrix< double, KelvinVectorSize, 1 > const &v)
static double trace(Eigen::Matrix< double, KelvinVectorSize, 1 > const &v)
Trace of the corresponding tensor.
static Eigen::Matrix< double, KelvinVectorSize, KelvinVectorSize > const spherical_projection
static double J2(Eigen::Matrix< double, KelvinVectorSize, 1 > const &deviatoric_v)
static Eigen::Matrix< double, KelvinVectorSize, KelvinVectorSize > const deviatoric_projection
static double determinant(Eigen::Matrix< double, KelvinVectorSize, 1 > const &v)
Determinant of a matrix in Kelvin vector representation.
static double equivalentStress(Eigen::Matrix< double, KelvinVectorSize, 1 > const &deviatoric_v)
static double J3(Eigen::Matrix< double, KelvinVectorSize, 1 > const &deviatoric_v)