diff --git a/applications/test/tensor/Test-tensor.C b/applications/test/tensor/Test-tensor.C index efc7824dd6577151973afda3a65e028ae323fb3e..6da37d33fffad0bd9cbcb01a64bc64b1b384ec89 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 4d1234dcb9762f572e507b0d37815fa577ec00c7..542493f1821818e11a35d28dda688f2e914d4587 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 da45faa82c10d4e2db4a7f6e795e62df0c52107b..56f5aac80bcfbcf73d3991a2068633e108c27987 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 4d9e4b6dbcab805efea5895272141d6bb301cbfc..fe5c4a3b79d251888b474fa33944a2dceb8eb3a9 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 b73e270e15c8c638501343b118f1e41789ad229c..f3a8cabd23569bc140fd8de82cdb609be093ad36 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 d5131675270475b3335dd5712f7ebb13c5e8d3de..23b616aa7916bf11f41c4404863aedb9eece0162 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 c0a8b81cde8174c185e63641a1799622c2763f46..67e1c84d0acce2f7b52c972c97e96ee8a55bff6f 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 5f9fbe9fe9483f799fdfb2f4400dedce0343d102..4566cc7550897d5625a52ca7c12c73c1f7425a13 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 c3dd5228e021a66dada1fd1c8c5743d57fbc92c1..a1554dc916cfc7ea8225ce5788d09cd67ece0f99 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 cbfe6772e154f68f9d92e226b6167fe93d8a05d0..237bb6ceb393057cfd9657252d55a08f6facd25b 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