From a78a46e7c2196ecfcff3296afd86fee9ac90a554 Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Wed, 28 Dec 2011 17:46:51 +0000
Subject: [PATCH] symmTensor: Corrected symmTensor & symmTensor dot-product

---
 applications/test/tensor/Test-tensor.C                    | 4 ++++
 .../symmTensorFieldField/symmTensorFieldField.C           | 3 +++
 .../symmTensorFieldField/symmTensorFieldField.H           | 3 +++
 .../fields/Fields/symmTensorField/symmTensorField.C       | 3 +++
 .../fields/Fields/symmTensorField/symmTensorField.H       | 4 ++++
 .../GeometricSymmTensorField/GeometricSymmTensorField.C   | 3 +++
 .../GeometricSymmTensorField/GeometricSymmTensorField.H   | 4 ++++
 src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H          | 8 ++++++--
 src/OpenFOAM/primitives/Tensor/Tensor.H                   | 4 +++-
 src/OpenFOAM/primitives/Tensor/TensorI.H                  | 2 ++
 10 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/applications/test/tensor/Test-tensor.C b/applications/test/tensor/Test-tensor.C
index efc7824dd65..6da37d33fff 100644
--- a/applications/test/tensor/Test-tensor.C
+++ b/applications/test/tensor/Test-tensor.C
@@ -50,10 +50,14 @@ int main()
         << (t1 & t7 & t1.T()) << " " << transform(t1, t7) << endl;
 
     symmTensor st1(1, 2, 3, 4, 5, 6);
+    symmTensor st2(7, 8, 9, 10, 11, 12);
 
     Info<< "Check symmetric transformation "
         << transform(t1, st1) << endl;
 
+    Info<< "Check for dot product of symmetric tensors "
+        << (st1 & st2) << endl;
+
     vector v1(1, 2, 3);
 
     Info<< sqr(v1) << endl;
diff --git a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C
index 4d1234dcb97..542493f1821 100644
--- a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C
+++ b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C
@@ -55,6 +55,9 @@ UNARY_FUNCTION(symmTensor, symmTensor, inv)
 
 UNARY_OPERATOR(vector, symmTensor, *, hdual)
 
+BINARY_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+BINARY_TYPE_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H
index da45faa82c1..56f5aac80bc 100644
--- a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H
+++ b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H
@@ -65,6 +65,9 @@ UNARY_FUNCTION(symmTensor, symmTensor, inv)
 
 UNARY_OPERATOR(vector, symmTensor, *, hdual)
 
+BINARY_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+BINARY_TYPE_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C
index 4d9e4b6dbca..fe5c4a3b79d 100644
--- a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C
+++ b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C
@@ -164,6 +164,9 @@ tmp<Field<symmTensor> > transformFieldMask<symmTensor>
 
 UNARY_OPERATOR(vector, symmTensor, *, hdual)
 
+BINARY_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+BINARY_TYPE_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H
index b73e270e15c..f3a8cabd235 100644
--- a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H
+++ b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H
@@ -39,6 +39,7 @@ SourceFiles
 #include "vectorField.H"
 #include "sphericalTensor.H"
 #include "symmTensor.H"
+#include "tensor.H"
 
 #define TEMPLATE
 #include "FieldFunctionsM.H"
@@ -69,6 +70,9 @@ UNARY_FUNCTION(symmTensor, symmTensor, inv)
 
 UNARY_OPERATOR(vector, symmTensor, *, hdual)
 
+BINARY_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+BINARY_TYPE_OPERATOR(tensor, symmTensor, symmTensor, &, dot)
+
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C
index d5131675270..23b616aa791 100644
--- a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C
+++ b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C
@@ -53,6 +53,9 @@ UNARY_FUNCTION(symmTensor, symmTensor, inv, inv)
 
 UNARY_OPERATOR(vector, symmTensor, *, hdual, transform)
 
+BINARY_OPERATOR(tensor, symmTensor, symmTensor, &, '&', dot)
+BINARY_TYPE_OPERATOR(tensor, symmTensor, symmTensor, &, '&', dot)
+
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H
index c0a8b81cde8..67e1c84d0ac 100644
--- a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H
+++ b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H
@@ -65,6 +65,10 @@ UNARY_FUNCTION(symmTensor, symmTensor, inv, inv)
 
 UNARY_OPERATOR(vector, symmTensor, *, hdual, transform)
 
+BINARY_OPERATOR(tensor, symmTensor, symmTensor, &, '&', dot)
+BINARY_TYPE_OPERATOR(tensor, symmTensor, symmTensor, &, '&', dot)
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace Foam
diff --git a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H
index 5f9fbe9fe94..4566cc75508 100644
--- a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H
+++ b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H
@@ -24,6 +24,7 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "Vector.H"
+#include "Tensor.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -184,18 +185,21 @@ inline Vector<Cmpt> operator*(const SymmTensor<Cmpt>& st)
 
 //- Inner-product between two symmetric tensors
 template <class Cmpt>
-inline SymmTensor<Cmpt>
+inline Tensor<Cmpt>
 operator&(const SymmTensor<Cmpt>& st1, const SymmTensor<Cmpt>& st2)
 {
-    return SymmTensor<Cmpt>
+    return Tensor<Cmpt>
     (
         st1.xx()*st2.xx() + st1.xy()*st2.xy() + st1.xz()*st2.xz(),
         st1.xx()*st2.xy() + st1.xy()*st2.yy() + st1.xz()*st2.yz(),
         st1.xx()*st2.xz() + st1.xy()*st2.yz() + st1.xz()*st2.zz(),
 
+        st1.xy()*st2.xx() + st1.yy()*st2.xy() + st1.yz()*st2.xz(),
         st1.xy()*st2.xy() + st1.yy()*st2.yy() + st1.yz()*st2.yz(),
         st1.xy()*st2.xz() + st1.yy()*st2.yz() + st1.yz()*st2.zz(),
 
+        st1.xz()*st2.xx() + st1.yz()*st2.xy() + st1.zz()*st2.xz(),
+        st1.xz()*st2.xy() + st1.yz()*st2.yy() + st1.zz()*st2.yz(),
         st1.xz()*st2.xz() + st1.yz()*st2.yz() + st1.zz()*st2.zz()
     );
 }
diff --git a/src/OpenFOAM/primitives/Tensor/Tensor.H b/src/OpenFOAM/primitives/Tensor/Tensor.H
index c3dd5228e02..a1554dc916c 100644
--- a/src/OpenFOAM/primitives/Tensor/Tensor.H
+++ b/src/OpenFOAM/primitives/Tensor/Tensor.H
@@ -40,13 +40,15 @@ SourceFiles
 
 #include "Vector.H"
 #include "SphericalTensor.H"
-#include "SymmTensor.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
 
+template<class Cmpt>
+class SymmTensor;
+
 /*---------------------------------------------------------------------------*\
                            Class Tensor Declaration
 \*---------------------------------------------------------------------------*/
diff --git a/src/OpenFOAM/primitives/Tensor/TensorI.H b/src/OpenFOAM/primitives/Tensor/TensorI.H
index cbfe6772e15..237bb6ceb39 100644
--- a/src/OpenFOAM/primitives/Tensor/TensorI.H
+++ b/src/OpenFOAM/primitives/Tensor/TensorI.H
@@ -23,6 +23,8 @@ License
 
 \*---------------------------------------------------------------------------*/
 
+#include "SymmTensor.H"
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
-- 
GitLab