From a9b59ad27edf7cc256114f1256c767856027e88f Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Mon, 19 May 2025 14:53:00 +0200 Subject: [PATCH] ENH: control local boundary consistency checks from FieldBase settings - avoids multiple definitions for various template specializations --- etc/controlDict | 4 +- src/OpenFOAM/db/Time/TimeIO.C | 4 + .../GeometricField/GeometricBoundaryField.C | 7 +- .../GeometricField/GeometricBoundaryField.H | 6 - .../GeometricFields/pointFields/pointFields.C | 60 ------ src/OpenFOAM/global/argList/argList.C | 7 + src/finiteArea/fields/areaFields/areaFields.C | 187 ++--------------- src/finiteArea/fields/areaFields/areaFields.H | 34 +++- src/finiteArea/fields/edgeFields/edgeFields.C | 78 ------- .../general/SRF/SRFModel/SRFModel/SRFModel.C | 5 +- .../cfdTools/general/include/gh.H | 6 +- .../cyclicACMI/cyclicACMIFvPatchField.C | 15 +- .../cyclicAMI/cyclicAMIFvPatchField.C | 15 +- .../fields/surfaceFields/surfaceFields.C | 88 -------- src/finiteVolume/fields/volFields/volFields.C | 190 ++---------------- src/finiteVolume/fields/volFields/volFields.H | 34 +++- src/functionObjects/field/pressure/pressure.C | 5 +- src/functionObjects/field/setFlow/setFlow.C | 18 +- 18 files changed, 127 insertions(+), 636 deletions(-) diff --git a/etc/controlDict b/etc/controlDict index 639c712d7a..c3e7985415 100644 --- a/etc/controlDict +++ b/etc/controlDict @@ -250,8 +250,8 @@ OptimisationSwitches experimentalDdtCorr 0; //- Enable enforced consistency of constraint bcs after 'local' operations. - // Default is on. Set to 0/false to revert to @@ -141,6 +142,9 @@ void Foam::Time::readDict() << controlDict_.name() << nl; debug::optimisationObjects().setValues(*localDict, true); + + // Ugly handling of localBoundaryConsistency switches + FieldBase::warnLocalBoundaryConsistencyCompat(*localDict); } diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C index b6cbc8ae6e..059560a01d 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C @@ -55,10 +55,7 @@ bool Foam::GeometricBoundaryField::checkConsistency << endl; } - auto& bfld = const_cast&> - ( - *this - ); + auto& bfld = this->constCast(); // Store old value @@ -719,7 +716,7 @@ void Foam::GeometricBoundaryField::evaluateLocal { // DebugInFunction << nl; - if (!localConsistency) + if (!FieldBase::localBoundaryConsistency()) { return; } diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H index 07d4b1376d..0fb33d5ce1 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H @@ -100,12 +100,6 @@ public: //- Enable debug static int debug; - //- User-defined tolerance (for consistency checks) - static scalar tolerance; - - //- Enable local consistency - static int localConsistency; - // Constructors diff --git a/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C b/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C index cc5db6e67b..dc017832b4 100644 --- a/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C +++ b/src/OpenFOAM/fields/GeometricFields/pointFields/pointFields.C @@ -78,66 +78,6 @@ defineTemplateDebugSwitchWithName 0 ); - - -// Local-ops consistency enforcing - -template<> int pointScalarField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "localConsistency", - int, - Foam::pointScalarField::Boundary::localConsistency -); - -template<> int pointVectorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "pointVectorField::Boundary::localConsistency", - int, - Foam::pointVectorField::Boundary::localConsistency -); - -template<> int pointSphericalTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "pointSphericalTensorField::Boundary::localConsistency", - int, - Foam::pointSphericalTensorField::Boundary::localConsistency -); - -template<> int pointSymmTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "pointSymmTensorField::Boundary::localConsistency", - int, - Foam::pointSymmTensorField::Boundary::localConsistency -); - -template<> int pointTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "pointTensorField::Boundary::localConsistency", - int, - Foam::pointTensorField::Boundary::localConsistency -); - - } // End namespace Foam diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index 02223f1bd7..0040be93d6 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -47,6 +47,7 @@ License #include "stringListOps.H" #include "fileOperation.H" #include "fileOperationInitialise.H" +#include "Field.H" // Ugly handling of localBoundaryConsistency switches #include @@ -2231,6 +2232,12 @@ void Foam::argList::parse Info<< " user-supplied system call operations" << nl << nl; IOobject::writeDivider(Info); + + // Ugly handling of localBoundaryConsistency switches + FieldBase::warnLocalBoundaryConsistencyCompat + ( + debug::optimisationSwitches() + ); } } } diff --git a/src/finiteArea/fields/areaFields/areaFields.C b/src/finiteArea/fields/areaFields/areaFields.C index 4f1e86752f..b1f4e7f853 100644 --- a/src/finiteArea/fields/areaFields/areaFields.C +++ b/src/finiteArea/fields/areaFields/areaFields.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2016-2017 Wikki Ltd - Copyright (C) 2018-2023 OpenCFD Ltd. + Copyright (C) 2018-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -79,127 +79,6 @@ defineTemplateDebugSwitchWithName 0 ); -template<> scalar areaScalarField::Boundary::tolerance -( - debug::floatOptimisationSwitch("areaScalarField::Boundary::tolerance", 0) -); -registerOptSwitch -( - "areaScalarField::Boundary::tolerance", - scalar, - Foam::areaScalarField::Boundary::tolerance -); - -template<> scalar areaVectorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("areaVectorField::Boundary::tolerance", 0) -); -registerOptSwitch -( - "areaVectorField::Boundary::tolerance", - scalar, - Foam::areaVectorField::Boundary::tolerance -); - -template<> scalar areaSphericalTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch - ( - "areaSphericalTensorField::Boundary::tolerance", - 0 - ) -); -registerOptSwitch -( - "areaSphericalTensorField::Boundary::tolerance", - scalar, - Foam::areaSphericalTensorField::Boundary::tolerance -); - -template<> scalar areaSymmTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch - ( - "areaSymmTensorField::Boundary::tolerance", - 0 - ) -); -registerOptSwitch -( - "areaSymmTensorField::Boundary::tolerance", - scalar, - Foam::areaSymmTensorField::Boundary::tolerance -); - -template<> scalar areaTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("areaTensorField::Boundary::tolerance", 0) -); -registerOptSwitch -( - "areaTensorField::Boundary::tolerance", - scalar, - Foam::areaTensorField::Boundary::tolerance -); - - -// Local-ops consistency enforcing - -template<> int areaScalarField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "areaScalarField::Boundary::localConsistency", - int, - Foam::areaScalarField::Boundary::localConsistency -); - -template<> int areaVectorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "areaVectorField::Boundary::localConsistency", - int, - Foam::areaVectorField::Boundary::localConsistency -); - -template<> int areaSphericalTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "areaSphericalTensorField::Boundary::localConsistency", - int, - Foam::areaSphericalTensorField::Boundary::localConsistency -); - -template<> int areaSymmTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "areaSymmTensorField::Boundary::localConsistency", - int, - Foam::areaSymmTensorField::Boundary::localConsistency -); - -template<> int areaTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "areaTensorField::Boundary::localConsistency", - int, - Foam::areaTensorField::Boundary::localConsistency -); - } // End namespace Foam @@ -230,56 +109,26 @@ void GeometricField::replace *this == gsf; } -template<> -bool GeometricBoundaryField::check() const -{ - return checkConsistency> - ( - Foam::areaScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); + +#undef fieldChecks +#define fieldChecks(Type) \ +template<> \ +bool GeometricBoundaryField::check() const \ +{ \ + return checkConsistency> \ + ( \ + FieldBase::localBoundaryTolerance_, \ + !(debug&4) /* make into warning if debug&4 */ \ + ); \ } -template<> -bool GeometricBoundaryField::check() const -{ - return checkConsistency> - ( - Foam::areaScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} +fieldChecks(scalar); +fieldChecks(vector); +fieldChecks(sphericalTensor); +fieldChecks(symmTensor); +fieldChecks(tensor); -template<> -bool GeometricBoundaryField::check -() const -{ - return checkConsistency> - ( - Foam::areaScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} - -template<> -bool GeometricBoundaryField::check() const -{ - return checkConsistency> - ( - Foam::areaScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} - -template<> -bool GeometricBoundaryField::check() const -{ - return checkConsistency> - ( - Foam::areaScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} +#undef fieldChecks } // End namespace Foam diff --git a/src/finiteArea/fields/areaFields/areaFields.H b/src/finiteArea/fields/areaFields/areaFields.H index 22ce54161a..1cd2c49292 100644 --- a/src/finiteArea/fields/areaFields/areaFields.H +++ b/src/finiteArea/fields/areaFields/areaFields.H @@ -69,17 +69,39 @@ void GeometricField::replace const GeometricField& sf ); + +// Local consistency checks +// +// template +// bool GeometricBoundaryField::check() const +// { +// return checkConsistency> +// ( +// FieldBase::localBoundaryTolerance_, +// !(debug&4) // make into warning if debug&4 +// ); +// } + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check -() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteArea/fields/edgeFields/edgeFields.C b/src/finiteArea/fields/edgeFields/edgeFields.C index 596424650a..b5abc23826 100644 --- a/src/finiteArea/fields/edgeFields/edgeFields.C +++ b/src/finiteArea/fields/edgeFields/edgeFields.C @@ -77,84 +77,6 @@ defineTemplateDebugSwitchWithName 0 ); -template<> scalar edgeScalarField::Boundary::tolerance -( - debug::floatOptimisationSwitch("tolerance", 0) -); -template<> scalar edgeVectorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("tolerance", 0) -); -template<> scalar edgeSphericalTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("tolerance", 0) -); -template<> scalar edgeSymmTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("tolerance", 0) -); -template<> scalar edgeTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("tolerance", 0) -); - -// Local-ops consistency enforcing - -template<> int edgeScalarField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "edgeScalarField::Boundary::localConsistency", - int, - Foam::edgeScalarField::Boundary::localConsistency -); - -template<> int edgeVectorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "edgeVectorField::Boundary::localConsistency", - int, - Foam::edgeVectorField::Boundary::localConsistency -); - -template<> int edgeSphericalTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "edgeSphericalTensorField::Boundary::localConsistency", - int, - Foam::edgeSphericalTensorField::Boundary::localConsistency -); - -template<> int edgeSymmTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "edgeSymmTensorField::Boundary::localConsistency", - int, - Foam::edgeSymmTensorField::Boundary::localConsistency -); - -template<> int edgeTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "edgeTensorField::Boundary::localConsistency", - int, - Foam::edgeTensorField::Boundary::localConsistency -); - } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.C b/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.C index 58b002be2d..3e2722b47b 100644 --- a/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.C +++ b/src/finiteVolume/cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.C @@ -169,8 +169,7 @@ Foam::vectorField Foam::SRF::SRFModel::velocity Foam::tmp Foam::SRF::SRFModel::U() const { - const int oldLocal = volVectorField::Boundary::localConsistency; - volVectorField::Boundary::localConsistency = 0; + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); tmp relPos(mesh_.C() - origin_); auto tU = volVectorField::New @@ -181,7 +180,7 @@ Foam::tmp Foam::SRF::SRFModel::U() const omega_ ^ (relPos() - axis_*(axis_ & relPos())) ) ); - volVectorField::Boundary::localConsistency = oldLocal; + FieldBase::localBoundaryConsistency(oldConsistency); return tU; } diff --git a/src/finiteVolume/cfdTools/general/include/gh.H b/src/finiteVolume/cfdTools/general/include/gh.H index e3d3b78f1c..5e862d0a5a 100644 --- a/src/finiteVolume/cfdTools/general/include/gh.H +++ b/src/finiteVolume/cfdTools/general/include/gh.H @@ -5,10 +5,10 @@ ? g & (cmptMag(g.value())/mag(g.value()))*hRef : dimensionedScalar("ghRef", g.dimensions()*dimLength, 0) ); - const int oldLocal = volVectorField::Boundary::localConsistency; - volVectorField::Boundary::localConsistency = 0; + + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); volScalarField gh("gh", (g & mesh.C()) - ghRef); surfaceScalarField ghf("ghf", (g & mesh.Cf()) - ghRef); - volVectorField::Boundary::localConsistency = oldLocal; + FieldBase::localBoundaryConsistency(oldConsistency); diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicACMI/cyclicACMIFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicACMI/cyclicACMIFvPatchField.C index 258a388a32..e992c608d7 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicACMI/cyclicACMIFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicACMI/cyclicACMIFvPatchField.C @@ -114,16 +114,11 @@ Foam::cyclicACMIFvPatchField::cyclicACMIFvPatchField // old logic (ultimately calls the fully self contained // patchNeighbourField) - int& consistency = - GeometricField:: - Boundary::localConsistency; - - const int oldConsistency = consistency; - consistency = 0; + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); this->evaluate(Pstream::commsTypes::buffered); - consistency = oldConsistency; + FieldBase::localBoundaryConsistency(oldConsistency); } } @@ -331,11 +326,7 @@ template bool Foam::cyclicACMIFvPatchField::cacheNeighbourField() { /* - return - ( - GeometricField::Boundary::localConsistency - != 0 - ); + return (FieldBase::localBoundaryConsistency() != 0); */ return false; } diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C index 6dd0c10139..65cd0c9004 100644 --- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C @@ -97,16 +97,11 @@ Foam::cyclicAMIFvPatchField::cyclicAMIFvPatchField // old logic (ultimately calls the fully self contained // patchNeighbourField) - int& consistency = - GeometricField:: - Boundary::localConsistency; - - const int oldConsistency = consistency; - consistency = 0; + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); this->evaluate(UPstream::commsTypes::nonBlocking); - consistency = oldConsistency; + FieldBase::localBoundaryConsistency(oldConsistency); } else { @@ -326,11 +321,7 @@ Foam::cyclicAMIFvPatchField::patchNeighbourField template bool Foam::cyclicAMIFvPatchField::cacheNeighbourField() { - return - ( - GeometricField::Boundary::localConsistency - != 0 - ); + return (FieldBase::localBoundaryConsistency() != 0); } diff --git a/src/finiteVolume/fields/surfaceFields/surfaceFields.C b/src/finiteVolume/fields/surfaceFields/surfaceFields.C index 487d6bffe4..a8c900d660 100644 --- a/src/finiteVolume/fields/surfaceFields/surfaceFields.C +++ b/src/finiteVolume/fields/surfaceFields/surfaceFields.C @@ -77,94 +77,6 @@ defineTemplateDebugSwitchWithName 0 ); -template<> scalar surfaceScalarField::Boundary::tolerance -( - debug::floatOptimisationSwitch("surfaceScalarField::Boundary::tolerance", 0) -); -template<> scalar surfaceVectorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("surfaceVectorField::Boundary::tolerance", 0) -); -template<> scalar surfaceSphericalTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch - ( - "surfaceSphericalTensorField::Boundary::tolerance", - 0 - ) -); -template<> scalar surfaceSymmTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch - ( - "surfaceSymmTensorField::Boundary::tolerance", - 0 - ) -); -template<> scalar surfaceTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("surfaceTensorField::Boundary::tolerance", 0) -); - - -// Local-ops consistency enforcing - -template<> int surfaceScalarField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "surfaceScalarField::Boundary::localConsistency", - int, - Foam::surfaceScalarField::Boundary::localConsistency -); - -template<> int surfaceVectorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "surfaceVectorField::Boundary::localConsistency", - int, - Foam::surfaceVectorField::Boundary::localConsistency -); - -template<> int surfaceSphericalTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "surfaceSphericalTensorField::Boundary::localConsistency", - int, - Foam::surfaceSphericalTensorField::Boundary::localConsistency -); - -template<> int surfaceSymmTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "surfaceSymmTensorField::Boundary::localConsistency", - int, - Foam::surfaceSymmTensorField::Boundary::localConsistency -); - -template<> int surfaceTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "surfaceTensorField::Boundary::localConsistency", - int, - Foam::surfaceTensorField::Boundary::localConsistency -); - - } // End namespace Foam diff --git a/src/finiteVolume/fields/volFields/volFields.C b/src/finiteVolume/fields/volFields/volFields.C index 3c0bc1c486..25895c46a7 100644 --- a/src/finiteVolume/fields/volFields/volFields.C +++ b/src/finiteVolume/fields/volFields/volFields.C @@ -78,131 +78,6 @@ defineTemplateDebugSwitchWithName 0 ); - -// Tolerance optimisation switch - -template<> scalar volScalarField::Boundary::tolerance -( - debug::floatOptimisationSwitch("volScalarField::Boundary::tolerance", 0) -); -registerOptSwitch -( - "volScalarField::Boundary::tolerance", - scalar, - Foam::volScalarField::Boundary::tolerance -); - -template<> scalar volVectorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("volScalarField::Boundary::tolerance", 0) -); -registerOptSwitch -( - "volVectorField::Boundary::tolerance", - scalar, - Foam::volVectorField::Boundary::tolerance -); - -template<> scalar volSphericalTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch - ( - "volSphericalTensorField::Boundary::tolerance", - 0 - ) -); -registerOptSwitch -( - "volSphericalTensorField::Boundary::tolerance", - scalar, - Foam::volSphericalTensorField::Boundary::tolerance -); - -template<> scalar volSymmTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch - ( - "volSymmTensorField::Boundary::tolerance", - 0 - ) -); -registerOptSwitch -( - "volSymmTensorField::Boundary::tolerance", - scalar, - Foam::volSymmTensorField::Boundary::tolerance -); - -template<> scalar volTensorField::Boundary::tolerance -( - debug::floatOptimisationSwitch("volTensorField::Boundary::tolerance", 0) -); -registerOptSwitch -( - "volTensorField::Boundary::tolerance", - scalar, - Foam::volTensorField::Boundary::tolerance -); - - -// Local-ops consistency enforcing - -template<> int volScalarField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "volScalarField::Boundary::localConsistency", - int, - Foam::volScalarField::Boundary::localConsistency -); - -template<> int volVectorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "volVectorField::Boundary::localConsistency", - int, - Foam::volVectorField::Boundary::localConsistency -); - -template<> int volSphericalTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "volSphericalTensorField::Boundary::localConsistency", - int, - Foam::volSphericalTensorField::Boundary::localConsistency -); - -template<> int volSymmTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "volSymmTensorField::Boundary::localConsistency", - int, - Foam::volSymmTensorField::Boundary::localConsistency -); - -template<> int volTensorField::Boundary::localConsistency -( - debug::optimisationSwitch("localConsistency", 1) -); -registerOptSwitch -( - "volTensorField::Boundary::localConsistency", - int, - Foam::volTensorField::Boundary::localConsistency -); - - } // End namespace Foam @@ -235,58 +110,25 @@ void GeometricField::replace } -template<> -bool GeometricBoundaryField::check() const -{ - return checkConsistency> - ( - Foam::volScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); +#undef fieldChecks +#define fieldChecks(Type) \ +template<> \ +bool GeometricBoundaryField::check() const \ +{ \ + return checkConsistency> \ + ( \ + FieldBase::localBoundaryTolerance_, \ + !(debug&4) /* make into warning if debug&4 */ \ + ); \ } -template<> -bool GeometricBoundaryField::check() const -{ - return checkConsistency> - ( - Foam::volScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} +fieldChecks(scalar); +fieldChecks(vector); +fieldChecks(sphericalTensor); +fieldChecks(symmTensor); +fieldChecks(tensor); -template<> -bool GeometricBoundaryField::check -() const -{ - return checkConsistency> - ( - Foam::volScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} - -template<> -bool GeometricBoundaryField::check -() const -{ - return checkConsistency> - ( - Foam::volScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} - -template<> -bool GeometricBoundaryField::check -() const -{ - return checkConsistency> - ( - Foam::volScalarField::Boundary::tolerance, - !(debug&4) // make into warning if debug&4 - ); -} +#undef fieldChecks } // End namespace Foam diff --git a/src/finiteVolume/fields/volFields/volFields.H b/src/finiteVolume/fields/volFields/volFields.H index 0b129d957f..9627974a31 100644 --- a/src/finiteVolume/fields/volFields/volFields.H +++ b/src/finiteVolume/fields/volFields/volFields.H @@ -64,17 +64,39 @@ void GeometricField::replace const GeometricField& sf ); + +// Local consistency checks +// +// template +// bool GeometricBoundaryField::check() const +// { +// return checkConsistency> +// ( +// FieldBase::localBoundaryTolerance_, +// !(debug&4) // make into warning if debug&4 +// ); +// } + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check -() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + template<> -bool GeometricBoundaryField::check() const; +bool GeometricBoundaryField:: +check() const; + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/functionObjects/field/pressure/pressure.C b/src/functionObjects/field/pressure/pressure.C index 712557669c..4fccae32df 100644 --- a/src/functionObjects/field/pressure/pressure.C +++ b/src/functionObjects/field/pressure/pressure.C @@ -197,8 +197,7 @@ void Foam::functionObjects::pressure::addHydrostaticContribution (g_ & (cmptMag(g_.value())/mag(g_.value())))*hRef_ ); - const int oldLocal = volScalarField::Boundary::localConsistency; - volScalarField::Boundary::localConsistency = 0; + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); tmp rgh = rhoScale(p, (g_ & mesh_.C()) - ghRef); @@ -218,7 +217,7 @@ void Foam::functionObjects::pressure::addHydrostaticContribution {} } - volScalarField::Boundary::localConsistency = oldLocal; + FieldBase::localBoundaryConsistency(oldConsistency); } diff --git a/src/functionObjects/field/setFlow/setFlow.C b/src/functionObjects/field/setFlow/setFlow.C index dd26dccb60..4e0eacd35d 100644 --- a/src/functionObjects/field/setFlow/setFlow.C +++ b/src/functionObjects/field/setFlow/setFlow.C @@ -234,8 +234,7 @@ bool Foam::functionObjects::setFlow::execute() } case modeType::ROTATION: { - const int oldLocal = volVectorField::Boundary::localConsistency; - volVectorField::Boundary::localConsistency = 0; + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); const volVectorField& C = mesh_.C(); const volVectorField d @@ -269,7 +268,8 @@ bool Foam::functionObjects::setFlow::execute() } U = U & R_; - volVectorField::Boundary::localConsistency = oldLocal; + + FieldBase::localBoundaryConsistency(oldConsistency); U.correctBoundaryConditions(); setPhi(U); @@ -279,8 +279,7 @@ bool Foam::functionObjects::setFlow::execute() { const scalar pi = Foam::constant::mathematical::pi; - const int oldLocal = volVectorField::Boundary::localConsistency; - volVectorField::Boundary::localConsistency = 0; + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); const volVectorField& C = mesh_.C(); @@ -298,7 +297,8 @@ bool Foam::functionObjects::setFlow::execute() Uc.replace(vector::Z, sin(2*pi*x)*sqr(sin(pi*z))); U = U & R_; - volVectorField::Boundary::localConsistency = oldLocal; + + FieldBase::localBoundaryConsistency(oldConsistency); U.correctBoundaryConditions(); // Calculating phi @@ -343,8 +343,7 @@ bool Foam::functionObjects::setFlow::execute() { const scalar pi = Foam::constant::mathematical::pi; - const int oldLocal = volVectorField::Boundary::localConsistency; - volVectorField::Boundary::localConsistency = 0; + const auto oldConsistency = FieldBase::localBoundaryConsistency(0); const volVectorField& C = mesh_.C(); @@ -363,7 +362,8 @@ bool Foam::functionObjects::setFlow::execute() Uc.replace(vector::Z, -sin(2*pi*x)*sin(2*pi*y)*sqr(sin(pi*z))); U = U & R_; - volVectorField::Boundary::localConsistency = oldLocal; + + FieldBase::localBoundaryConsistency(oldConsistency); U.correctBoundaryConditions(); // Calculating phi