diff --git a/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H b/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H index 34b26b49ed..50e8027620 100644 --- a/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H +++ b/applications/utilities/preProcessing/mapFieldsPar/MapVolFields.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2018-2023 OpenCFD Ltd. + Copyright (C) 2018-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -39,74 +39,23 @@ namespace Foam { template -void evaluateConstraintTypes(GeometricField& fld) +void evaluateConstraintTypes +( + GeometricField& fld +) { - auto& bfld = fld.boundaryFieldRef(); - - const UPstream::commsTypes commsType = UPstream::defaultCommsType; - - if + fld.boundaryFieldRef().evaluate_if ( - commsType == UPstream::commsTypes::buffered - || commsType == UPstream::commsTypes::nonBlocking - ) - { - const label startOfRequests = UPstream::nRequests(); - - for (auto& pfld : bfld) + [](const auto& pfld) -> bool { - if + return ( pfld.type() == pfld.patch().patch().type() && polyPatch::constraintType(pfld.patch().patch().type()) - ) - { - pfld.initEvaluate(commsType); - } - } - - // Wait for outstanding requests (non-blocking) - UPstream::waitRequests(startOfRequests); - - for (auto& pfld : bfld) - { - if - ( - pfld.type() == pfld.patch().patch().type() - && polyPatch::constraintType(pfld.patch().patch().type()) - ) - { - pfld.evaluate(commsType); - } - } - } - else if (commsType == UPstream::commsTypes::scheduled) - { - const lduSchedule& patchSchedule = - fld.mesh().globalData().patchSchedule(); - - for (const auto& schedEval : patchSchedule) - { - const label patchi = schedEval.patch; - auto& pfld = bfld[patchi]; - - if - ( - pfld.type() == pfld.patch().patch().type() - && polyPatch::constraintType(pfld.patch().patch().type()) - ) - { - if (schedEval.init) - { - pfld.initEvaluate(commsType); - } - else - { - pfld.evaluate(commsType); - } - } - } - } + ); + }, + UPstream::defaultCommsType + ); } diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H index 28648b9893..65686daeda 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H @@ -373,6 +373,33 @@ public: Field&& iField ); + //- Return tmp field (NO_READ, NO_WRITE) + //- from name, mesh, dimensions, primitive field (tmp). + //- [Takes current timeName from the mesh registry]. + // For LEGACY_REGISTER, registration is determined by + // objectRegistry::is_cacheTemporaryObject(). + static tmp> New + ( + const word& name, + IOobjectOption::registerOption regOpt, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield + ); + + //- Return tmp field (NO_READ, NO_WRITE) + //- from name, mesh, dimensions, primitive field (tmp). + //- [Takes current timeName from the mesh registry]. + // Registration/persistence determined by + // objectRegistry::is_cacheTemporaryObject(). + static tmp> New + ( + const word& name, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield + ); + //- Return tmp field (NO_READ, NO_WRITE) //- from name, mesh, dimensions. //- [Takes current timeName from the mesh registry]. diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldNew.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldNew.C index c8f2e12f1d..61a1713c56 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldNew.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldNew.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2022-2024 OpenCFD Ltd. + Copyright (C) 2022-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -163,6 +163,49 @@ Foam::DimensionedField::New } +template +Foam::tmp> +Foam::DimensionedField::New +( + const word& name, + IOobjectOption::registerOption regOpt, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield +) +{ + return DimensionedField::New_impl + ( + regOpt, + name, + mesh, + dims, + tfield + ); +} + + +template +Foam::tmp> +Foam::DimensionedField::New +( + const word& name, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield +) +{ + return DimensionedField::New_impl + ( + IOobjectOption::LEGACY_REGISTER, + name, + mesh, + dims, + tfield + ); +} + + template Foam::tmp> Foam::DimensionedField::New diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C index 059560a01d..a8a47aba33 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017,2022 OpenFOAM Foundation - Copyright (C) 2016-2024 OpenCFD Ltd. + Copyright (C) 2016-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -64,6 +64,8 @@ bool Foam::GeometricBoundaryField::checkConsistency //Note: areaFields (finiteArea) do not have manipulatedMatrix() flag. TBD. //boolList oldManipulated(this->size()); + label nEvaluated(0); + for (auto& pfld : bfld) { if (isA(pfld)) @@ -72,19 +74,24 @@ bool Foam::GeometricBoundaryField::checkConsistency oldUpdated[patchi] = pfld.updated(); oldBfld[patchi] = pfld; //oldManipulated[patchi] = pfld.manipulatedMatrix(); + ++nEvaluated; } } + if (!nEvaluated) return true; // Early termination // Re-evaluate { const label startOfRequests = UPstream::nRequests(); + nEvaluated = 0; + for (auto& pfld : bfld) { if (isA(pfld)) { pfld.initEvaluate(UPstream::commsTypes::nonBlocking); + ++nEvaluated; } } @@ -96,13 +103,15 @@ bool Foam::GeometricBoundaryField::checkConsistency if (isA(pfld)) { pfld.evaluate(UPstream::commsTypes::nonBlocking); + if (--nEvaluated == 0) break; // Early termination } } } // Check - bool ok = true; + bool allOk(true); + for (auto& pfld : bfld) { if (isA(pfld)) @@ -110,16 +119,23 @@ bool Foam::GeometricBoundaryField::checkConsistency const label patchi = pfld.patch().index(); const auto& oldPfld = oldBfld[patchi]; - forAll(pfld, facei) + bool localOk(true); + + if (allOk) { - if (mag(pfld[facei]-oldPfld[facei]) > tol) + // Only check once + forAll(pfld, facei) { - ok = false; - break; + if (mag(pfld[facei]-oldPfld[facei]) > tol) + { + allOk = false; + localOk = false; + break; + } } } - if (!ok) + if (!localOk) { if (doExit) { @@ -133,7 +149,7 @@ bool Foam::GeometricBoundaryField::checkConsistency << ". Average of evaluated field = " << average(pfld) << ". Difference:" << average(pfld-oldPfld) - << ". Tolerance:" << tol + << ". Tolerance:" << tol << endl << exit(FatalError); } else @@ -148,25 +164,13 @@ bool Foam::GeometricBoundaryField::checkConsistency << ". Average of evaluated field = " << average(pfld) << ". Difference:" << average(pfld-oldPfld) - << ". Tolerance:" << tol - << endl; - - // Skip other patches - break; + << ". Tolerance:" << tol << endl; } } - } - } - // Restore bfld, updated - for (auto& pfld : bfld) - { - if (isA(pfld)) - { - const label patchi = pfld.patch().index(); + // Restore bfld, updated pfld.setUpdated(oldUpdated[patchi]); - Field& vals = pfld; - vals = std::move(oldBfld[patchi]); + static_cast&>(pfld) = std::move(oldBfld[patchi]); //pfld.setManipulated(oldManipulated[patchi]); } } @@ -176,10 +180,10 @@ bool Foam::GeometricBoundaryField::checkConsistency const auto& pfld0 = this->operator[](0); PoutInFunction << " Result of checking for field " - << pfld0.internalField().name() << " : " << ok << endl; + << pfld0.internalField().name() << " : " << allOk << endl; } - return ok; + return allOk; } @@ -626,6 +630,7 @@ void Foam::GeometricBoundaryField::evaluate_if || commsType == UPstream::commsTypes::nonBlocking ) { + label nEvaluated(0); const label startOfRequests = UPstream::nRequests(); for (auto& pfld : *this) @@ -633,17 +638,21 @@ void Foam::GeometricBoundaryField::evaluate_if if (pred(pfld)) { pfld.initEvaluate(commsType); + ++nEvaluated; } } // Wait for outstanding requests (non-blocking) UPstream::waitRequests(startOfRequests); + if (!nEvaluated) return; // Early termination + for (auto& pfld : *this) { if (pred(pfld)) { pfld.evaluate(commsType); + if (--nEvaluated == 0) break; // Early termination } } } @@ -778,81 +787,25 @@ void Foam::GeometricBoundaryField::evaluateCoupled const UPstream::commsTypes commsType ) { - // Alternative (C++14) - // - // this->evaluate_if - // ( - // [](const auto& pfld) -> bool - // { - // const auto* cpp = isA(pfld.patch()); - // return (cpp && cpp->coupled()); - // }, - // commsType - // ); - - // DebugInFunction << nl; - - if - ( - commsType == UPstream::commsTypes::buffered - || commsType == UPstream::commsTypes::nonBlocking - ) + if constexpr (std::is_void_v) { - const label startOfRequests = UPstream::nRequests(); - - for (auto& pfld : *this) - { - const auto* cpp = isA(pfld.patch()); - - if (cpp && cpp->coupled()) - { - pfld.initEvaluate(commsType); - } - } - - // Wait for outstanding requests (non-blocking) - UPstream::waitRequests(startOfRequests); - - for (auto& pfld : *this) - { - const auto* cpp = isA(pfld.patch()); - - if (cpp && cpp->coupled()) - { - pfld.evaluate(commsType); - } - } - } - else if (commsType == UPstream::commsTypes::scheduled) - { - const lduSchedule& patchSchedule = - bmesh_.mesh().globalData().patchSchedule(); - - for (const auto& schedEval : patchSchedule) - { - const label patchi = schedEval.patch; - auto& pfld = (*this)[patchi]; - - const auto* cpp = isA(pfld.patch()); - - if (cpp && cpp->coupled()) - { - if (schedEval.init) - { - pfld.initEvaluate(commsType); - } - else - { - pfld.evaluate(commsType); - } - } - } + this->evaluate_if + ( + [](const auto& pfld) { return pfld.coupled(); }, + commsType + ); } else { - FatalErrorInFunction - << "Unsupported communications type " << int(commsType) << nl - << exit(FatalError); + this->evaluate_if + ( + [](const auto& pfld) -> bool + { + const auto* cpp = isA(pfld.patch()); + return (cpp && cpp->coupled()); + }, + commsType + ); } } diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H index 0fb33d5ce1..bfd6b3f775 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricBoundaryField.H @@ -205,8 +205,12 @@ public: const UPstream::commsTypes commsType = UPstream::defaultCommsType ); - //- Evaluate boundary conditions on coupled patches of given type. - //- Uses specified or default comms. + //- Evaluate boundary conditions on coupled patches of the given type, + //- using specified or default comms. + // + // \tparam CoupledPatchType The coupled \b patch type that should + // be evaluated. For a \c void type, + // all coupled patch fields will be evaluated. template void evaluateCoupled ( diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C index 7667b78435..c2ae24ad0e 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.C @@ -63,8 +63,10 @@ void Foam::GeometricField::readFields if (dict.readIfPresent("referenceLevel", refLevel)) { - Field::operator+=(refLevel); + // Add to internal (primitive) field + this->field() += refLevel; + // Add to boundary fields forAll(boundaryField_, patchi) { boundaryField_[patchi] == boundaryField_[patchi] + refLevel; @@ -409,7 +411,7 @@ Foam::GeometricField::GeometricField boundaryField_(mesh.boundary(), *this, patchFieldType) { DebugInFunction - << "Copy construct from internal field" << nl << this->info() << endl; + << "Copy construct from primitive field" << nl << this->info() << endl; readIfPresent(); } @@ -430,7 +432,28 @@ Foam::GeometricField::GeometricField boundaryField_(mesh.boundary(), *this, patchFieldType) { DebugInFunction - << "Move construct from internal field" << nl << this->info() << endl; + << "Move construct from primitive field" << nl << this->info() << endl; + + readIfPresent(); +} + + +template class PatchField, class GeoMesh> +Foam::GeometricField::GeometricField +( + const IOobject& io, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield, + const word& patchFieldType +) +: + Internal(io, mesh, dims, tfield), + timeIndex_(this->time().timeIndex()), + boundaryField_(mesh.boundary(), *this, patchFieldType) +{ + DebugInFunction + << "Construct from tmp primitive field" << nl << this->info() << endl; readIfPresent(); } @@ -1391,10 +1414,7 @@ void Foam::GeometricField::operator= // Make sure any e.g. jump-cyclic are updated. boundaryFieldRef().evaluate_if ( - [](const auto& pfld) -> bool - { - return pfld.constraintOverride(); - } + [](const auto& pfld) { return pfld.constraintOverride(); } ); } @@ -1436,10 +1456,7 @@ void Foam::GeometricField::operator= // Make sure any e.g. jump-cyclic are updated. boundaryFieldRef().evaluate_if ( - [](const auto& pfld) -> bool - { - return pfld.constraintOverride(); - } + [](const auto& pfld) { return pfld.constraintOverride(); } ); } @@ -1456,10 +1473,7 @@ void Foam::GeometricField::operator= // Make sure any e.g. jump-cyclic are updated. boundaryFieldRef().evaluate_if ( - [](const auto& pfld) -> bool - { - return pfld.constraintOverride(); - } + [](const auto& pfld) { return pfld.constraintOverride(); } ); } @@ -1484,10 +1498,7 @@ void Foam::GeometricField::operator== // Make sure any e.g. jump-cyclic are updated. boundaryFieldRef().evaluate_if ( - [](const auto& pfld) -> bool - { - return pfld.constraintOverride(); - } + [](const auto& pfld) { return pfld.constraintOverride(); } ); } @@ -1504,10 +1515,7 @@ void Foam::GeometricField::operator== // Make sure any e.g. jump-cyclic are updated. boundaryFieldRef().evaluate_if ( - [](const auto& pfld) -> bool - { - return pfld.constraintOverride(); - } + [](const auto& pfld) { return pfld.constraintOverride(); } ); } @@ -1527,10 +1535,7 @@ void Foam::GeometricField::operator op \ \ boundaryFieldRef().evaluate_if \ ( \ - [](const auto& pfld) -> bool \ - { \ - return pfld.constraintOverride(); \ - } \ + [](const auto& pfld) { return pfld.constraintOverride(); } \ ); \ } \ \ @@ -1545,10 +1550,7 @@ void Foam::GeometricField::operator op \ \ boundaryFieldRef().evaluate_if \ ( \ - [](const auto& pfld) -> bool \ - { \ - return pfld.constraintOverride(); \ - } \ + [](const auto& pfld) { return pfld.constraintOverride(); } \ ); \ } \ \ @@ -1563,10 +1565,7 @@ void Foam::GeometricField::operator op \ \ boundaryFieldRef().evaluate_if \ ( \ - [](const auto& pfld) -> bool \ - { \ - return pfld.constraintOverride(); \ - } \ + [](const auto& pfld) { return pfld.constraintOverride(); } \ ); \ } diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H index fd5bf40049..2b6614bf88 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricField.H @@ -251,7 +251,7 @@ public: const PtrList>& ptfl ); - //- Move construct from internal field and a patch list to clone + //- Construct from internal field (tmp) and a patch list to clone GeometricField ( const IOobject& io, @@ -273,7 +273,7 @@ public: const PtrList>& ptfl ); - //- Copy construct from internal field, with specified patch type + //- Copy construct from primitive field, with specified patch type GeometricField ( const IOobject& io, @@ -283,7 +283,7 @@ public: const word& patchFieldType = PatchField::calculatedType() ); - //- Move construct from internal field, with specified patch type + //- Move construct from primitive field, with specified patch type GeometricField ( const IOobject& io, @@ -293,7 +293,17 @@ public: const word& patchFieldType = PatchField::calculatedType() ); - //- Copy construct from components + //- Construct from primitive field (tmp), with specified patch type + GeometricField + ( + const IOobject& io, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield, + const word& patchFieldType = PatchField::calculatedType() + ); + + //- Copy construct from primitive field and a patch list to clone GeometricField ( const IOobject& io, @@ -303,7 +313,7 @@ public: const PtrList>& ptfl ); - //- Move construct from internal field and a patch list to clone + //- Move construct from primitive field and a patch list to clone GeometricField ( const IOobject& io, @@ -319,7 +329,7 @@ public: const IOobject& io, const Mesh& mesh, const dimensionSet& dims, - const tmp>& tiField, + const tmp>& tfield, const PtrList>& ptfl ); @@ -508,6 +518,37 @@ public: const word& patchFieldType = PatchField::calculatedType() ); + //- Return tmp field (NO_READ, NO_WRITE) + //- from name, mesh, dimensions, tmp of primitive field + //- and patch type. + //- [Takes current timeName from the mesh registry]. + // For LEGACY_REGISTER, registration is determined by + // objectRegistry::is_cacheTemporaryObject(). + static tmp> New + ( + const word& name, + IOobjectOption::registerOption regOpt, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield, + const word& patchFieldType = PatchField::calculatedType() + ); + + //- Return tmp field (NO_READ, NO_WRITE) + //- from name, mesh, dimensions, tmp of primitive field + //- and patch type. + //- [Takes current timeName from the mesh registry]. + // Registration/persistence determined by + // objectRegistry::is_cacheTemporaryObject(). + static tmp> New + ( + const word& name, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield, + const word& patchFieldType = PatchField::calculatedType() + ); + //- Return tmp field (NO_READ, NO_WRITE) //- from name, mesh, dimensions, copy of internal field contents //- and patch list to clone. diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldNew.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldNew.C index 138d14d3b0..94521bb085 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldNew.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldNew.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2017 OpenFOAM Foundation - Copyright (C) 2019-2024 OpenCFD Ltd. + Copyright (C) 2019-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -215,6 +215,53 @@ Foam::GeometricField::New } +template class PatchField, class GeoMesh> +Foam::tmp> +Foam::GeometricField::New +( + const word& name, + IOobjectOption::registerOption regOpt, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield, + const word& patchFieldType +) +{ + return GeometricField::New_impl + ( + regOpt, + name, + mesh, + dims, + tfield, + patchFieldType + ); +} + + +template class PatchField, class GeoMesh> +Foam::tmp> +Foam::GeometricField::New +( + const word& name, + const Mesh& mesh, + const dimensionSet& dims, + const tmp>& tfield, + const word& patchFieldType +) +{ + return GeometricField::New_impl + ( + IOobjectOption::LEGACY_REGISTER, + name, + mesh, + dims, + tfield, + patchFieldType + ); +} + + template class PatchField, class GeoMesh> Foam::tmp> Foam::GeometricField::New diff --git a/src/finiteVolume/fvMesh/wallDist/patchDistMethods/meshWaveAddressing/meshWaveAddressingPatchDistMethod.C b/src/finiteVolume/fvMesh/wallDist/patchDistMethods/meshWaveAddressing/meshWaveAddressingPatchDistMethod.C index 8ffaac012c..c68d5b2bf0 100644 --- a/src/finiteVolume/fvMesh/wallDist/patchDistMethods/meshWaveAddressing/meshWaveAddressingPatchDistMethod.C +++ b/src/finiteVolume/fvMesh/wallDist/patchDistMethods/meshWaveAddressing/meshWaveAddressingPatchDistMethod.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2023 OpenCFD Ltd. + Copyright (C) 2023-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -88,12 +88,14 @@ bool Foam::patchDistMethods::meshWaveAddressing::correct // since the supplied options (wall patchIDs and correctWalls) // are not assumed to be different from the defaults of other usage. + const labelList patchIds(patchIDs_.sortedToc()); + // Calculate distance and addressing const auto& wDist = wallDistAddressing::New ( "wall", mesh_, - patchIDs_.sortedToc(), + patchIds, correctWalls_ ); @@ -102,31 +104,18 @@ bool Foam::patchDistMethods::meshWaveAddressing::correct // Note: copying value only so might not be consistent with supplied // patch types (e.g. zeroGradient when called from wallDist). Assume // only affected ones are the supplied patches ... - { - auto& bfld = y.boundaryFieldRef(); - const label startOfRequests = UPstream::nRequests(); - for (const label patchi : patchIDs_) - { - bfld[patchi].initEvaluate(UPstream::commsTypes::nonBlocking); - } - // Wait for outstanding requests - UPstream::waitRequests(startOfRequests); - - for (const label patchi : patchIDs_) - { - bfld[patchi].evaluate(UPstream::commsTypes::nonBlocking); - } - } + y.boundaryFieldRef().evaluateSelected(patchIds); // Only calculate n if the field is defined if (notNull(n)) { - for (const label patchi : patchIDs_) + auto& bfld = n.boundaryFieldRef(); + + for (const label patchi : patchIds) { - auto& pnf = n.boundaryFieldRef()[patchi]; - pnf == pnf.patch().nf(); + bfld[patchi] == bfld[patchi].patch().nf(); } // No problem with inconsistency as for y (see above) since doing diff --git a/src/functionObjects/field/cellDecomposer/cellDecomposerTemplates.C b/src/functionObjects/field/cellDecomposer/cellDecomposerTemplates.C index 765559fc29..f99bc2817e 100644 --- a/src/functionObjects/field/cellDecomposer/cellDecomposerTemplates.C +++ b/src/functionObjects/field/cellDecomposer/cellDecomposerTemplates.C @@ -39,79 +39,17 @@ License // GeometricField& fld //) const //{ -// auto& fldBf = fld.boundaryFieldRef(); -// -// const UPstream::commsTypes commsType = UPstream::defaultCommsType; -// const label startOfRequests = UPstream::nRequests(); -// -// if +// fld.boundaryFieldRef().evaluate_if // ( -// commsType == UPstream::commsTypes::blocking -// || commsType == UPstream::commsTypes::nonBlocking -// ) -// { -// forAll(fldBf, patchi) +// [](const auto& pfld) -> bool // { -// fvPatchField& tgtField = fldBf[patchi]; -// -// if +// return // ( -// tgtField.type() == tgtField.patch().patch().type() -// && polyPatch::constraintType(tgtField.patch().patch().type()) -// ) -// { -// tgtField.initEvaluate(commsType); -// } +// pfld.type() == pfld.patch().patch().type() +// && polyPatch::constraintType(pfld.patch().patch().type()) +// ); // } -// -// // Wait for outstanding requests -// if (commsType == UPstream::commsTypes::nonBlocking) -// { -// UPstream::waitRequests(startOfRequests); -// } -// -// forAll(fldBf, patchi) -// { -// fvPatchField& tgtField = fldBf[patchi]; -// -// if -// ( -// tgtField.type() == tgtField.patch().patch().type() -// && polyPatch::constraintType(tgtField.patch().patch().type()) -// ) -// { -// tgtField.evaluate(commsType); -// } -// } -// } -// else if (commsType == UPstream::commsTypes::scheduled) -// { -// const lduSchedule& patchSchedule = -// fld.mesh().globalData().patchSchedule(); -// -// for (const auto& schedEval : patchSchedule) -// { -// const label patchi = schedEval.patch; -// -// fvPatchField& tgtField = fldBf[patchi]; -// -// if -// ( -// tgtField.type() == tgtField.patch().patch().type() -// && polyPatch::constraintType(tgtField.patch().patch().type()) -// ) -// { -// if (schedEval.init) -// { -// tgtField.initEvaluate(commsType); -// } -// else -// { -// tgtField.evaluate(commsType); -// } -// } -// } -// } +// ); //} template diff --git a/src/functionObjects/field/mapFields/mapFieldsTemplates.C b/src/functionObjects/field/mapFields/mapFieldsTemplates.C index 40536b9dba..741cbdc04a 100644 --- a/src/functionObjects/field/mapFields/mapFieldsTemplates.C +++ b/src/functionObjects/field/mapFields/mapFieldsTemplates.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2016-2022 OpenCFD Ltd. + Copyright (C) 2016-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -36,72 +36,18 @@ void Foam::functionObjects::mapFields::evaluateConstraintTypes GeometricField& fld ) const { - auto& bfld = fld.boundaryFieldRef(); - - const UPstream::commsTypes commsType = UPstream::defaultCommsType; - - if + fld.boundaryFieldRef().evaluate_if ( - commsType == UPstream::commsTypes::buffered - || commsType == UPstream::commsTypes::nonBlocking - ) - { - const label startOfRequests = UPstream::nRequests(); - - for (auto& pfld : bfld) + [](const auto& pfld) -> bool { - if + return ( pfld.type() == pfld.patch().patch().type() && polyPatch::constraintType(pfld.patch().patch().type()) - ) - { - pfld.initEvaluate(commsType); - } - } - - // Wait for outstanding requests (non-blocking) - UPstream::waitRequests(startOfRequests); - - for (auto& pfld : bfld) - { - if - ( - pfld.type() == pfld.patch().patch().type() - && polyPatch::constraintType(pfld.patch().patch().type()) - ) - { - pfld.evaluate(commsType); - } - } - } - else if (commsType == UPstream::commsTypes::scheduled) - { - const lduSchedule& patchSchedule = - fld.mesh().globalData().patchSchedule(); - - for (const auto& schedEval : patchSchedule) - { - const label patchi = schedEval.patch; - auto& pfld = bfld[patchi]; - - if - ( - pfld.type() == pfld.patch().patch().type() - && polyPatch::constraintType(pfld.patch().patch().type()) - ) - { - if (schedEval.init) - { - pfld.initEvaluate(commsType); - } - else - { - pfld.evaluate(commsType); - } - } - } - } + ); + }, + UPstream::defaultCommsType + ); } diff --git a/src/overset/cellCellStencil/cellCellStencil/cellCellStencilTemplates.C b/src/overset/cellCellStencil/cellCellStencil/cellCellStencilTemplates.C index a93838a462..50c2e6e359 100644 --- a/src/overset/cellCellStencil/cellCellStencil/cellCellStencilTemplates.C +++ b/src/overset/cellCellStencil/cellCellStencil/cellCellStencilTemplates.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2018-2023 OpenCFD Ltd. + Copyright (C) 2018-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -182,31 +182,16 @@ void Foam::cellCellStencil::correctBoundaryConditions GeoField& psi ) { - // Version of GeoField::correctBoundaryConditions that exclude evaluation - // of oversetFvPatchFields + // correctBoundaryConditions excluding oversetFvPatchFields - auto& bfld = psi.boundaryFieldRef(); - - const label startOfRequests = UPstream::nRequests(); - - for (auto& pfld : bfld) - { - if (!isA(pfld)) + psi.boundaryFieldRef().evaluate_if + ( + [](const auto& pfld) { - pfld.initEvaluate(UPstream::commsTypes::nonBlocking); - } - } - - // Wait for outstanding requests (non-blocking) - UPstream::waitRequests(startOfRequests); - - for (auto& pfld : bfld) - { - if (!isA(pfld)) - { - pfld.evaluate(UPstream::commsTypes::nonBlocking); - } - } + return (!isA(pfld)); + }, + UPstream::commsTypes::nonBlocking + ); } diff --git a/src/overset/cellCellStencil/cellVolumeWeight/cellVolumeWeightCellCellStencil.C b/src/overset/cellCellStencil/cellVolumeWeight/cellVolumeWeightCellCellStencil.C index 892e2f652f..71614d2e06 100644 --- a/src/overset/cellCellStencil/cellVolumeWeight/cellVolumeWeightCellCellStencil.C +++ b/src/overset/cellCellStencil/cellVolumeWeight/cellVolumeWeightCellCellStencil.C @@ -1033,8 +1033,9 @@ bool Foam::cellCellStencils::cellVolumeWeight::update() oversetFvMeshBase::correctBoundaryConditions < volScalarField, - oversetFvPatchField - >(cellInterpolationWeight_.boundaryFieldRef(), false); + oversetFvPatchField, + false + >(cellInterpolationWeight_.boundaryFieldRef()); DynamicList