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