mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
BUG: dynamic refinement: unrefinement was not looking at protectedCell
cells that are protected should neither be refined nor unrefined. Fixed the logic: if any of the cells to-be-merged (=unrefined) is protected do not unrefine.
This commit is contained in:
@ -860,16 +860,62 @@ Foam::labelList Foam::dynamicRefineFvMesh::selectUnrefinePoints
|
||||
// All points that can be unrefined
|
||||
const labelList splitPoints(meshCutter_.getSplitPoints());
|
||||
|
||||
|
||||
const labelListList& pointCells = this->pointCells();
|
||||
|
||||
// If we have any protected cells make sure they also are not being
|
||||
// unrefined
|
||||
|
||||
PackedBoolList protectedPoint(nPoints());
|
||||
|
||||
if (protectedCell_.size())
|
||||
{
|
||||
// Get all points on a protected cell
|
||||
forAll(pointCells, pointI)
|
||||
{
|
||||
const labelList& pCells = pointCells[pointI];
|
||||
|
||||
forAll(pCells, pCellI)
|
||||
{
|
||||
label cellI = pCells[pCellI];
|
||||
|
||||
if (protectedCell_[cellI])
|
||||
{
|
||||
protectedPoint[pointI] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
syncTools::syncPointList
|
||||
(
|
||||
*this,
|
||||
protectedPoint,
|
||||
orEqOp<unsigned int>(),
|
||||
0U
|
||||
);
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "From "
|
||||
<< returnReduce(protectedCell_.count(), sumOp<label>())
|
||||
<< " protected cells found "
|
||||
<< returnReduce(protectedPoint.count(), sumOp<label>())
|
||||
<< " protected points." << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DynamicList<label> newSplitPoints(splitPoints.size());
|
||||
|
||||
forAll(splitPoints, i)
|
||||
{
|
||||
label pointI = splitPoints[i];
|
||||
|
||||
if (pFld[pointI] < unrefineLevel)
|
||||
if (!protectedPoint[pointI] && pFld[pointI] < unrefineLevel)
|
||||
{
|
||||
// Check that all cells are not marked
|
||||
const labelList& pCells = pointCells()[pointI];
|
||||
const labelList& pCells = pointCells[pointI];
|
||||
|
||||
bool hasMarked = false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user