diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H index a21513d04f..8692ebde18 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/wedge/wedgePointPatch.H @@ -34,8 +34,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef wedgePointPatch_H -#define wedgePointPatch_H +#ifndef Foam_wedgePointPatch_H +#define Foam_wedgePointPatch_H #include "facePointPatch.H" #include "wedgePolyPatch.H" @@ -53,9 +53,9 @@ class wedgePointPatch : public facePointPatch { - // Private data + // Private Data - //- Local reference cast into the symmetryPlane patch + //- Local reference cast into the wedgePolyPatch patch const wedgePolyPatch& wedgePolyPatch_; @@ -120,8 +120,8 @@ public: pointConstraint& ) const; - //- Return symmetry plane normal - const vector& n() const + //- Return the normal to the patch + const vector& n() const noexcept { return wedgePolyPatch_.n(); } diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.H index 69313162ae..cb9e42ef71 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.H @@ -34,8 +34,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef wedgePolyPatch_H -#define wedgePolyPatch_H +#ifndef Foam_wedgePolyPatch_H +#define Foam_wedgePolyPatch_H #include "polyPatch.H" @@ -52,7 +52,7 @@ class wedgePolyPatch : public polyPatch { - // Private data + // Private Data //- Axis of the wedge vector axis_; @@ -173,45 +173,27 @@ public: } - // Member functions + // Member Functions - // Access + // Access - //- Return axis of the wedge - const vector& axis() const - { - return axis_; - } + //- Return axis of the wedge + const vector& axis() const noexcept { return axis_; } - //- Return plane normal between the wedge boundaries - const vector& centreNormal() const - { - return centreNormal_; - } + //- Return plane normal between the wedge boundaries + const vector& centreNormal() const noexcept { return centreNormal_; } - //- Return the normal to the patch - const vector& n() const - { - return n_; - } + //- Return the normal to the patch + const vector& n() const noexcept { return n_; } - //- Return the cosine of the wedge angle - scalar cosAngle() const - { - return cosAngle_; - } + //- Return the cosine of the wedge angle + scalar cosAngle() const noexcept { return cosAngle_; } - //- Return face transformation tensor - const tensor& faceT() const - { - return faceT_; - } + //- Return face transformation tensor + const tensor& faceT() const noexcept { return faceT_; } - //- Return neighbour-cell transformation tensor - const tensor& cellT() const - { - return cellT_; - } + //- Return neighbour-cell transformation tensor + const tensor& cellT() const noexcept { return cellT_; } }; diff --git a/src/finiteArea/Make/files b/src/finiteArea/Make/files index c318012d21..94be44a0e1 100644 --- a/src/finiteArea/Make/files +++ b/src/finiteArea/Make/files @@ -45,7 +45,6 @@ $(faPatchFields)/faPatchField/faPatchFieldBase.C $(faPatchFields)/faPatchField/faPatchFields.C basicFaPatchFields = $(faPatchFields)/basic -$(basicFaPatchFields)/basicSymmetry/basicSymmetryFaPatchFields.C $(basicFaPatchFields)/calculated/calculatedFaPatchFields.C $(basicFaPatchFields)/extrapolatedCalculated/extrapolatedCalculatedFaPatchFields.C $(basicFaPatchFields)/coupled/coupledFaPatchFields.C diff --git a/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C b/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C index 8c8e70e661..40ee9e49ed 100644 --- a/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C +++ b/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.C @@ -93,16 +93,12 @@ Foam::wedgeFaPatch::wedgeFaPatch << this->name() << exit(FatalError); } - const auto* wedgePtr = isA + wedgePolyPatchPtr_ = isA ( bm.mesh().mesh().boundaryMesh()[ngbPolyPatchIndex()] ); - if (wedgePtr) - { - wedgePolyPatchPtr_ = wedgePtr; - } - else + if (!wedgePolyPatchPtr_) { FatalErrorInFunction << "Neighbour polyPatch is not of type " diff --git a/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.H b/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.H index 5c981d4df5..9bc011d3c1 100644 --- a/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.H +++ b/src/finiteArea/faMesh/faPatches/constraint/wedge/wedgeFaPatch.H @@ -77,7 +77,9 @@ public: //- Runtime type information TypeName("wedge"); - //- Construct from dictionary + //- Construct from dictionary. + // Fatal if ngbPolyPatchIndex is not defined + // or does not correspond to a wedgePolyPatch wedgeFaPatch ( const word& name, @@ -97,25 +99,25 @@ public: // Access //- Return axis of the wedge - const vector& axis() const + const vector& axis() const noexcept { return wedgePolyPatchPtr_->axis(); } //- Return plane normal between the wedge boundaries - const vector& centreNormal() const + const vector& centreNormal() const noexcept { return wedgePolyPatchPtr_->centreNormal(); } //- Return face transformation tensor - const tensor& edgeT() const + const tensor& edgeT() const noexcept { return wedgePolyPatchPtr_->faceT(); } //- Return neighbour-cell transformation tensor - const tensor& faceT() const + const tensor& faceT() const noexcept { return wedgePolyPatchPtr_->cellT(); } diff --git a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.C b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.C index 63bab59206..3a808480e8 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) 2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -85,13 +86,25 @@ template Foam::tmp> Foam::basicSymmetryFaPatchField::snGrad() const { - const vectorField nHat(this->patch().edgeNormals()); + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type : treat like zero-gradient + return tmp>::New(this->size(), Foam::zero{}); + } + else + { + tmp nHat = this->patch().edgeNormals(); - return - ( - transform(I - 2.0*sqr(nHat), this->patchInternalField()) - - this->patchInternalField() - )*(this->patch().deltaCoeffs()/2.0); + const auto& dc = this->patch().deltaCoeffs(); + + const Field pif(this->patchInternalField()); + + return + ( + (0.5*dc) + * (transform(I - 2.0*sqr(nHat), pif) - pif) + ); + } } @@ -103,14 +116,22 @@ void Foam::basicSymmetryFaPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - const vectorField nHat(this->patch().edgeNormals()); - Field::operator= - ( + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type : treat like zero-gradient + this->extrapolateInternal(); + } + else + { + tmp nHat = this->patch().edgeNormals(); + + const Field pif(this->patchInternalField()); + + Field::operator= ( - this->patchInternalField() - + transform(I - 2.0*sqr(nHat), this->patchInternalField()) - )/2.0 - ); + 0.5*(pif + transform(I - 2.0*sqr(nHat), pif)) + ); + } transformFaPatchField::evaluate(); } diff --git a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H index 83f3c0ad89..417d21a445 100644 --- a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H +++ b/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchField.H @@ -143,18 +143,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 deleted file mode 100644 index 5eb0ce55dd..0000000000 --- a/src/finiteArea/fields/faPatchFields/basic/basicSymmetry/basicSymmetryFaPatchFields.C +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | www.openfoam.com - \\/ M anipulation | -------------------------------------------------------------------------------- - Copyright (C) 2016-2017 Wikki Ltd -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "basicSymmetryFaPatchField.H" -#include "areaFields.H" - -// No run-time selection - -// * * * * * * * * * * * * * * * 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..8e3c98e039 100644 --- a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.C +++ b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.C @@ -37,7 +37,7 @@ Foam::transformFaPatchField::transformFaPatchField const DimensionedField& iF ) : - faPatchField(p, iF) + faPatchField(p, iF) {} diff --git a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H index f4515b6a59..b7c6c71731 100644 --- a/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H +++ b/src/finiteArea/fields/faPatchFields/basic/transform/transformFaPatchField.H @@ -148,12 +148,6 @@ public: }; -// * * * * * * * * * * * 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/constraint/wedge/wedgeFaPatchField.C b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.C index deded81e75..9988f59f1a 100644 --- a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.C +++ b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.C @@ -104,13 +104,25 @@ Foam::wedgeFaPatchField::wedgeFaPatchField template Foam::tmp> Foam::wedgeFaPatchField::snGrad() const { - const Field pif (this->patchInternalField()); + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type: treat like zero-gradient + return tmp>::New(this->size(), Foam::zero{}); + } + else + { + const auto& rot = refCast(this->patch()).faceT(); - return - ( - transform(refCast(this->patch()).faceT(), pif) - - pif - )*(0.5*this->patch().deltaCoeffs()); + const Field pif(this->patchInternalField()); + + const auto& dc = this->patch().deltaCoeffs(); + + return + ( + (0.5*dc) + * (transform(rot, pif) - pif) + ); + } } @@ -122,14 +134,20 @@ void Foam::wedgeFaPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - faPatchField::operator== - ( - transform + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type: treat like zero-gradient + this->extrapolateInternal(); + } + else + { + const auto& rot = refCast(this->patch()).edgeT(); + + faPatchField::operator== ( - refCast(this->patch()).edgeT(), - this->patchInternalField() - ) - ); + transform(rot, this->patchInternalField()) + ); + } } diff --git a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H index 22858d7db5..a1e33ce9a0 100644 --- a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H +++ b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchField.H @@ -133,18 +133,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..c38c3bac35 100644 --- a/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchFields.C +++ b/src/finiteArea/fields/faPatchFields/constraint/wedge/wedgeFaPatchFields.C @@ -36,26 +36,4 @@ 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/Make/files b/src/finiteVolume/Make/files index b0cb2bc25b..8a149485ce 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -128,7 +128,6 @@ $(fvPatchFields)/fvPatchField/fvPatchFieldBase.C $(fvPatchFields)/fvPatchField/fvPatchFields.C basicFvPatchFields = $(fvPatchFields)/basic -$(basicFvPatchFields)/basicSymmetry/basicSymmetryFvPatchFields.C $(basicFvPatchFields)/calculated/calculatedFvPatchFields.C $(basicFvPatchFields)/extrapolatedCalculated/extrapolatedCalculatedFvPatchFields.C $(basicFvPatchFields)/coupled/coupledFvPatchFields.C diff --git a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.C index 5d45a94aea..a4054b2b82 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) 2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -85,13 +86,25 @@ template Foam::tmp> Foam::basicSymmetryFvPatchField::snGrad() const { - tmp nHat = this->patch().nf(); + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type : treat like zero-gradient + return tmp>::New(this->size(), Foam::zero{}); + } + else + { + tmp nHat = this->patch().nf(); - const Field iF(this->patchInternalField()); + const auto& dc = this->patch().deltaCoeffs(); - return - (transform(I - 2.0*sqr(nHat), iF) - iF) - *(this->patch().deltaCoeffs()/2.0); + const Field pif(this->patchInternalField()); + + return + ( + (0.5*dc) + * (transform(I - 2.0*sqr(nHat), pif) - pif) + ); + } } @@ -103,14 +116,22 @@ void Foam::basicSymmetryFvPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - tmp nHat = this->patch().nf(); + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type : treat like zero-gradient + this->extrapolateInternal(); + } + else + { + tmp nHat = this->patch().nf(); - const Field iF(this->patchInternalField()); + const Field pif(this->patchInternalField()); - Field::operator= - ( - (iF + transform(I - 2.0*sqr(nHat), iF))/2.0 - ); + Field::operator= + ( + 0.5*(pif + transform(I - 2.0*sqr(nHat), pif)) + ); + } transformFvPatchField::evaluate(); } diff --git a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H index 3135c1662c..0345dfd663 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchField.H @@ -139,18 +139,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 deleted file mode 100644 index 484a7354f5..0000000000 --- a/src/finiteVolume/fields/fvPatchFields/basic/basicSymmetry/basicSymmetryFvPatchFields.C +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | www.openfoam.com - \\/ M anipulation | -------------------------------------------------------------------------------- - Copyright (C) 2011-2013 OpenFOAM Foundation -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "basicSymmetryFvPatchField.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.H b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H index 9211155c71..25f6434158 100644 --- a/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/basic/transform/transformFvPatchField.H @@ -157,18 +157,6 @@ public: }; -// * * * * * * * * * * * 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/constraint/symmetryPlane/symmetryPlaneFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.C index 4a9705bada..485cd67afd 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) 2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,7 +28,6 @@ License #include "symmetryPlaneFvPatchField.H" - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template @@ -120,13 +120,25 @@ template Foam::tmp> Foam::symmetryPlaneFvPatchField::snGrad() const { - vector nHat(symmetryPlanePatch_.n()); + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type: treat like zero-gradient + return tmp>::New(this->size(), Foam::zero{}); + } + else + { + const symmTensor rot(I - 2.0*sqr(symmetryPlanePatch_.n())); - const Field iF(this->patchInternalField()); + const Field pif(this->patchInternalField()); - return - (transform(I - 2.0*sqr(nHat), iF) - iF) - *(this->patch().deltaCoeffs()/2.0); + const auto& dc = this->patch().deltaCoeffs(); + + return + ( + (0.5*dc) + * (transform(rot, pif) - pif) + ); + } } @@ -138,14 +150,19 @@ void Foam::symmetryPlaneFvPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - vector nHat(symmetryPlanePatch_.n()); + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type: treat like zero-gradient + this->extrapolateInternal(); + } + else + { + const symmTensor rot(I - 2.0*sqr(symmetryPlanePatch_.n())); - const Field iF(this->patchInternalField()); + const Field pif(this->patchInternalField()); - Field::operator= - ( - (iF + transform(I - 2.0*sqr(nHat), iF))/2.0 - ); + Field::operator=(0.5*(pif + transform(rot, pif))); + } transformFvPatchField::evaluate(); } diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H index 5ea077b08a..ff9bb1c315 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchField.H @@ -49,8 +49,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef symmetryPlaneFvPatchField_H -#define symmetryPlaneFvPatchField_H +#ifndef Foam_symmetryPlaneFvPatchField_H +#define Foam_symmetryPlaneFvPatchField_H #include "basicSymmetryFvPatchField.H" #include "symmetryPlaneFvPatch.H" @@ -61,7 +61,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class symmetryPlaneFvPatchField Declaration + Class symmetryPlaneFvPatchField Declaration \*---------------------------------------------------------------------------*/ template @@ -153,18 +153,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..b8ee6a9fd8 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/symmetryPlane/symmetryPlaneFvPatchFields.C @@ -37,30 +37,4 @@ 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 c8094daa0c..3508eff784 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2024 OpenCFD Ltd. + Copyright (C) 2024-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -119,12 +119,25 @@ Foam::wedgeFvPatchField::wedgeFvPatchField template Foam::tmp> Foam::wedgeFvPatchField::snGrad() const { - const Field pif(this->patchInternalField()); + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type : treat like zero-gradient + return tmp>::New(this->size(), Foam::zero{}); + } + else + { + const auto& rot = refCast(this->patch()).cellT(); - return - ( - transform(refCast(this->patch()).cellT(), pif) - pif - )*(0.5*this->patch().deltaCoeffs()); + const Field pif(this->patchInternalField()); + + const auto& dc = this->patch().deltaCoeffs(); + + return + ( + (0.5*dc) + * (transform(rot, pif) - pif) + ); + } } @@ -136,14 +149,20 @@ void Foam::wedgeFvPatchField::evaluate(const Pstream::commsTypes) this->updateCoeffs(); } - fvPatchField::operator== - ( - transform + if constexpr (!is_rotational_vectorspace_v) + { + // Rotational-invariant type : treat like zero-gradient + this->extrapolateInternal(); + } + else + { + const auto& rot = refCast(this->patch()).faceT(); + + fvPatchField::operator== ( - refCast(this->patch()).faceT(), - this->patchInternalField() - ) - ); + transform(rot, this->patchInternalField()) + ); + } } diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H index fe9e31f644..df71293c5f 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/constraint/wedge/wedgeFvPatchField.H @@ -138,7 +138,7 @@ public: } - // Member functions + // Member Functions //- Return gradient at boundary virtual tmp> snGrad() const; @@ -154,18 +154,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()); -} - - // ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.C b/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.C index c039bdca83..c6d39a8121 100644 --- a/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.C +++ b/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.C @@ -33,23 +33,23 @@ License namespace Foam { -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - defineTypeNameAndDebug(wedgeFvPatch, 0); addToRunTimeSelectionTable(fvPatch, wedgeFvPatch, polyPatch); +} // End namespace Foam + // * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * * * * // -wedgeFvPatch::wedgeFvPatch(const polyPatch& patch, const fvBoundaryMesh& bm) +Foam::wedgeFvPatch::wedgeFvPatch +( + const polyPatch& patch, + const fvBoundaryMesh& bm +) : fvPatch(patch, bm), wedgePolyPatch_(refCast(patch)) {} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.H b/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.H index 913f6c1c51..ce188fe474 100644 --- a/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.H +++ b/src/finiteVolume/fvMesh/fvPatches/constraint/wedge/wedgeFvPatch.H @@ -34,8 +34,8 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef wedgeFvPatch_H -#define wedgeFvPatch_H +#ifndef Foam_wedgeFvPatch_H +#define Foam_wedgeFvPatch_H #include "fvPatch.H" #include "wedgePolyPatch.H" @@ -53,7 +53,7 @@ class wedgeFvPatch : public fvPatch { - // Private data + // Private Data const wedgePolyPatch& wedgePolyPatch_; @@ -70,21 +70,21 @@ public: wedgeFvPatch(const polyPatch& patch, const fvBoundaryMesh& bm); - // Member functions + // Member Functions - // Access + // Access - //- Return face transformation tensor - const tensor& faceT() const - { - return wedgePolyPatch_.faceT(); - } + //- Return face transformation tensor + const tensor& faceT() const noexcept + { + return wedgePolyPatch_.faceT(); + } - //- Return neighbour-cell transformation tensor - const tensor& cellT() const - { - return wedgePolyPatch_.cellT(); - } + //- Return neighbour-cell transformation tensor + const tensor& cellT() const noexcept + { + return wedgePolyPatch_.cellT(); + } };