From 62982ffad6bce6c3a2ddd195f7a171b6e07a5f74 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Wed, 19 Jan 2022 14:23:09 +0000 Subject: [PATCH] ENH: snappyHexMesh: parallel consistency. Fixes #2331. --- .../meshRefinement/meshRefinement.C | 53 ++++++++++++++++++- .../meshRefinement/meshRefinement.H | 6 ++- .../meshRefinement/meshRefinementGapRefine.C | 20 +++++-- .../meshRefinement/meshRefinementRefine.C | 8 ++- 4 files changed, 80 insertions(+), 7 deletions(-) diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C index 3c19ea70872..0a3ffd140a8 100644 --- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C +++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2015-2021 OpenCFD Ltd. + Copyright (C) 2015-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -129,6 +129,57 @@ static const Foam::polyMesh::cellDecomposition // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +Foam::label Foam::meshRefinement::globalFaceCount(const labelList& elems) const +{ + //- Check for duplicates + const bitSet isElem(mesh_.nFaces(), elems); + if (label(isElem.count()) != elems.size()) + { + FatalErrorInFunction << "Problem Duplicates:" + << " isElem:" << isElem.count() + << " elems:" << elems.size() + << exit(FatalError); + } + + //- Check for same entries on coupled faces + { + bitSet isElem2(isElem); + syncTools::swapFaceList(mesh_, isElem2); + + for + ( + label facei = mesh_.nInternalFaces(); + facei < mesh_.nFaces(); + facei++ + ) + { + if (isElem2[facei] != isElem[facei]) + { + FatalErrorInFunction + << "at face:" << facei + << " at:" << mesh_.faceCentres()[facei] + << " patch:" << mesh_.boundaryMesh().whichPatch(facei) + << " isElem:" << isElem[facei] + << " isElem2:" << isElem2[facei] + << exit(FatalError); + } + } + } + + //- Count number of master elements + const bitSet isMaster(syncTools::getMasterFaces(mesh_)); + label count = 0; + for (const label i : isElem) + { + if (isMaster[i]) + { + count++; + } + } + return returnReduce(count, sumOp<label>()); +} + + void Foam::meshRefinement::calcNeighbourData ( labelList& neiLevel, diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H index 2afda90edbe..0e753f206bb 100644 --- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H +++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinement.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2015-2021 OpenCFD Ltd. + Copyright (C) 2015-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -229,6 +229,10 @@ private: const labelList& oldCellsToRefine ); + // Debug: count number of master-faces (and do some checking + // for consistency) + label globalFaceCount(const labelList& elems) const; + //- Calculate coupled boundary end vector and refinement level void calcNeighbourData(labelList& neiLevel, pointField& neiCc) const; diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinementGapRefine.C b/src/mesh/snappyHexMesh/meshRefinement/meshRefinementGapRefine.C index ceacaf9fcf1..01af0620329 100644 --- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinementGapRefine.C +++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinementGapRefine.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2015-2020 OpenCFD Ltd. + Copyright (C) 2015-2020,2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -1423,6 +1423,14 @@ Foam::label Foam::meshRefinement::markInternalGapRefinement // Spread it if (spreadGapSize) { + scalarField boundaryGapSize; + syncTools::swapBoundaryCellList + ( + mesh_, + detectedGapSize, + boundaryGapSize + ); + // Field on cells and faces List<transportData> cellData(mesh_.nCells()); List<transportData> faceData(mesh_.nFaces()); @@ -1466,7 +1474,13 @@ Foam::label Foam::meshRefinement::markInternalGapRefinement { label own = mesh_.faceOwner()[faceI]; - if (detectedGapSize[own] < GREAT) + scalar minSize = min + ( + detectedGapSize[own], + boundaryGapSize[faceI-mesh_.nInternalFaces()] + ); + + if (minSize < GREAT) { frontFaces.append(faceI); frontData.append @@ -1474,7 +1488,7 @@ Foam::label Foam::meshRefinement::markInternalGapRefinement transportData ( faceCentres[faceI], - detectedGapSize[own], + minSize, 0.0 ) ); diff --git a/src/mesh/snappyHexMesh/meshRefinement/meshRefinementRefine.C b/src/mesh/snappyHexMesh/meshRefinement/meshRefinementRefine.C index 69deef02ce4..0ee6267660d 100644 --- a/src/mesh/snappyHexMesh/meshRefinement/meshRefinementRefine.C +++ b/src/mesh/snappyHexMesh/meshRefinement/meshRefinementRefine.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2015-2021 OpenCFD Ltd. + Copyright (C) 2015-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -914,6 +914,9 @@ Foam::labelList Foam::meshRefinement::getRefineCandidateFaces const labelList& surfIndex = surfaceIndex(); + labelList boundaryRefineCell; + syncTools::swapBoundaryCellList(mesh_, refineCell, boundaryRefineCell); + forAll(surfIndex, faceI) { if (surfIndex[faceI] != -1) @@ -931,7 +934,8 @@ Foam::labelList Foam::meshRefinement::getRefineCandidateFaces } else { - if (refineCell[own] == -1) + const label bFacei = faceI - mesh_.nInternalFaces(); + if (refineCell[own] == -1 || boundaryRefineCell[bFacei] == -1) { testFaces[nTest++] = faceI; } -- GitLab