From e578fa7b70dab9d3a96560fc04b519adc1c590e1 Mon Sep 17 00:00:00 2001
From: Wenqing Wang <wenqing.wang@ufz.de>
Date: Wed, 11 Nov 2020 13:37:18 +0100
Subject: [PATCH] [ConstitutiveLaw] added a member to get equivalent plastic
 strain increment

---
 MaterialLib/SolidModels/Ehlers.cpp      | 5 +++++
 MaterialLib/SolidModels/Ehlers.h        | 5 +++++
 MaterialLib/SolidModels/MechanicsBase.h | 1 +
 3 files changed, 11 insertions(+)

diff --git a/MaterialLib/SolidModels/Ehlers.cpp b/MaterialLib/SolidModels/Ehlers.cpp
index 22beb5e4f31..6441dfe1504 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 cba3c48143e..8cbc59da90f 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 52d66f4840f..936a372be4b 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
-- 
GitLab