diff --git a/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.C b/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.C index ab4b416a860741879389f4a03a8c0394c0bdd13e..23be9674c62621ff19cfc836e1420796bdf4d855 100644 --- a/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.C +++ b/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.C @@ -170,6 +170,7 @@ void Foam::cellCellStencil::globalCellCells ( const globalIndex& gi, const polyMesh& mesh, + const boolList& isValidDonor, const labelList& selectedCells, labelListList& cellCells, pointListList& cellCellCentres @@ -206,6 +207,14 @@ void Foam::cellCellStencil::globalCellCells nbrCellCentres ); + boolList nbrIsValidDonor; + syncTools::swapBoundaryCellList + ( + mesh, + isValidDonor, + nbrIsValidDonor + ); + // 2. Collect cell and all its neighbours @@ -224,8 +233,11 @@ void Foam::cellCellStencil::globalCellCells label compacti = 0; // First entry is cell itself - stencil[compacti] = globalCellIDs[celli]; - stencilPoints[compacti++] = cellCentres[celli]; + if (isValidDonor[celli]) + { + stencil[compacti] = globalCellIDs[celli]; + stencilPoints[compacti++] = cellCentres[celli]; + } // Other entries are cell neighbours forAll(cFaces, i) @@ -235,10 +247,12 @@ void Foam::cellCellStencil::globalCellCells label own = faceOwner[facei]; label nbrCelli; point nbrCc; + bool isValid = false; if (bFacei >= 0) { nbrCelli = nbrGlobalCellIDs[bFacei]; nbrCc = nbrCellCentres[bFacei]; + isValid = nbrIsValidDonor[bFacei]; } else { @@ -246,20 +260,25 @@ void Foam::cellCellStencil::globalCellCells { nbrCelli = gi.toGlobal(own); nbrCc = cellCentres[own]; + isValid = isValidDonor[own]; } else { label nei = faceNeighbour[facei]; nbrCelli = gi.toGlobal(nei); nbrCc = cellCentres[nei]; + isValid = isValidDonor[nei]; } } - SubList<label> current(stencil, compacti); - if (!current.found(nbrCelli)) + if (isValid) { - stencil[compacti] = nbrCelli; - stencilPoints[compacti++] = nbrCc; + SubList<label> current(stencil, compacti); + if (!current.found(nbrCelli)) + { + stencil[compacti] = nbrCelli; + stencilPoints[compacti++] = nbrCc; + } } } stencil.setSize(compacti); diff --git a/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.H b/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.H index af415228b89111479624f4ca6e438c2bed571c98..a40fe172fbd16adb87f5f61919f210f9f24f3f40 100644 --- a/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.H +++ b/src/overset/cellCellStencil/cellCellStencil/cellCellStencil.H @@ -195,6 +195,7 @@ public: ( const globalIndex& gi, const polyMesh& mesh, + const boolList& isValidDonor, const labelList& selectedCells, labelListList& cellCells, pointListList& cellCellCentres diff --git a/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C b/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C index 68fbef62780787b0644f9024b6588cdb9116243f..828f81f0a00782eafbe0d7b32a4f94a684730e49 100644 --- a/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C +++ b/src/overset/cellCellStencil/inverseDistance/inverseDistanceCellCellStencil.C @@ -1434,6 +1434,16 @@ void Foam::cellCellStencils::inverseDistance::createStencil // Special value for unused points const vector greatPoint(GREAT, GREAT, GREAT); + boolList isValidDonor(mesh_.nCells(), true); + forAll(cellTypes_, celli) + { + if (cellTypes_[celli] == HOLE) + { + isValidDonor[celli] = false; + } + } + + // Has acceptor been handled already? bitSet doneAcceptor(interpolationCells_.size()); @@ -1513,6 +1523,7 @@ void Foam::cellCellStencils::inverseDistance::createStencil ( globalCells, mesh_, + isValidDonor, donorCells, donorCellCells, donorCellCentres