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);