From 56059e7fb9d36f728713c450fe3e565acec61f53 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Thu, 21 Apr 2016 21:07:39 +0100
Subject: [PATCH] Tensor, SymmTensor: Simplified invariantII

Now the calculation of the 2nd-invariant is more efficient and
accumulates less round-off error.
---
 src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H | 9 ++-------
 src/OpenFOAM/primitives/Tensor/TensorI.H         | 9 ++-------
 2 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H
index b40f40859f..be703817a5 100644
--- a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H
+++ b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H
@@ -404,13 +404,8 @@ inline Cmpt invariantII(const SymmTensor<Cmpt>& st)
 {
     return
     (
-        0.5*sqr(tr(st))
-      - 0.5*
-        (
-           st.xx()*st.xx() + st.xy()*st.xy() + st.xz()*st.xz()
-         + st.xy()*st.xy() + st.yy()*st.yy() + st.yz()*st.yz()
-         + st.xz()*st.xz() + st.yz()*st.yz() + st.zz()*st.zz()
-        )
+        st.xx()*st.yy() + st.yy()*st.zz() + st.xx()*st.zz()
+      - sqr(st.xy()) - sqr(st.yz()) - sqr(st.xz())
     );
 }
 
diff --git a/src/OpenFOAM/primitives/Tensor/TensorI.H b/src/OpenFOAM/primitives/Tensor/TensorI.H
index b9e68a3b0d..a20ba8773e 100644
--- a/src/OpenFOAM/primitives/Tensor/TensorI.H
+++ b/src/OpenFOAM/primitives/Tensor/TensorI.H
@@ -659,13 +659,8 @@ inline Cmpt invariantII(const Tensor<Cmpt>& t)
 {
     return
     (
-        0.5*sqr(tr(t))
-      - 0.5*
-        (
-           t.xx()*t.xx() + t.xy()*t.xy() + t.xz()*t.xz()
-         + t.yx()*t.yx() + t.yy()*t.yy() + t.yz()*t.yz()
-         + t.zx()*t.zx() + t.zy()*t.zy() + t.zz()*t.zz()
-        )
+        t.xx()*t.yy() + t.yy()*t.zz() + t.xx()*t.zz()
+      - t.xy()*t.yx() - t.yz()*t.zy() - t.xz()*t.zx()
     );
 }
 
-- 
GitLab