OGS
MathLib::KelvinVector Namespace Reference

Detailed Description

The invariants and the Kelving mapping are explained in detail in the article "On Advantages of the Kelvin Mapping in Finite Element Implementations of Deformation Processes" [30].

Namespaces

namespace  KelvinVector_detail

Classes

struct  Invariants

Typedefs

template<int DisplacementDim>
using KelvinVectorType
template<int DisplacementDim>
using KelvinMatrixType

Functions

template<>
Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > inverse (Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
template<>
Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > inverse (Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > const &v)
template<>
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor (Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
template<>
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor (Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > const &v)
template<>
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor (Eigen::Matrix< double, Eigen::Dynamic, 1, Eigen::ColMajor, Eigen::Dynamic, 1 > const &v)
template<>
KelvinVectorType< 2 > tensorToKelvin< 2 > (Eigen::Matrix< double, 3, 3 > const &m)
template<>
KelvinVectorType< 3 > tensorToKelvin< 3 > (Eigen::Matrix< double, 3, 3 > const &m)
template<>
Eigen::Matrix< double, 4, 1 > kelvinVectorToSymmetricTensor (Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)
template<>
Eigen::Matrix< double, 6, 1 > kelvinVectorToSymmetricTensor (Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > const &v)
template<>
Eigen::Matrix< double, Eigen::Dynamic, 1, Eigen::ColMajor, Eigen::Dynamic, 1 > kelvinVectorToSymmetricTensor (Eigen::Matrix< double, Eigen::Dynamic, 1, Eigen::ColMajor, Eigen::Dynamic, 1 > const &v)
template<>
Eigen::Matrix< double, 2, 4 > liftVectorToKelvin< 2 > (Eigen::Matrix< double, 2, 1 > const &v)
template<>
Eigen::Matrix< double, 3, 6 > liftVectorToKelvin< 3 > (Eigen::Matrix< double, 3, 1 > const &v)
template<>
Eigen::Matrix< double, 2, 1 > reduceKelvinToVector< 2 > (Eigen::Matrix< double, 2, 4 > const &m)
template<>
Eigen::Matrix< double, 3, 1 > reduceKelvinToVector< 3 > (Eigen::Matrix< double, 3, 6 > const &m)
template<>
KelvinMatrixType< 2 > fourthOrderRotationMatrix< 2 > (Eigen::Matrix< double, 2, 2, Eigen::ColMajor, 2, 2 > const &transformation)
template<>
KelvinMatrixType< 3 > fourthOrderRotationMatrix< 3 > (Eigen::Matrix< double, 3, 3, Eigen::ColMajor, 3, 3 > const &transformation)
constexpr int kelvin_vector_dimensions (int const displacement_dim)
 Kelvin vector dimensions for given displacement dimension.
template<int DisplacementDim>
constexpr auto KVzero ()
 Returns an expressions for a Kelvin vector filled with zero.
template<int DisplacementDim>
constexpr auto KMzero ()
 Returns an expressions for a Kelvin matrix filled with zero.
template<int DisplacementDim>
constexpr auto KVnan ()
 Returns an expressions for a Kelvin vector filled with NaN.
template<int DisplacementDim>
constexpr auto KMnan ()
 Returns an expressions for a Kelvin matrix filled with NaN.
template<int KelvinVectorSize>
Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > inverse (Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > const &v)
template<int KelvinVectorSize>
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor (Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > const &v)
template<int DisplacementDim>
KelvinVectorType< DisplacementDim > tensorToKelvin (Eigen::Matrix< double, 3, 3 > const &m)
template<int KelvinVectorSize>
Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > kelvinVectorToSymmetricTensor (Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > const &v)
template<typename Derived>
Eigen::Matrix< double, Eigen::MatrixBase< Derived >::RowsAtCompileTime, 1 > symmetricTensorToKelvinVector (Eigen::MatrixBase< Derived > const &v)
template<int DisplacementDim>
KelvinVectorType< DisplacementDim > symmetricTensorToKelvinVector (std::vector< double > const &values)
template<int DisplacementDim>
Eigen::Matrix< double, DisplacementDim, kelvin_vector_dimensions(DisplacementDim)> liftVectorToKelvin (Eigen::Matrix< double, DisplacementDim, 1 > const &v)
template<int DisplacementDim>
Eigen::Matrix< double, DisplacementDim, 1 > reduceKelvinToVector (Eigen::Matrix< double, DisplacementDim, kelvin_vector_dimensions(DisplacementDim)> const &m)
template<int DisplacementDim>
KelvinMatrixType< DisplacementDim > fourthOrderRotationMatrix (Eigen::Matrix< double, DisplacementDim, DisplacementDim, Eigen::ColMajor, DisplacementDim, DisplacementDim > const &transformation)

Variables

template<int KelvinVectorSize>
const Eigen::Matrix< double, KelvinVectorSize, KelvinVectorSize > Invariants< KelvinVectorSize >::deviatoric_projection
template<int KelvinVectorSize>
Eigen::Matrix< double, KelvinVectorSize, KelvinVectorSize > const Invariants< KelvinVectorSize >::spherical_projection
template<int KelvinVectorSize>
const Eigen::Matrix< double, KelvinVectorSize, 1 > Invariants< KelvinVectorSize >::identity2
template<int KelvinVectorSize>
const Eigen::Matrix< double, KelvinVectorSize, 1 > Invariants< KelvinVectorSize >::ones2

Typedef Documentation

◆ KelvinMatrixType

template<int DisplacementDim>
using MathLib::KelvinVector::KelvinMatrixType
Initial value:
Eigen::Matrix<double, kelvin_vector_dimensions(DisplacementDim),
kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor>
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.

Kelvin matrix type for given displacement dimension.

Note
The Eigen matrix is always a fixed size vector in contrast to a shape matrix policy types like BMatrixPolicyType::KelvinMatrixType.

Definition at line 49 of file KelvinVector.h.

◆ KelvinVectorType

template<int DisplacementDim>
using MathLib::KelvinVector::KelvinVectorType
Initial value:
Eigen::Matrix<double, kelvin_vector_dimensions(DisplacementDim), 1,
Eigen::ColMajor>

Kelvin vector type for given displacement dimension.

Note
The Eigen vector is always a fixed size vector in contrast to a shape matrix policy types like BMatrixPolicyType::KelvinVectorType.

Definition at line 41 of file KelvinVector.h.

Function Documentation

◆ fourthOrderRotationMatrix()

template<int DisplacementDim>
KelvinMatrixType< DisplacementDim > MathLib::KelvinVector::fourthOrderRotationMatrix ( Eigen::Matrix< double, DisplacementDim, DisplacementDim, Eigen::ColMajor, DisplacementDim, DisplacementDim > const & transformation)

◆ fourthOrderRotationMatrix< 2 >()

template<>
KelvinMatrixType< 2 > MathLib::KelvinVector::fourthOrderRotationMatrix< 2 > ( Eigen::Matrix< double, 2, 2, Eigen::ColMajor, 2, 2 > const & transformation)

Definition at line 155 of file KelvinVector.cpp.

236{
237 // 1-based index access for convenience.
238 auto Q = [&](int const i, int const j)
239 { return transformation(i - 1, j - 1); };
240
242 R << Q(1, 1) * Q(1, 1), Q(1, 2) * Q(1, 2), 0,
243 std::sqrt(2) * Q(1, 1) * Q(1, 2), Q(2, 1) * Q(2, 1), Q(2, 2) * Q(2, 2),
244 0, std::sqrt(2) * Q(2, 1) * Q(2, 2), 0, 0, 1, 0,
245 std::sqrt(2) * Q(1, 1) * Q(2, 1), std::sqrt(2) * Q(1, 2) * Q(2, 2), 0,
246 Q(1, 1) * Q(2, 2) + Q(1, 2) * Q(2, 1);
247 return R;
248}
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType

References kelvinVectorToSymmetricTensor(), OGS_FATAL, and MathLib::v.

◆ fourthOrderRotationMatrix< 3 >()

template<>
KelvinMatrixType< 3 > MathLib::KelvinVector::fourthOrderRotationMatrix< 3 > ( Eigen::Matrix< double, 3, 3, Eigen::ColMajor, 3, 3 > const & transformation)

Definition at line 155 of file KelvinVector.cpp.

253{
254 // 1-based index access for convenience.
255 auto Q = [&](int const i, int const j)
256 { return transformation(i - 1, j - 1); };
257
259 R << Q(1, 1) * Q(1, 1), Q(1, 2) * Q(1, 2), Q(1, 3) * Q(1, 3),
260 std::sqrt(2) * Q(1, 1) * Q(1, 2), std::sqrt(2) * Q(1, 2) * Q(1, 3),
261 std::sqrt(2) * Q(1, 1) * Q(1, 3), Q(2, 1) * Q(2, 1), Q(2, 2) * Q(2, 2),
262 Q(2, 3) * Q(2, 3), std::sqrt(2) * Q(2, 1) * Q(2, 2),
263 std::sqrt(2) * Q(2, 2) * Q(2, 3), std::sqrt(2) * Q(2, 1) * Q(2, 3),
264 Q(3, 1) * Q(3, 1), Q(3, 2) * Q(3, 2), Q(3, 3) * Q(3, 3),
265 std::sqrt(2) * Q(3, 1) * Q(3, 2), std::sqrt(2) * Q(3, 2) * Q(3, 3),
266 std::sqrt(2) * Q(3, 1) * Q(3, 3), std::sqrt(2) * Q(1, 1) * Q(2, 1),
267 std::sqrt(2) * Q(1, 2) * Q(2, 2), std::sqrt(2) * Q(1, 3) * Q(2, 3),
268 Q(1, 1) * Q(2, 2) + Q(1, 2) * Q(2, 1),
269 Q(1, 2) * Q(2, 3) + Q(1, 3) * Q(2, 2),
270 Q(1, 1) * Q(2, 3) + Q(1, 3) * Q(2, 1), std::sqrt(2) * Q(2, 1) * Q(3, 1),
271 std::sqrt(2) * Q(2, 2) * Q(3, 2), std::sqrt(2) * Q(2, 3) * Q(3, 3),
272 Q(2, 1) * Q(3, 2) + Q(2, 2) * Q(3, 1),
273 Q(2, 2) * Q(3, 3) + Q(2, 3) * Q(3, 2),
274 Q(2, 1) * Q(3, 3) + Q(2, 3) * Q(3, 1), std::sqrt(2) * Q(1, 1) * Q(3, 1),
275 std::sqrt(2) * Q(1, 2) * Q(3, 2), std::sqrt(2) * Q(1, 3) * Q(3, 3),
276 Q(1, 1) * Q(3, 2) + Q(1, 2) * Q(3, 1),
277 Q(1, 2) * Q(3, 3) + Q(1, 3) * Q(3, 2),
278 Q(1, 1) * Q(3, 3) + Q(1, 3) * Q(3, 1);
279 return R;
280}

◆ inverse() [1/3]

template<>
Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > MathLib::KelvinVector::inverse ( Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const & v)

Definition at line 27 of file KelvinVector.cpp.

29{
30 assert(Invariants<4>::determinant(v) != 0);
31
32 Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1> inv;
33 inv(0) = v(1) * v(2);
34 inv(1) = v(0) * v(2);
35 inv(2) = v(0) * v(1) - v(3) * v(3) / 2.;
36 inv(3) = -v(3) * v(2);
37 return inv / Invariants<4>::determinant(v);
38}
static const double v
static double determinant(Eigen::Matrix< double, KelvinVectorSize, 1 > const &v)
Determinant of a matrix in Kelvin vector representation.

References MathLib::KelvinVector::Invariants< KelvinVectorSize >::determinant(), and MathLib::v.

Referenced by MaterialLib::Solids::Ehlers::thetaSigmaDerivatives().

◆ inverse() [2/3]

template<>
Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > MathLib::KelvinVector::inverse ( Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > const & v)

Definition at line 41 of file KelvinVector.cpp.

43{
44 assert(Invariants<6>::determinant(v) != 0);
45
46 Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1> inv;
47 inv(0) = v(1) * v(2) - v(4) * v(4) / 2.;
48 inv(1) = v(0) * v(2) - v(5) * v(5) / 2.;
49 inv(2) = v(0) * v(1) - v(3) * v(3) / 2.;
50 inv(3) = v(4) * v(5) / std::sqrt(2.) - v(3) * v(2);
51 inv(4) = v(3) * v(5) / std::sqrt(2.) - v(4) * v(0);
52 inv(5) = v(4) * v(3) / std::sqrt(2.) - v(1) * v(5);
53 return inv / Invariants<6>::determinant(v);
54}

References MathLib::KelvinVector::Invariants< KelvinVectorSize >::determinant(), and MathLib::v.

◆ inverse() [3/3]

template<int KelvinVectorSize>
Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > MathLib::KelvinVector::inverse ( Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > const & v)

Inverse of a matrix in Kelvin vector representation. There are only implementations for the Kelvin vector size 4 and 6.

References MathLib::v.

◆ kelvin_vector_dimensions()

int MathLib::KelvinVector::kelvin_vector_dimensions ( int const displacement_dim)
constexpr

Kelvin vector dimensions for given displacement dimension.

Definition at line 18 of file KelvinVector.h.

19{
20 if (displacement_dim == 2)
21 {
22 return 4;
23 }
24 else if (displacement_dim == 3)
25 {
26 return 6;
27 }
29 "Cannot convert displacement dimension {} to kelvin vector dimension.",
30 displacement_dim);
31}
#define OGS_FATAL(...)
Definition Error.h:19

References OGS_FATAL.

Referenced by ProcessLib::HMPhaseField::HMPhaseFieldLocalAssembler< ShapeFunction, DisplacementDim >::HMPhaseFieldLocalAssembler(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::HydroMechanicsLocalAssembler(), ProcessLib::ThermoHydroMechanics::IntegrationPointData< BMatricesType, ShapeMatricesTypeDisplacement, ShapeMatricesTypePressure, DisplacementDim, ShapeFunctionDisplacement::NPOINTS >::IntegrationPointData(), ProcessLib::PhaseField::PhaseFieldLocalAssembler< ShapeFunction, DisplacementDim >::PhaseFieldLocalAssembler(), ProcessLib::LIE::SmallDeformation::SmallDeformationLocalAssemblerMatrix< ShapeFunction, DisplacementDim >::SmallDeformationLocalAssemblerMatrix(), ProcessLib::LIE::SmallDeformation::SmallDeformationLocalAssemblerMatrixNearFracture< ShapeFunction, DisplacementDim >::SmallDeformationLocalAssemblerMatrixNearFracture(), ProcessLib::ThermoMechanics::ThermoMechanicsLocalAssembler< ShapeFunction, DisplacementDim >::ThermoMechanicsLocalAssembler(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assemble(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobian(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobian(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobianEvalConstitutiveSetting(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobianForDeformationEquations(), ProcessLib::ThermoRichardsMechanics::ThermoRichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunction, DisplacementDim, ConstitutiveTraits >::assembleWithJacobianSingleIP(), MaterialLib::Solids::Ehlers::calculateDResidualDEps(), MaterialLib::Solids::Phasefield::calculateIsotropicDegradedStress(), MaterialLib::Solids::Phasefield::calculateIsotropicDegradedStressWithRankineEnergy(), MaterialLib::Solids::Phasefield::calculateOrthoVolDevDegradedStress(), MaterialLib::Solids::Ehlers::calculatePlasticJacobian(), MaterialLib::Solids::Ehlers::calculatePlasticResidual(), MaterialLib::Solids::Phasefield::calculateSpectralDegradedStress(), MaterialLib::Solids::Phasefield::calculateVolDevDegradedStress(), ProcessLib::LinearBMatrix::computeBMatrix(), ProcessLib::NonLinearBMatrix::computeBMatrix(), ProcessLib::RichardsMechanics::computeMicroPorosity(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::computeSecondaryVariableConcrete(), ProcessLib::LIE::HydroMechanics::createHydroMechanicsProcess(), ProcessLib::createInitialStress(), ProcessLib::LargeDeformation::createLargeDeformationProcess(), ProcessLib::SmallDeformation::createSmallDeformationProcess(), MaterialPropertyLib::Function::Implementation< D >::createSymbolTable(), ProcessLib::ThermoMechanics::createThermoMechanicsProcess(), ProcessLib::TH2M::ConstitutiveRelations::PorosityModel< DisplacementDim >::dEval(), ProcessLib::TH2M::ConstitutiveRelations::SolidDensityModel< DisplacementDim >::dEval(), ProcessLib::TH2M::ConstitutiveRelations::PermeabilityModel< DisplacementDim >::eval(), ProcessLib::TH2M::ConstitutiveRelations::PorosityModel< DisplacementDim >::eval(), ProcessLib::TH2M::ConstitutiveRelations::SolidDensityModel< DisplacementDim >::eval(), ProcessLib::TH2M::ConstitutiveRelations::SolidThermalExpansionModel< DisplacementDim >::eval(), ProcessLib::TH2M::ConstitutiveRelations::TotalStressModel< DisplacementDim >::eval(), ProcessLib::TH2M::ConstitutiveRelations::TransportPorosityModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::ConstitutiveStress_StrainTemperature::SolidMechanicsModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::ConstitutiveStress_StrainTemperature::SwellingModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::ConstitutiveStress_StrainTemperature::TransportPorosityModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::ConstitutiveStressSaturation_StrainPressureTemperature::EffectiveStressModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::ConstitutiveStressSaturation_StrainPressureTemperature::TransportPorosityModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::FluidThermalExpansionModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::PermeabilityModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::PorosityModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::SolidDensityModel< DisplacementDim >::eval(), MaterialLib::Solids::MFront::MFrontGeneric< DisplacementDim, boost::mp11::mp_list< Strain >, boost::mp11::mp_list< Stress >, boost::mp11::mp_list< Temperature > >::getBulkModulus(), MaterialLib::Solids::LinearElasticOrthotropic< DisplacementDim >::getElasticTensor(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::getEpsilon(), ProcessLib::PhaseField::PhaseFieldLocalAssembler< ShapeFunction, DisplacementDim >::getEpsilon(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::getEpsilon(), ProcessLib::ThermoMechanics::ThermoMechanicsLocalAssembler< ShapeFunction, DisplacementDim >::getEpsilon(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::getEpsilon0(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::getEpsilonM(), ProcessLib::ThermoMechanics::ThermoMechanicsLocalAssembler< ShapeFunction, DisplacementDim >::getEpsilonMechanical(), ProcessLib::getIntegrationPointKelvinVectorData(), ProcessLib::getIntegrationPointKelvinVectorData(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::getSigma(), ProcessLib::ThermoMechanics::ThermoMechanicsLocalAssembler< ShapeFunction, DisplacementDim >::getSigma(), ProcessLib::NonLinearFbar::identityForF(), ProcessLib::HydroMechanics::HydroMechanicsProcess< DisplacementDim >::initializeConcreteProcess(), ProcessLib::Reflection::detail::GetFlattenedIPDataFromLocAsm< Dim, Accessor_IPDataVecInLocAsm, Accessor_CurrentLevelFromIPDataVecElement >::operator()(), MaterialLib::Solids::Ehlers::predict_sigma(), MaterialLib::Solids::MFront::Variable< Derived >::rows(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::setInitialConditionsConcrete(), ProcessLib::setIntegrationPointKelvinVectorData(), ProcessLib::Reflection::detail::setIPData(), MaterialLib::Solids::MFront::OGSMFrontTangentOperatorBlocksView< DisplacementDim, ForcesGradsCombinations >::size(), symmetricTensorToKelvinVector(), MaterialLib::Solids::MFront::tangentOperatorDataMFrontToOGS(), MaterialLib::Solids::Lubby2::tangentStiffnessA(), MaterialLib::Solids::Ehlers::thetaSigmaDerivatives(), and ProcessLib::RichardsMechanics::updateSwellingStressAndVolumetricStrain().

◆ kelvinVectorToSymmetricTensor() [1/4]

template<>
Eigen::Matrix< double, 4, 1 > MathLib::KelvinVector::kelvinVectorToSymmetricTensor ( Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const & v)

Definition at line 135 of file KelvinVector.cpp.

137{
138 Eigen::Matrix<double, 4, 1> m;
139 m << v[0], v[1], v[2], v[3] / std::sqrt(2.);
140 return m;
141}

References MathLib::v.

Referenced by ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assemble(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobian(), ProcessLib::ThermoMechanics::ThermoMechanicsLocalAssembler< ShapeFunction, DisplacementDim >::assembleWithJacobian(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobianEvalConstitutiveSetting(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobianForPressureEquations(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::computeSecondaryVariableConcrete(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::computeSecondaryVariableConcrete(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::computeSecondaryVariableConcrete(), ProcessLib::LIE::SmallDeformation::SmallDeformationLocalAssemblerMatrix< ShapeFunction, DisplacementDim >::computeSecondaryVariableConcreteWithVector(), ProcessLib::LIE::SmallDeformation::SmallDeformationLocalAssemblerMatrixNearFracture< ShapeFunction, DisplacementDim >::computeSecondaryVariableConcreteWithVector(), ProcessLib::TH2M::ConstitutiveRelations::PermeabilityModel< DisplacementDim >::eval(), ProcessLib::ThermoRichardsMechanics::PermeabilityModel< DisplacementDim >::eval(), fourthOrderRotationMatrix< 2 >(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::getEpsilon(), ProcessLib::PhaseField::PhaseFieldLocalAssembler< ShapeFunction, DisplacementDim >::getEpsilon(), ProcessLib::getIntegrationPointKelvinVectorData(), MaterialLib::Solids::Ehlers::SolidEhlers< DisplacementDim >::getInternalVariables(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::getIntPtDarcyVelocity(), ProcessLib::Reflection::detail::GetFlattenedIPDataFromLocAsm< Dim, Accessor_IPDataVecInLocAsm, Accessor_CurrentLevelFromIPDataVecElement >::operator()(), ProcessLib::LIE::HydroMechanics::HydroMechanicsLocalAssemblerMatrix< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::postTimestepConcreteWithBlockVectors(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::updateConstitutiveRelations(), and MaterialPropertyLib::updateVariableArrayValues().

◆ kelvinVectorToSymmetricTensor() [2/4]

template<>
Eigen::Matrix< double, 6, 1 > MathLib::KelvinVector::kelvinVectorToSymmetricTensor ( Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > const & v)

Definition at line 144 of file KelvinVector.cpp.

146{
147 Eigen::Matrix<double, 6, 1> m;
148 m << v[0], v[1], v[2], v[3] / std::sqrt(2.), v[4] / std::sqrt(2.),
149 v[5] / std::sqrt(2.);
150 return m;
151}

References MathLib::v.

◆ kelvinVectorToSymmetricTensor() [3/4]

template<>
Eigen::Matrix< double, Eigen::Dynamic, 1, Eigen::ColMajor, Eigen::Dynamic, 1 > MathLib::KelvinVector::kelvinVectorToSymmetricTensor ( Eigen::Matrix< double, Eigen::Dynamic, 1, Eigen::ColMajor, Eigen::Dynamic, 1 > const & v)

Definition at line 155 of file KelvinVector.cpp.

161{
162 if (v.size() == 4)
163 {
165 }
166 if (v.size() == 6)
167 {
169 }
170 OGS_FATAL(
171 "Kelvin vector to tensor conversion expected an input vector of size 4 "
172 "or 6, but a vector of size {:d} was given.",
173 v.size());
174}
Eigen::Matrix< double, 4, 1 > kelvinVectorToSymmetricTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)

◆ kelvinVectorToSymmetricTensor() [4/4]

template<int KelvinVectorSize>
Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > MathLib::KelvinVector::kelvinVectorToSymmetricTensor ( Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > const & v)

Conversion of a Kelvin vector to a short vector representation of a symmetric 3x3 matrix.

In the 2D case the entries for the xx, yy, zz, and xy components are stored. In the 3D case the entries for the xx, yy, zz, xy, yz, and xz components in that particular order are stored.

This is opposite of the symmetricTensorToKelvinVector()

Only implementations for KelvinVectorSize 4 and 6, and dynamic size vectors are provided.

References MathLib::v.

◆ kelvinVectorToTensor() [1/4]

◆ kelvinVectorToTensor() [2/4]

template<>
Eigen::Matrix< double, 3, 3 > MathLib::KelvinVector::kelvinVectorToTensor ( Eigen::Matrix< double, 6, 1, Eigen::ColMajor, 6, 1 > const & v)

Definition at line 67 of file KelvinVector.cpp.

69{
70 Eigen::Matrix<double, 3, 3> m;
71 m << v[0], v[3] / std::sqrt(2.), v[5] / std::sqrt(2.), v[3] / std::sqrt(2.),
72 v[1], v[4] / std::sqrt(2.), v[5] / std::sqrt(2.), v[4] / std::sqrt(2.),
73 v[2];
74 return m;
75}

References MathLib::v.

◆ kelvinVectorToTensor() [3/4]

template<>
Eigen::Matrix< double, 3, 3 > MathLib::KelvinVector::kelvinVectorToTensor ( Eigen::Matrix< double, Eigen::Dynamic, 1, Eigen::ColMajor, Eigen::Dynamic, 1 > const & v)

Definition at line 78 of file KelvinVector.cpp.

84{
85 if (v.size() == 4)
86 {
87 Eigen::Matrix<double, 4, 1, Eigen::ColMajor, 4, 1> v4;
88 v4 << v[0], v[1], v[2], v[3];
89 return kelvinVectorToTensor(v4);
90 }
91 if (v.size() == 6)
92 {
93 Eigen::Matrix<double, 6, 1, Eigen::ColMajor, 6, 1> v6;
94 v6 << v[0], v[1], v[2], v[3], v[4], v[5];
95 return kelvinVectorToTensor(v6);
96 }
98 "Conversion of dynamic Kelvin vector of size {:d} to a tensor is not "
99 "possible. Kelvin vector must be of size 4 or 6.",
100 v.size());
101}
Eigen::Matrix< double, 3, 3 > kelvinVectorToTensor(Eigen::Matrix< double, 4, 1, Eigen::ColMajor, 4, 1 > const &v)

References kelvinVectorToTensor(), OGS_FATAL, and MathLib::v.

◆ kelvinVectorToTensor() [4/4]

template<int KelvinVectorSize>
Eigen::Matrix< double, 3, 3 > MathLib::KelvinVector::kelvinVectorToTensor ( Eigen::Matrix< double, KelvinVectorSize, 1, Eigen::ColMajor, KelvinVectorSize, 1 > const & v)

Conversion of a Kelvin vector to a 3x3 matrix Only implementations for KelvinVectorSize 4 and 6 are provided.

References MathLib::v.

◆ KMnan()

template<int DisplacementDim>
auto MathLib::KelvinVector::KMnan ( )
constexpr

Returns an expressions for a Kelvin matrix filled with NaN.

Definition at line 77 of file KelvinVector.h.

78{
80 std::numeric_limits<double>::quiet_NaN());
81}

◆ KMzero()

template<int DisplacementDim>
auto MathLib::KelvinVector::KMzero ( )
constexpr

Returns an expressions for a Kelvin matrix filled with zero.

Definition at line 62 of file KelvinVector.h.

◆ KVnan()

template<int DisplacementDim>
auto MathLib::KelvinVector::KVnan ( )
constexpr

Returns an expressions for a Kelvin vector filled with NaN.

Definition at line 69 of file KelvinVector.h.

70{
72 std::numeric_limits<double>::quiet_NaN());
73}
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType

◆ KVzero()

template<int DisplacementDim>
auto MathLib::KelvinVector::KVzero ( )
constexpr

Returns an expressions for a Kelvin vector filled with zero.

Definition at line 55 of file KelvinVector.h.

◆ liftVectorToKelvin()

template<int DisplacementDim>
Eigen::Matrix< double, DisplacementDim, kelvin_vector_dimensions(DisplacementDim)> MathLib::KelvinVector::liftVectorToKelvin ( Eigen::Matrix< double, DisplacementDim, 1 > const & v)

Lifting of a vector to a Kelvin matrix. \( a -> A\) s.t. \(k_{ij} a_{j} = A_[\alpha\beta} k_{\beta} \). Conversion for 2D -> 4D and 3D -> 6D are implemented.

References MathLib::v.

Referenced by ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobian().

◆ liftVectorToKelvin< 2 >()

template<>
Eigen::Matrix< double, 2, 4 > MathLib::KelvinVector::liftVectorToKelvin< 2 > ( Eigen::Matrix< double, 2, 1 > const & v)

Definition at line 155 of file KelvinVector.cpp.

179{
180 Eigen::Matrix<double, 2, 4> m;
181 m << v[0], 0, 0, v[1] / std::sqrt(2.), 0, v[1], 0, v[0] / std::sqrt(2.);
182 return m;
183}

◆ liftVectorToKelvin< 3 >()

template<>
Eigen::Matrix< double, 3, 6 > MathLib::KelvinVector::liftVectorToKelvin< 3 > ( Eigen::Matrix< double, 3, 1 > const & v)

Definition at line 155 of file KelvinVector.cpp.

188{
189 Eigen::Matrix<double, 3, 6> m;
190 m << v[0], 0, 0, v[1] / std::sqrt(2.), 0, v[2] / std::sqrt(2.), 0, v[1], 0,
191 v[0] / std::sqrt(2.), v[2] / std::sqrt(2.), 0, 0, 0, v[2], 0,
192 v[1] / std::sqrt(2.), v[0] / std::sqrt(2.);
193 return m;
194}

◆ reduceKelvinToVector()

template<int DisplacementDim>
Eigen::Matrix< double, DisplacementDim, 1 > MathLib::KelvinVector::reduceKelvinToVector ( Eigen::Matrix< double, DisplacementDim, kelvin_vector_dimensions(DisplacementDim)> const & m)

Reducing a Kelvin matrix to a vector. Conversion for 4D -> 2D and 6D -> 3D are implemented.

◆ reduceKelvinToVector< 2 >()

template<>
Eigen::Matrix< double, 2, 1 > MathLib::KelvinVector::reduceKelvinToVector< 2 > ( Eigen::Matrix< double, 2, 4 > const & m)

Definition at line 155 of file KelvinVector.cpp.

199{
200 assert(m(0, 1) == 0);
201 assert(m(0, 2) == 0);
202 assert(m(1, 0) == 0);
203 assert(m(1, 2) == 0);
204 Eigen::Matrix<double, 2, 1> v;
205 v << m(0, 0), m(1, 1);
206 return v;
207}

◆ reduceKelvinToVector< 3 >()

template<>
Eigen::Matrix< double, 3, 1 > MathLib::KelvinVector::reduceKelvinToVector< 3 > ( Eigen::Matrix< double, 3, 6 > const & m)

Definition at line 155 of file KelvinVector.cpp.

212{
213 assert(m(0, 1) == 0);
214 assert(m(0, 2) == 0);
215 assert(m(0, 4) == 0);
216 assert(m(1, 0) == 0);
217 assert(m(1, 2) == 0);
218 assert(m(1, 5) == 0);
219 assert(m(2, 0) == 0);
220 assert(m(2, 1) == 0);
221 assert(m(2, 3) == 0);
222 assert(std::abs(m(0, 3) - m(2, 4)) <
223 std::numeric_limits<double>::epsilon());
224 assert(std::abs(m(0, 5) - m(1, 4)) <
225 std::numeric_limits<double>::epsilon());
226 assert(std::abs(m(1, 3) - m(2, 5)) <
227 std::numeric_limits<double>::epsilon());
228 Eigen::Matrix<double, 3, 1> v;
229 v << m(0, 0), m(1, 1), m(2, 2);
230 return v;
231}

◆ symmetricTensorToKelvinVector() [1/2]

template<typename Derived>
Eigen::Matrix< double, Eigen::MatrixBase< Derived >::RowsAtCompileTime, 1 > MathLib::KelvinVector::symmetricTensorToKelvinVector ( Eigen::MatrixBase< Derived > const & v)

Conversion of a short vector representation of a symmetric 3x3 matrix to a Kelvin vector.

This is opposite of the kelvinVectorToSymmetricTensor()

Only implementations for KelvinVectorSize 4 and 6, and dynamic size vectors are provided.

Definition at line 199 of file KelvinVector.h.

200{
201 static_assert(
202 (Eigen::MatrixBase<Derived>::ColsAtCompileTime == 1) ||
203 (Eigen::MatrixBase<Derived>::ColsAtCompileTime == Eigen::Dynamic),
204 "KelvinVector must be a column vector");
205 if (v.cols() != 1)
206 {
207 OGS_FATAL(
208 "KelvinVector must be a column vector, but input has {:d} columns.",
209 v.cols());
210 }
211
212 Eigen::Matrix<double, Eigen::MatrixBase<Derived>::RowsAtCompileTime, 1>
213 result;
214 if (v.rows() == 4)
215 {
216 result.resize(4, 1);
217 result << v[0], v[1], v[2], v[3] * std::sqrt(2.);
218 }
219 else if (v.rows() == 6)
220 {
221 result.resize(6, 1);
222 result << v[0], v[1], v[2], v[3] * std::sqrt(2.), v[4] * std::sqrt(2.),
223 v[5] * std::sqrt(2.);
224 }
225 else
226 {
227 OGS_FATAL(
228 "Symmetric tensor to Kelvin vector conversion expected an input "
229 "vector of size 4 or 6, but a vector of size {:d} was given.",
230 v.size());
231 }
232 return result;
233}

References OGS_FATAL, and MathLib::v.

Referenced by ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::initializeConcrete(), ProcessLib::LargeDeformation::LargeDeformationLocalAssembler< ShapeFunction, DisplacementDim >::initializeConcrete(), ProcessLib::PhaseField::PhaseFieldLocalAssembler< ShapeFunction, DisplacementDim >::initializeConcrete(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::initializeConcrete(), ProcessLib::SmallDeformation::SmallDeformationLocalAssembler< ShapeFunction, DisplacementDim >::initializeConcrete(), ProcessLib::TH2M::TH2MLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::initializeConcrete(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::initializeConcrete(), ProcessLib::ThermoMechanics::ThermoMechanicsLocalAssembler< ShapeFunction, DisplacementDim >::initializeConcrete(), ProcessLib::ThermoRichardsMechanics::ThermoRichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunction, DisplacementDim, ConstitutiveTraits >::initializeConcrete(), ProcessLib::setIntegrationPointKelvinVectorData(), ProcessLib::Reflection::detail::setIPData(), and symmetricTensorToKelvinVector().

◆ symmetricTensorToKelvinVector() [2/2]

template<int DisplacementDim>
KelvinVectorType< DisplacementDim > MathLib::KelvinVector::symmetricTensorToKelvinVector ( std::vector< double > const & values)

Conversion of a short vector representation of a symmetric 3x3 matrix to a Kelvin vector.

This overload takes a std::vector for the tensor values.

Definition at line 240 of file KelvinVector.h.

242{
243 constexpr int kelvin_vector_size =
244 kelvin_vector_dimensions(DisplacementDim);
245
246 if (values.size() != kelvin_vector_size)
247 {
248 OGS_FATAL(
249 "Symmetric tensor to Kelvin vector conversion expected an input "
250 "vector of size {:d}, but a vector of size {:d} was given.",
251 kelvin_vector_size, values.size());
252 }
253
255 Eigen::Map<typename MathLib::KelvinVector::KelvinVectorType<
256 DisplacementDim> const>(
257 values.data(), kelvin_vector_dimensions(DisplacementDim), 1));
258}
Eigen::Matrix< double, Eigen::MatrixBase< Derived >::RowsAtCompileTime, 1 > symmetricTensorToKelvinVector(Eigen::MatrixBase< Derived > const &v)

References kelvin_vector_dimensions(), OGS_FATAL, and symmetricTensorToKelvinVector().

◆ tensorToKelvin()

template<int DisplacementDim>
KelvinVectorType< DisplacementDim > MathLib::KelvinVector::tensorToKelvin ( Eigen::Matrix< double, 3, 3 > const & m)

◆ tensorToKelvin< 2 >()

template<>
KelvinVectorType< 2 > MathLib::KelvinVector::tensorToKelvin< 2 > ( Eigen::Matrix< double, 3, 3 > const & m)

Definition at line 78 of file KelvinVector.cpp.

105{
106 assert(std::abs(m(0, 1) - m(1, 0)) <
107 std::numeric_limits<double>::epsilon());
108 assert(m(0, 2) == 0);
109 assert(m(1, 2) == 0);
110 assert(m(2, 0) == 0);
111 assert(m(2, 1) == 0);
112
114 v << m(0, 0), m(1, 1), m(2, 2), m(0, 1) * std::sqrt(2.);
115 return v;
116}

◆ tensorToKelvin< 3 >()

template<>
KelvinVectorType< 3 > MathLib::KelvinVector::tensorToKelvin< 3 > ( Eigen::Matrix< double, 3, 3 > const & m)

Definition at line 78 of file KelvinVector.cpp.

120{
121 assert(std::abs(m(0, 1) - m(1, 0)) <
122 std::numeric_limits<double>::epsilon());
123 assert(std::abs(m(1, 2) - m(2, 1)) <
124 std::numeric_limits<double>::epsilon());
125 assert(std::abs(m(0, 2) - m(2, 0)) <
126 std::numeric_limits<double>::epsilon());
127
129 v << m(0, 0), m(1, 1), m(2, 2), m(0, 1) * std::sqrt(2.),
130 m(1, 2) * std::sqrt(2.), m(0, 2) * std::sqrt(2.);
131 return v;
132}

Variable Documentation

◆ Invariants< KelvinVectorSize >::deviatoric_projection

template<int KelvinVectorSize>
const Eigen::Matrix<double, KelvinVectorSize, KelvinVectorSize> MathLib::KelvinVector::Invariants< KelvinVectorSize >::deviatoric_projection
Initial value:
=
Eigen::Matrix< double, KelvinVectorSize, KelvinVectorSize > initDeviatoricProjection()

Definition at line 115 of file KelvinVector-impl.h.

◆ Invariants< KelvinVectorSize >::identity2

template<int KelvinVectorSize>
const Eigen::Matrix<double, KelvinVectorSize, 1> MathLib::KelvinVector::Invariants< KelvinVectorSize >::identity2

◆ Invariants< KelvinVectorSize >::ones2

template<int KelvinVectorSize>
const Eigen::Matrix<double, KelvinVectorSize, 1> MathLib::KelvinVector::Invariants< KelvinVectorSize >::ones2
Initial value:

Definition at line 130 of file KelvinVector-impl.h.

◆ Invariants< KelvinVectorSize >::spherical_projection

template<int KelvinVectorSize>
Eigen::Matrix<double, KelvinVectorSize, KelvinVectorSize> const MathLib::KelvinVector::Invariants< KelvinVectorSize >::spherical_projection
Initial value:
=
Eigen::Matrix< double, KelvinVectorSize, KelvinVectorSize > initSphericalProjection()

Definition at line 120 of file KelvinVector-impl.h.