From 2ea26ffadf61b04fb2e610edca5048e58379d26b Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 1 Feb 2023 13:02:32 +0100 Subject: [PATCH] ENH: remove specialisations for scalar symmetry/transform patch fields - previously used template specialisations, but now simply check pTrait::rank == 0. This aids for future extension to support other scalar-like fields. --- .../basicSymmetryPointPatchField.H | 5 +- .../basicSymmetry/basicSymmetryFaPatchField.C | 44 ++++++++++++------ .../basicSymmetry/basicSymmetryFaPatchField.H | 19 +------- .../basicSymmetryFaPatchFields.C | 24 ---------- .../basic/transform/transformFaPatchField.C | 12 +++++ .../basic/transform/transformFaPatchField.H | 12 ++--- .../basic/transform/transformFaPatchFields.C | 10 ---- .../zeroGradient/zeroGradientFaPatchField.H | 5 +- .../constraint/wedge/wedgeFaPatchField.C | 43 +++++++++++------ .../constraint/wedge/wedgeFaPatchField.H | 12 ----- .../constraint/wedge/wedgeFaPatchFields.C | 21 --------- .../basicSymmetry/basicSymmetryFvPatchField.C | 39 +++++++++++----- .../basicSymmetry/basicSymmetryFvPatchField.H | 17 +------ .../basicSymmetryFvPatchFields.C | 26 +---------- .../basic/transform/transformFvPatchField.C | 12 +++++ .../basic/transform/transformFvPatchField.H | 15 +----- .../basic/transform/transformFvPatchFields.C | 21 --------- .../zeroGradient/zeroGradientFvPatchField.C | 20 ++------ .../zeroGradient/zeroGradientFvPatchField.H | 5 +- .../symmetryPlane/symmetryPlaneFvPatchField.C | 46 +++++++++++-------- .../symmetryPlane/symmetryPlaneFvPatchField.H | 12 ----- .../symmetryPlaneFvPatchFields.C | 23 ---------- .../constraint/wedge/wedgeFvPatchField.C | 43 ++++++++++++----- .../constraint/wedge/wedgeFvPatchField.H | 17 +------ .../constraint/wedge/wedgeFvPatchFields.C | 25 ---------- 25 files changed, 190 insertions(+), 338 deletions(-) diff --git a/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H index 9377eb2e07..206167236c 100644 --- a/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H +++ b/src/OpenFOAM/fields/pointPatchFields/basic/basicSymmetry/basicSymmetryPointPatchField.H @@ -34,8 +34,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef basicSymmetryPointPatchField_H -#define basicSymmetryPointPatchField_H +#ifndef Foam_basicSymmetryPointPatchField_H +#define Foam_basicSymmetryPointPatchField_H #include "pointPatchField.H" #include "symmetryPointPatch.H" @@ -54,7 +54,6 @@ class basicSymmetryPointPatchField : public pointPatchField { - public: // Constructors diff --git a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.C b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.C index d828c81eb8..b75c9fed97 100644 --- a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.C +++ b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016-2017 Wikki Ltd + Copyright (C) 2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -95,13 +96,23 @@ template Foam::tmp> Foam::basicSymmetryFaPatchField::snGrad() const { - const vectorField nHat(this->patch().edgeNormals()); + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), Zero); + } + else + { + symmTensorField rot(I - 2.0*sqr(this->patch().edgeNormals())); - return - ( - transform(I - 2.0*sqr(nHat), this->patchInternalField()) - - this->patchInternalField() - )*(this->patch().deltaCoeffs()/2.0); + Field pif(this->patchInternalField()); + + return + ( + (transform(rot, pif) - pif) + * (this->patch().deltaCoeffs()/2.0) + ); + } } @@ -113,14 +124,19 @@ void Foam::basicSymmetryFaPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - const vectorField nHat(this->patch().edgeNormals()); - Field::operator= - ( - ( - this->patchInternalField() - + transform(I - 2.0*sqr(nHat), this->patchInternalField()) - )/2.0 - ); + if (pTraits::rank == 0) + { + // Transform-invariant types + Field::operator=(this->patchInternalField()); + } + else + { + symmTensorField rot(I - 2.0*sqr(this->patch().edgeNormals())); + + Field pif(this->patchInternalField()); + + Field::operator=((pif + transform(rot, pif))/2.0); + } transformFaPatchField::evaluate(); } diff --git a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H index 8e29f1b3bf..1662d7844c 100644 --- a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H +++ b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H @@ -38,8 +38,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef basicSymmetryFaPatchField_H -#define basicSymmetryFaPatchField_H +#ifndef Foam_basicSymmetryFaPatchField_H +#define Foam_basicSymmetryFaPatchField_H #include "transformFaPatchField.H" #include "symmetryFaPatch.H" @@ -58,7 +58,6 @@ class basicSymmetryFaPatchField : public transformFaPatchField { - public: // Constructors @@ -132,8 +131,6 @@ public: virtual tmp> snGrad() const; //- Evaluate the patch field - // Default argument needed to allow call in constructors - // HJ, 30/Jun/2009 virtual void evaluate ( const Pstream::commsTypes commsType = Pstream::commsTypes::blocking @@ -144,18 +141,6 @@ public: }; -// * * * * * * * * * * * Template Specialisations * * * * * * * * * * * * * // - -template<> -tmp basicSymmetryFaPatchField::snGrad() const; - -template<> -void basicSymmetryFaPatchField::evaluate -( - const Pstream::commsTypes commsType -); - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchFields.C b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchFields.C index 5eb0ce55dd..1624a1f9fc 100644 --- a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchFields.C +++ b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchFields.C @@ -32,28 +32,4 @@ License // * * * * * * * * * * * * * * * Specialisations * * * * * * * * * * * * * * // -template<> -Foam::tmp -Foam::basicSymmetryFaPatchField::snGrad() const -{ - return tmp::New(size(), Zero); -} - - -template<> -void Foam::basicSymmetryFaPatchField::evaluate -( - const Pstream::commsTypes -) -{ - if (!updated()) - { - updateCoeffs(); - } - - scalarField::operator=(patchInternalField()); - transformFaPatchField::evaluate(); -} - - // ************************************************************************* // diff --git a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.C b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.C index a5da3c9ef6..b5385e4953 100644 --- a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.C +++ b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.C @@ -86,6 +86,12 @@ Foam::transformFaPatchField::valueInternalCoeffs const tmp& ) const { + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), pTraits::one); + } + return pTraits::one - snGradTransformDiag(); } @@ -111,6 +117,12 @@ template Foam::tmp> Foam::transformFaPatchField::gradientInternalCoeffs() const { + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), Zero); + } + return -this->patch().deltaCoeffs()*snGradTransformDiag(); } diff --git a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H index 7915ed2fc1..005bb4cce5 100644 --- a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H +++ b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H @@ -37,8 +37,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef transformFaPatchField_H -#define transformFaPatchField_H +#ifndef Foam_transformFaPatchField_H +#define Foam_transformFaPatchField_H #include "faPatchField.H" #include "areaFaMesh.H" @@ -142,18 +142,12 @@ public: virtual tmp> gradientBoundaryCoeffs() const; - // Member operators + // Member Operators virtual void operator=(const faPatchField&); }; -// * * * * * * * * * * * Template Specialisations * * * * * * * * * * * * * // - -template<> -tmp transformFaPatchField::gradientInternalCoeffs() const; - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchFields.C b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchFields.C index 80e8e0bec1..910d94ecec 100644 --- a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchFields.C +++ b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchFields.C @@ -37,14 +37,4 @@ namespace Foam } -// * * * * * * * * * * * * * * * Specialisations * * * * * * * * * * * * * * // - -template<> -Foam::tmp -Foam::transformFaPatchField::gradientInternalCoeffs() const -{ - return tmp::New(size(), Zero); -} - - // ************************************************************************* // diff --git a/src/finiteArea/fields/faPatchFields/basic/zeroGradient/zeroGradientFaPatchField.H b/src/finiteArea/fields/faPatchFields/basic/zeroGradient/zeroGradientFaPatchField.H index 3a0c3ef6cc..2995d538de 100644 --- a/src/finiteArea/fields/faPatchFields/basic/zeroGradient/zeroGradientFaPatchField.H +++ b/src/finiteArea/fields/faPatchFields/basic/zeroGradient/zeroGradientFaPatchField.H @@ -132,10 +132,7 @@ public: //- Return gradient at boundary virtual tmp> snGrad() const { - return tmp> - ( - new Field(this->size(), Zero) - ); + return tmp>::New(this->size(), Zero); } //- Evaluate the patch field diff --git a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.C b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.C index e9bd75e3ff..053738fdd9 100644 --- a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.C +++ b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016-2017 Wikki Ltd + Copyright (C) 2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -105,13 +106,21 @@ Foam::wedgeFaPatchField::wedgeFaPatchField template Foam::tmp> Foam::wedgeFaPatchField::snGrad() const { - const Field pif (this->patchInternalField()); + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), Zero); + } + else + { + const Field pif(this->patchInternalField()); - return - ( - transform(refCast(this->patch()).faceT(), pif) - - pif - )*(0.5*this->patch().deltaCoeffs()); + return + ( + transform(refCast(this->patch()).faceT(), pif) + - pif + )*(0.5*this->patch().deltaCoeffs()); + } } @@ -123,14 +132,22 @@ void Foam::wedgeFaPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - faPatchField::operator== - ( - transform + if (pTraits::rank == 0) + { + // Transform-invariant types + Field::operator==(this->patchInternalField()); + } + else + { + Field::operator== ( - refCast(this->patch()).edgeT(), - this->patchInternalField() - ) - ); + transform + ( + refCast(this->patch()).edgeT(), + this->patchInternalField() + ) + ); + } } diff --git a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H index f1933ec1ab..966971eee8 100644 --- a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H +++ b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H @@ -139,18 +139,6 @@ public: }; -// * * * * * * * * * * * Template Specialisations * * * * * * * * * * * * * // - -template<> -tmp wedgeFaPatchField::snGrad() const; - -template<> -void wedgeFaPatchField::evaluate -( - const Pstream::commsTypes commsType -); - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchFields.C b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchFields.C index 15a0ff125f..b3a9d93562 100644 --- a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchFields.C +++ b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchFields.C @@ -36,26 +36,5 @@ namespace Foam makeFaPatchFields(wedge); } -// * * * * * * * * * * * * * * * Specialisations * * * * * * * * * * * * * * // - -template<> -Foam::tmp -Foam::wedgeFaPatchField::snGrad() const -{ - return tmp::New(size(), Zero); -} - - -template<> -void Foam::wedgeFaPatchField::evaluate(const Pstream::commsTypes) -{ - if (!updated()) - { - updateCoeffs(); - } - - this->operator==(patchInternalField()); -} - // ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.C index 34b93a99f4..a8a022e251 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation + Copyright (C) 2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,7 +29,6 @@ License #include "basicSymmetryFvPatchField.H" #include "symmTransformField.H" - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template @@ -96,13 +96,23 @@ template Foam::tmp> Foam::basicSymmetryFvPatchField::snGrad() const { - tmp nHat = this->patch().nf(); + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), Zero); + } + else + { + symmTensorField rot(I - 2.0*sqr(this->patch().nf())); - const Field iF(this->patchInternalField()); + Field pif(this->patchInternalField()); - return - (transform(I - 2.0*sqr(nHat), iF) - iF) - *(this->patch().deltaCoeffs()/2.0); + return + ( + (transform(rot, pif) - pif) + * (this->patch().deltaCoeffs()/2.0) + ); + } } @@ -114,14 +124,19 @@ void Foam::basicSymmetryFvPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - tmp nHat = this->patch().nf(); + if (pTraits::rank == 0) + { + // Transform-invariant types + Field::operator=(this->patchInternalField()); + } + else + { + symmTensorField rot(I - 2.0*sqr(this->patch().nf())); - const Field iF(this->patchInternalField()); + Field pif(this->patchInternalField()); - Field::operator= - ( - (iF + transform(I - 2.0*sqr(nHat), iF))/2.0 - ); + Field::operator=((pif + transform(rot, pif))/2.0); + } transformFvPatchField::evaluate(); } diff --git a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H index 8ffea2a438..1a4ddef054 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H @@ -37,8 +37,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef basicSymmetryFvPatchField_H -#define basicSymmetryFvPatchField_H +#ifndef Foam_basicSymmetryFvPatchField_H +#define Foam_basicSymmetryFvPatchField_H #include "transformFvPatchField.H" #include "symmetryFvPatch.H" @@ -57,7 +57,6 @@ class basicSymmetryFvPatchField : public transformFvPatchField { - public: // Constructors @@ -138,18 +137,6 @@ public: }; -// * * * * * * * * * * * Template Specialisations * * * * * * * * * * * * * // - -template<> -tmp basicSymmetryFvPatchField::snGrad() const; - -template<> -void basicSymmetryFvPatchField::evaluate -( - const Pstream::commsTypes commsType -); - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchFields.C index 484a7354f5..42499dd194 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchFields.C @@ -25,35 +25,13 @@ License \*---------------------------------------------------------------------------*/ -#include "basicSymmetryFvPatchField.H" +#include "basicSymmetryFvPatchFields.H" +#include "addToRunTimeSelectionTable.H" #include "volFields.H" // No run-time selection // * * * * * * * * * * * * * * * Specialisations * * * * * * * * * * * * * * // -template<> -Foam::tmp -Foam::basicSymmetryFvPatchField::snGrad() const -{ - return tmp::New(size(), Zero); -} - - -template<> -void Foam::basicSymmetryFvPatchField::evaluate -( - const Pstream::commsTypes -) -{ - if (!updated()) - { - updateCoeffs(); - } - - scalarField::operator=(patchInternalField()); - transformFvPatchField::evaluate(); -} - // ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.C index ed48ae1f97..bb81b8aeb9 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.C @@ -97,6 +97,12 @@ Foam::transformFvPatchField::valueInternalCoeffs const tmp& ) const { + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), pTraits::one); + } + return pTraits::one - snGradTransformDiag(); } @@ -122,6 +128,12 @@ template Foam::tmp> Foam::transformFvPatchField::gradientInternalCoeffs() const { + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), Zero); + } + return -this->patch().deltaCoeffs()*snGradTransformDiag(); } diff --git a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H index 4bb2e5016f..3a5871fdae 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H @@ -56,7 +56,6 @@ class transformFvPatchField : public fvPatchField { - public: //- Runtime type information @@ -156,24 +155,12 @@ public: virtual tmp> gradientBoundaryCoeffs() const; - // Member operators + // Member Operators virtual void operator=(const fvPatchField&); }; -// * * * * * * * * * * * Template Specialisations * * * * * * * * * * * * * // - -template<> -tmp transformFvPatchField::valueInternalCoeffs -( - const tmp& -) const; - -template<> -tmp transformFvPatchField::gradientInternalCoeffs() const; - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchFields.C index ffb781a7f1..2f88c5f87f 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchFields.C @@ -37,25 +37,4 @@ namespace Foam } -// * * * * * * * * * * * * * * * Specialisations * * * * * * * * * * * * * * // - -template<> -Foam::tmp -Foam::transformFvPatchField::valueInternalCoeffs -( - const tmp& -) const -{ - return tmp::New(size(), 1.0); -} - - -template<> -Foam::tmp -Foam::transformFvPatchField::gradientInternalCoeffs() const -{ - return tmp::New(size(), Zero); -} - - // ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.C index b7ee3544fe..2d5ead7f64 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.C @@ -121,10 +121,7 @@ Foam::zeroGradientFvPatchField::valueInternalCoeffs const tmp& ) const { - return tmp> - ( - new Field(this->size(), pTraits::one) - ); + return tmp>::New(this->size(), pTraits::one); } @@ -135,10 +132,7 @@ Foam::zeroGradientFvPatchField::valueBoundaryCoeffs const tmp& ) const { - return tmp> - ( - new Field(this->size(), Zero) - ); + return tmp>::New(this->size(), Zero); } @@ -146,10 +140,7 @@ template Foam::tmp> Foam::zeroGradientFvPatchField::gradientInternalCoeffs() const { - return tmp> - ( - new Field(this->size(), Zero) - ); + return tmp>::New(this->size(), Zero); } @@ -157,10 +148,7 @@ template Foam::tmp> Foam::zeroGradientFvPatchField::gradientBoundaryCoeffs() const { - return tmp> - ( - new Field(this->size(), Zero) - ); + return tmp>::New(this->size(), Zero); } diff --git a/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.H index 05cc20e4b5..d1a885d5cd 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/basic/zeroGradient/zeroGradientFvPatchField.H @@ -142,10 +142,7 @@ public: //- Return gradient at boundary virtual tmp> snGrad() const { - return tmp> - ( - new Field(this->size(), Zero) - ); + return tmp>::New(this->size(), Zero); } //- Evaluate the patch field diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.C index b1e2cf2fd9..607ce62794 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2013-2016 OpenFOAM Foundation + Copyright (C) 2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,7 +28,6 @@ License #include "symmetryPlaneFvPatchField.H" - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template @@ -119,13 +119,23 @@ template Foam::tmp> Foam::symmetryPlaneFvPatchField::snGrad() const { - vector nHat(symmetryPlanePatch_.n()); + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), Zero); + } + else + { + symmTensor rot(I - 2.0*sqr(symmetryPlanePatch_.n())); - const Field iF(this->patchInternalField()); + Field pif(this->patchInternalField()); - return - (transform(I - 2.0*sqr(nHat), iF) - iF) - *(this->patch().deltaCoeffs()/2.0); + return + ( + (transform(rot, pif) - pif) + * (this->patch().deltaCoeffs()/2.0) + ); + } } @@ -137,14 +147,19 @@ void Foam::symmetryPlaneFvPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - vector nHat(symmetryPlanePatch_.n()); + if (pTraits::rank == 0) + { + // Transform-invariant types + Field::operator=(this->patchInternalField()); + } + else + { + symmTensor rot(I - 2.0*sqr(symmetryPlanePatch_.n())); - const Field iF(this->patchInternalField()); + Field pif(this->patchInternalField()); - Field::operator= - ( - (iF + transform(I - 2.0*sqr(nHat), iF))/2.0 - ); + Field::operator=((pif + transform(rot, pif))/2.0); + } transformFvPatchField::evaluate(); } @@ -156,12 +171,7 @@ Foam::symmetryPlaneFvPatchField::snGradTransformDiag() const { vector nHat(symmetryPlanePatch_.n()); - const vector diag - ( - mag(nHat.component(vector::X)), - mag(nHat.component(vector::Y)), - mag(nHat.component(vector::Z)) - ); + const vector diag(mag(nHat.x()), mag(nHat.y()), mag(nHat.z())); return tmp> ( diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H index fea87f176d..d1a119f96a 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H @@ -159,18 +159,6 @@ public: }; -// * * * * * * * * * * * Template Specialisations * * * * * * * * * * * * * // - -template<> -tmp symmetryPlaneFvPatchField::snGrad() const; - -template<> -void symmetryPlaneFvPatchField::evaluate -( - const Pstream::commsTypes commsType -); - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchFields.C index e3ed414075..d91760fa8a 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchFields.C @@ -39,28 +39,5 @@ namespace Foam // * * * * * * * * * * * * * * * Specialisations * * * * * * * * * * * * * * // -template<> -Foam::tmp -Foam::symmetryPlaneFvPatchField::snGrad() const -{ - return tmp::New(size(), Zero); -} - - -template<> -void Foam::symmetryPlaneFvPatchField::evaluate -( - const Pstream::commsTypes -) -{ - if (!updated()) - { - updateCoeffs(); - } - - scalarField::operator=(patchInternalField()); - transformFvPatchField::evaluate(); -} - // ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C index 2393afd5e3..852178dcd5 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation + Copyright (C) 2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -119,12 +120,22 @@ Foam::wedgeFvPatchField::wedgeFvPatchField template Foam::tmp> Foam::wedgeFvPatchField::snGrad() const { - const Field pif(this->patchInternalField()); + if (pTraits::rank == 0) + { + // Transform-invariant types + return tmp>::New(this->size(), Zero); + } + else + { + const Field pif(this->patchInternalField()); - return - ( - transform(refCast(this->patch()).cellT(), pif) - pif - )*(0.5*this->patch().deltaCoeffs()); + return + ( + transform + ( + refCast(this->patch()).cellT(), pif) - pif + )*(0.5*this->patch().deltaCoeffs()); + } } @@ -136,14 +147,22 @@ void Foam::wedgeFvPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - fvPatchField::operator== - ( - transform + if (pTraits::rank == 0) + { + // Transform-invariant types + this->operator==(this->patchInternalField()); + } + else + { + fvPatchField::operator== ( - refCast(this->patch()).faceT(), - this->patchInternalField() - ) - ); + transform + ( + refCast(this->patch()).faceT(), + this->patchInternalField() + ) + ); + } } diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H index d51a2942b7..fe165654b9 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H @@ -50,8 +50,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef wedgeFvPatchField_H -#define wedgeFvPatchField_H +#ifndef Foam_wedgeFvPatchField_H +#define Foam_wedgeFvPatchField_H #include "transformFvPatchField.H" #include "wedgeFvPatch.H" @@ -70,7 +70,6 @@ class wedgeFvPatchField : public transformFvPatchField { - public: //- Runtime type information @@ -154,18 +153,6 @@ public: }; -// * * * * * * * * * * * Template Specialisations * * * * * * * * * * * * * // - -template<> -tmp wedgeFvPatchField::snGrad() const; - -template<> -void wedgeFvPatchField::evaluate -( - const Pstream::commsTypes commsType -); - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchFields.C index 7225ce6108..4bdc35186e 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchFields.C @@ -37,29 +37,4 @@ namespace Foam } -// * * * * * * * * * * * * * * * Specialisations * * * * * * * * * * * * * * // - -template<> -Foam::tmp -Foam::wedgeFvPatchField::snGrad() const -{ - return tmp::New(size(), Zero); -} - - -template<> -void Foam::wedgeFvPatchField::evaluate -( - const Pstream::commsTypes -) -{ - if (!updated()) - { - updateCoeffs(); - } - - this->operator==(patchInternalField()); -} - - // ************************************************************************* //