diff --git a/NonLinearSolver/materialLaw/STensorOperations.h b/NonLinearSolver/materialLaw/STensorOperations.h
index a4002ddba214355bfff1f5057f0d95f9a5e7396e..f91c90b91a30b111b95b3dfff5d87b63aa520e0f 100644
--- a/NonLinearSolver/materialLaw/STensorOperations.h
+++ b/NonLinearSolver/materialLaw/STensorOperations.h
@@ -386,6 +386,15 @@ inline double dot(const STensor3& a, const STensor3& b){
       }
     }
   };
+  inline void multSTensor3FirstTransposeAdd(const STensor3& a, const STensor3&b, STensor3& c){
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          c(i,j) +=a(k,i)*b(k,j);
+        }
+      }
+    }
+  };
 
   inline void multSTensor3STensor43(const STensor3& a, const STensor43& b, STensor3& c){
     for (int i=0; i<3; i++){
diff --git a/dG3D/benchmarks/nonLocalJ2/twoHole.py b/dG3D/benchmarks/nonLocalJ2/twoHole.py
index 01d9fca0b7e31075a1e41e5f257355d35d388906..a748aca91eed9ce2eaffd5ec094c9f4f1bc30adf 100644
--- a/dG3D/benchmarks/nonLocalJ2/twoHole.py
+++ b/dG3D/benchmarks/nonLocalJ2/twoHole.py
@@ -73,6 +73,7 @@ mysolver.displacementBC("Face",12,1,0.)
 mysolver.displacementBC("Face",13,1,1e-3)
 
 
+mysolver.internalPointBuildView("eq strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1)
 mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
 mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
 mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
diff --git a/dG3D/src/dG3DIPVariable.cpp b/dG3D/src/dG3DIPVariable.cpp
index 0700f115401cfb15e41b56562caa35fc02af89c5..a37531078274c7560911fa0bd965064dbe558b4f 100644
--- a/dG3D/src/dG3DIPVariable.cpp
+++ b/dG3D/src/dG3DIPVariable.cpp
@@ -481,6 +481,15 @@ double dG3DIPVariable::get(const int comp) const
     if (this->isDeleted()) return 1.;
     else return 0.;
   }
+  else if (comp == IPField::GL_EQUIVALENT_STRAIN){
+    static STensor3 E, devE;
+    static double trE;
+    STensorOperation::diag(E,-1.);
+    STensorOperation::multSTensor3FirstTransposeAdd(F,F,E);
+    E *= (0.5);
+    STensorOperation::decomposeDevTr(E,devE,trE);
+    return sqrt(2.*devE.dotprod()/3.);
+  }
   else if (comp == IPField::GL_XX){
     static STensor3 FTF;
     STensorOperation::multSTensor3FirstTranspose(F,F,FTF);