diff --git a/MaterialLib/SolidModels/Ehlers.cpp b/MaterialLib/SolidModels/Ehlers.cpp index 22beb5e4f317ad9079d6795e5dc8dacd4452dfd1..6441dfe15046db80e7e73d61ce39946111a7e52b 100644 --- a/MaterialLib/SolidModels/Ehlers.cpp +++ b/MaterialLib/SolidModels/Ehlers.cpp @@ -46,6 +46,11 @@ namespace Solids { namespace Ehlers { +template <int DisplacementDim> +double StateVariables<DisplacementDim>::getEquivalentPlasticStrain() const +{ + return std::sqrt(2.0 / 3.0 * Invariants::FrobeniusNorm(eps_p.D.eval())); +} /// Special product of \c v with itself: \f$v \odot v\f$. /// The tensor \c v is given in Kelvin mapping. diff --git a/MaterialLib/SolidModels/Ehlers.h b/MaterialLib/SolidModels/Ehlers.h index cba3c48143eba92cecdb70184038630ab65e1d9f..8cbc59da90f9530aeba3fe3ec99614085cd0f240 100644 --- a/MaterialLib/SolidModels/Ehlers.h +++ b/MaterialLib/SolidModels/Ehlers.h @@ -232,6 +232,11 @@ struct StateVariables damage_prev = damage; } + double getEquivalentPlasticStrain() const override; + + static int const KelvinVectorSize = + MathLib::KelvinVector::KelvinVectorDimensions<DisplacementDim>::value; + using Invariants = MathLib::KelvinVector::Invariants<KelvinVectorSize>; using KelvinVector = MathLib::KelvinVector::KelvinVectorType<DisplacementDim>; diff --git a/MaterialLib/SolidModels/MechanicsBase.h b/MaterialLib/SolidModels/MechanicsBase.h index 52d66f4840f681e49cc0da4bbfcfc4c04442e3cf..936a372be4b64c321ec3946c478045760c9e87d9 100644 --- a/MaterialLib/SolidModels/MechanicsBase.h +++ b/MaterialLib/SolidModels/MechanicsBase.h @@ -59,6 +59,7 @@ struct MechanicsBase { virtual ~MaterialStateVariables() = default; virtual void pushBackState(){}; + virtual double getEquivalentPlasticStrain() const { return 0.0; } }; /// Polymorphic creator for MaterialStateVariables objects specific for a