From 3902ac285748ee99db2499408c652073eee7b470 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 10 Feb 2022 12:10:00 +0000 Subject: [PATCH] BUG: singleProcessorFaceSets: fix parallel/. Fixes #2359. The logic was not maintaining consistent sets of constraints on different processors. A single processor with a full match (very easy with 0 local faces) would invalidate adding the constraint. --- .../singleProcessorFaceSetsConstraint.C | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/parallel/decompose/decompositionMethods/decompositionConstraints/singleProcessorFaceSets/singleProcessorFaceSetsConstraint.C b/src/parallel/decompose/decompositionMethods/decompositionConstraints/singleProcessorFaceSets/singleProcessorFaceSetsConstraint.C index 6bda8bb952..65c0470893 100644 --- a/src/parallel/decompose/decompositionMethods/decompositionConstraints/singleProcessorFaceSets/singleProcessorFaceSetsConstraint.C +++ b/src/parallel/decompose/decompositionMethods/decompositionConstraints/singleProcessorFaceSets/singleProcessorFaceSetsConstraint.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2016 OpenFOAM Foundation - Copyright (C) 2018-2019 OpenCFD Ltd. + Copyright (C) 2018-2019,2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -143,7 +143,18 @@ void Foam::decompositionConstraints::singleProcessorFaceSets::add const labelList& faceLabels = specifiedProcessorFaces[setI]; for (const label facei : faceLabels) { - faceToSet[facei] = setI; + if (faceToSet[facei] == -1) + { + faceToSet[facei] = setI; + } + else if (faceToSet[facei] != setI) + { + WarningInFunction << "Face " << facei + << " at " << mesh.faceCentres()[facei] + << " is already in existing constraint " + << faceToSet[facei] + << endl; + } } } @@ -190,7 +201,7 @@ void Foam::decompositionConstraints::singleProcessorFaceSets::add } } - reduce(store, andOp()); + reduce(store, orOp()); if (store) {