From 6e217f31c2207e172bead811406a0cc1fbd59842 Mon Sep 17 00:00:00 2001 From: Henry <Henry> Date: Sat, 28 Feb 2015 16:09:55 +0000 Subject: [PATCH] symmTensor: Add support for the innerSqr function which takes the inner product of a symmTensor with itself and returns a symmTensor --- applications/test/tensor/Test-tensor.C | 14 ++++++++++++- .../dimensionedSymmTensor.C | 13 +++++++++++- .../dimensionedSymmTensor.H | 4 ++-- .../DimensionedSymmTensorField.C | 5 +++-- .../DimensionedSymmTensorField.H | 5 +++-- .../symmTensorFieldField.C | 3 ++- .../symmTensorFieldField.H | 3 ++- .../Fields/symmTensorField/symmTensorField.C | 3 ++- .../Fields/symmTensorField/symmTensorField.H | 3 ++- .../GeometricSymmTensorField.C | 3 ++- .../GeometricSymmTensorField.H | 5 +++-- .../primitives/SymmTensor/SymmTensorI.H | 21 ++++++++++++++++++- .../primitives/SymmTensor2D/SymmTensor2DI.H | 16 +++++++++++++- 13 files changed, 81 insertions(+), 17 deletions(-) diff --git a/applications/test/tensor/Test-tensor.C b/applications/test/tensor/Test-tensor.C index e406ab7f3bf..28239c7488c 100644 --- a/applications/test/tensor/Test-tensor.C +++ b/applications/test/tensor/Test-tensor.C @@ -24,9 +24,11 @@ int main() tensor t6(1,0,-4,0,5,4,-4,4,3); //tensor t6(1,2,0,2,5,0,0,0,0); + Info<< "tensor " << t6 << endl; vector e = eigenValues(t6); Info<< "eigenvalues " << e << endl; + tensor ev = eigenVectors(t6); Info<< "eigenvectors " << ev << endl; @@ -58,6 +60,17 @@ int main() Info<< "Check for dot product of symmetric tensors " << (st1 & st2) << endl; + Info<< "Check for inner sqr of a symmetric tensor " + << innerSqr(st1) << " " << innerSqr(st1) - (st1 & st1) << endl; + + Info<< "Check for symmetric part of dot product of symmetric tensors " + << twoSymm(st1&st2) - ((st1&st2) + (st2&st1)) << endl; + + tensor sk1 = skew(t6); + tensor sk2 = skew(t7); + Info<< "Check for symmetric part of dot product of skew tensors " + << twoSymm(sk1&sk2) - ((sk1&sk2) - (sk2&sk1)) << endl; + vector v1(1, 2, 3); Info<< sqr(v1) << endl; @@ -184,6 +197,5 @@ int main() Debug(U_triple); */ - return 0; } diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.C b/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.C index 7007add44ee..0387358b850 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.C +++ b/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,6 +57,17 @@ dimensionedSymmTensor sqr(const dimensionedVector& dv) } +dimensionedSymmTensor innerSqr(const dimensionedSymmTensor& dt) +{ + return dimensionedSymmTensor + ( + "innerSqr("+dt.name()+')', + sqr(dt.dimensions()), + innerSqr(dt.value()) + ); +} + + dimensionedScalar tr(const dimensionedSymmTensor& dt) { return dimensionedScalar diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.H b/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.H index b4e94d43b9c..97171e57a52 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.H +++ b/src/OpenFOAM/dimensionedTypes/dimensionedSymmTensor/dimensionedSymmTensor.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -51,6 +51,7 @@ typedef dimensioned<symmTensor> dimensionedSymmTensor; // global functions dimensionedSymmTensor sqr(const dimensionedVector&); +dimensionedSymmTensor innerSqr(const dimensionedSymmTensor&); dimensionedScalar tr(const dimensionedSymmTensor&); dimensionedSymmTensor symm(const dimensionedSymmTensor&); @@ -77,4 +78,3 @@ dimensionedVector operator*(const dimensionedSymmTensor&); #endif // ************************************************************************* // - diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.C index f92b103ad15..6d830c5c8fe 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,8 @@ namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -UNARY_FUNCTION(symmTensor, vector, sqr, transform) +UNARY_FUNCTION(symmTensor, vector, sqr, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr, sqr) UNARY_FUNCTION(scalar, symmTensor, tr, transform) UNARY_FUNCTION(sphericalTensor, symmTensor, sph, transform) diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.H index b234a306b3c..01f8c2a0370 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedSymmTensorField/DimensionedSymmTensorField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,8 @@ namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -UNARY_FUNCTION(symmTensor, vector, sqr, transform) +UNARY_FUNCTION(symmTensor, vector, sqr, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr, sqr) UNARY_FUNCTION(scalar, symmTensor, tr, transform) UNARY_FUNCTION(sphericalTensor, symmTensor, sph, transform) diff --git a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C index 542493f1821..5649f0b8d80 100644 --- a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C +++ b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,6 +39,7 @@ namespace Foam // * * * * * * * * * * * * * * * global operators * * * * * * * * * * * * * // UNARY_FUNCTION(symmTensor, vector, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr) UNARY_FUNCTION(scalar, symmTensor, tr) UNARY_FUNCTION(sphericalTensor, symmTensor, sph) diff --git a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H index 56f5aac80bc..3e281013322 100644 --- a/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H +++ b/src/OpenFOAM/fields/FieldFields/symmTensorFieldField/symmTensorFieldField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,6 +49,7 @@ namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // UNARY_FUNCTION(symmTensor, vector, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr) UNARY_FUNCTION(scalar, symmTensor, tr) UNARY_FUNCTION(sphericalTensor, symmTensor, sph) diff --git a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C index fe5c4a3b79d..5aec204e242 100644 --- a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C +++ b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,6 +37,7 @@ namespace Foam // * * * * * * * * * * * * * * * global functions * * * * * * * * * * * * * // UNARY_FUNCTION(symmTensor, vector, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr) UNARY_FUNCTION(scalar, symmTensor, tr) UNARY_FUNCTION(sphericalTensor, symmTensor, sph) diff --git a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H index f3a8cabd235..65ce2be113c 100644 --- a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H +++ b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,6 +54,7 @@ typedef Field<symmTensor> symmTensorField; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // UNARY_FUNCTION(symmTensor, vector, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr) UNARY_FUNCTION(scalar, symmTensor, tr) UNARY_FUNCTION(sphericalTensor, symmTensor, sph) diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C index 1f5f054e923..d4470ce32f9 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,6 +37,7 @@ namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // UNARY_FUNCTION(symmTensor, vector, sqr, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr, sqr) UNARY_FUNCTION(scalar, symmTensor, tr, transform) UNARY_FUNCTION(sphericalTensor, symmTensor, sph, transform) diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H index 67e1c84d0ac..5706894bbeb 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricSymmTensorField/GeometricSymmTensorField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,8 @@ namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -UNARY_FUNCTION(symmTensor, vector, sqr, transform) +UNARY_FUNCTION(symmTensor, vector, sqr, sqr) +UNARY_FUNCTION(symmTensor, symmTensor, innerSqr, sqr) UNARY_FUNCTION(scalar, symmTensor, tr, transform) UNARY_FUNCTION(sphericalTensor, symmTensor, sph, transform) diff --git a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H index 19bcfb38421..26e849f720d 100644 --- a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H +++ b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -248,6 +248,25 @@ operator&(const Vector<Cmpt>& v, const SymmTensor<Cmpt>& st) } +//- Inner-sqr of a symmetric tensor +template<class Cmpt> +inline SymmTensor<Cmpt> +innerSqr(const SymmTensor<Cmpt>& st) +{ + return SymmTensor<Cmpt> + ( + st.xx()*st.xx() + st.xy()*st.xy() + st.xz()*st.xz(), + st.xx()*st.xy() + st.xy()*st.yy() + st.xz()*st.yz(), + st.xx()*st.xz() + st.xy()*st.yz() + st.xz()*st.zz(), + + st.xy()*st.xy() + st.yy()*st.yy() + st.yz()*st.yz(), + st.xy()*st.xz() + st.yy()*st.yz() + st.yz()*st.zz(), + + st.xz()*st.xz() + st.yz()*st.yz() + st.zz()*st.zz() + ); +} + + template<class Cmpt> inline Cmpt magSqr(const SymmTensor<Cmpt>& st) { diff --git a/src/OpenFOAM/primitives/SymmTensor2D/SymmTensor2DI.H b/src/OpenFOAM/primitives/SymmTensor2D/SymmTensor2DI.H index 458976b756a..1a139d8f64f 100644 --- a/src/OpenFOAM/primitives/SymmTensor2D/SymmTensor2DI.H +++ b/src/OpenFOAM/primitives/SymmTensor2D/SymmTensor2DI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -189,6 +189,20 @@ operator&(const Vector2D<Cmpt>& v, const SymmTensor2D<Cmpt>& st) } +//- Inner-sqr of a symmetric tensor +template<class Cmpt> +inline SymmTensor2D<Cmpt> +innerSqr(const SymmTensor2D<Cmpt>& st) +{ + return SymmTensor2D<Cmpt> + ( + st.xx()*st.xx() + st.xy()*st.xy(), + st.xx()*st.xy() + st.xy()*st.yy(), + st.xy()*st.xy() + st.yy()*st.yy() + ); +} + + template<class Cmpt> inline Cmpt magSqr(const SymmTensor2D<Cmpt>& st) { -- GitLab