From a78a46e7c2196ecfcff3296afd86fee9ac90a554 Mon Sep 17 00:00:00 2001 From: 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 efc7824dd6..6da37d33ff 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 4d1234dcb9..542493f182 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 da45faa82c..56f5aac80b 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 4d9e4b6dbc..fe5c4a3b79 100644 --- a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C +++ b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C @@ -164,6 +164,9 @@ tmp > transformFieldMask 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 b73e270e15..f3a8cabd23 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 d513167527..23b616aa79 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 c0a8b81cde..67e1c84d0a 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 5f9fbe9fe9..4566cc7550 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 operator*(const SymmTensor& st) //- Inner-product between two symmetric tensors template -inline SymmTensor +inline Tensor operator&(const SymmTensor& st1, const SymmTensor& st2) { - return SymmTensor + return Tensor ( 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 c3dd5228e0..a1554dc916 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 SymmTensor; + /*---------------------------------------------------------------------------*\ Class Tensor Declaration \*---------------------------------------------------------------------------*/ diff --git a/src/OpenFOAM/primitives/Tensor/TensorI.H b/src/OpenFOAM/primitives/Tensor/TensorI.H index cbfe6772e1..237bb6ceb3 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