Refactorisation in refinement polyMeshModifier
Moved extendMarkedCellsAcrossFaces and extendMarkedCellsAcrossPoints from refinement to meshTools.
This commit is contained in:
parent
0efa19e651
commit
cea60ab8ab
6 changed files with 150 additions and 134 deletions
|
@ -31,6 +31,7 @@ Author
|
|||
#include "faceSet.H"
|
||||
#include "pointSet.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "meshTools.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
|
@ -2042,7 +2043,7 @@ void Foam::polyhedralRefinement::setCellsToRefine
|
|||
// layers
|
||||
for (label i = 0; i < nRefinementBufferLayers_; ++i)
|
||||
{
|
||||
extendMarkedCellsAcrossFaces(refineCell);
|
||||
meshTools::extendMarkedCellsAcrossFaces(mesh_, refineCell);
|
||||
}
|
||||
|
||||
// Remove all cells that would exceed the maximum refinement level
|
||||
|
@ -2266,7 +2267,7 @@ void Foam::polyhedralRefinement::setSplitPointsToUnrefine
|
|||
// unrefinement buffer layers
|
||||
for (label i = 0; i < nUnrefinementBufferLayers_; ++i)
|
||||
{
|
||||
extendMarkedCellsAcrossPoints(protectedCell);
|
||||
meshTools::extendMarkedCellsAcrossPoints(mesh_, protectedCell);
|
||||
}
|
||||
|
||||
// Loop through all cells and if the cell should be protected, protect all
|
||||
|
|
|
@ -33,6 +33,7 @@ Author
|
|||
#include "emptyPolyPatch.H"
|
||||
#include "wedgePolyPatch.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "meshTools.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
|
@ -2601,7 +2602,7 @@ void Foam::prismatic2DRefinement::setCellsToRefine
|
|||
// layers
|
||||
for (label i = 0; i < nRefinementBufferLayers_; ++i)
|
||||
{
|
||||
extendMarkedCellsAcrossFaces(refineCell);
|
||||
meshTools::extendMarkedCellsAcrossFaces(mesh_, refineCell);
|
||||
}
|
||||
|
||||
// Remove all cells that exceed the maximum refinement level
|
||||
|
@ -2838,7 +2839,7 @@ void Foam::prismatic2DRefinement::setSplitPointsToUnrefine
|
|||
// unrefinement buffer layers
|
||||
for (label i = 0; i < nUnrefinementBufferLayers_; ++i)
|
||||
{
|
||||
extendMarkedCellsAcrossPoints(protectedCell);
|
||||
meshTools::extendMarkedCellsAcrossPoints(mesh_, protectedCell);
|
||||
}
|
||||
|
||||
// Loop through all cells and if the cell should be protected, protect all
|
||||
|
|
|
@ -66,130 +66,6 @@ void Foam::refinement::setInstance(const fileName& inst) const
|
|||
}
|
||||
|
||||
|
||||
void Foam::refinement::extendMarkedCellsAcrossFaces
|
||||
(
|
||||
boolList& markedCell
|
||||
) const
|
||||
{
|
||||
// Mark all faces for all marked cells
|
||||
const label nFaces = mesh_.nFaces();
|
||||
boolList markedFace(nFaces, false);
|
||||
|
||||
// Get mesh cells
|
||||
const cellList& meshCells = mesh_.cells();
|
||||
|
||||
// Loop through all cells
|
||||
forAll (markedCell, cellI)
|
||||
{
|
||||
if (markedCell[cellI])
|
||||
{
|
||||
// This cell is marked, get its faces
|
||||
const cell& cFaces = meshCells[cellI];
|
||||
|
||||
forAll (cFaces, i)
|
||||
{
|
||||
markedFace[cFaces[i]] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snyc the face list across processor boundaries
|
||||
syncTools::syncFaceList(mesh_, markedFace, orEqOp<bool>(), false);
|
||||
|
||||
// Get necessary mesh data
|
||||
const label nInternalFaces = mesh_.nInternalFaces();
|
||||
const labelList& owner = mesh_.faceOwner();
|
||||
const labelList& neighbour = mesh_.faceNeighbour();
|
||||
|
||||
// Internal faces
|
||||
for (label faceI = 0; faceI < nInternalFaces; ++faceI)
|
||||
{
|
||||
if (markedFace[faceI])
|
||||
{
|
||||
// Face is marked, mark both owner and neighbour if the maximum
|
||||
// refinement level is not exceeded
|
||||
const label& own = owner[faceI];
|
||||
const label& nei = neighbour[faceI];
|
||||
|
||||
// Mark owner and neighbour cells
|
||||
markedCell[own] = true;
|
||||
markedCell[nei] = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Boundary faces
|
||||
for (label faceI = nInternalFaces; faceI < nFaces; ++faceI)
|
||||
{
|
||||
if (markedFace[faceI])
|
||||
{
|
||||
// Face is marked, mark owner if the maximum refinement level is not
|
||||
// exceeded
|
||||
const label& own = owner[faceI];
|
||||
|
||||
// Mark owner
|
||||
markedCell[own] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::refinement::extendMarkedCellsAcrossPoints
|
||||
(
|
||||
boolList& markedCell
|
||||
) const
|
||||
{
|
||||
// Mark all points for all marked cells
|
||||
const label nPoints = mesh_.nPoints();
|
||||
boolList markedPoint(nPoints, false);
|
||||
|
||||
// Get cell points
|
||||
const labelListList& meshCellPoints = mesh_.cellPoints();
|
||||
|
||||
// Loop through all cells
|
||||
forAll (markedCell, cellI)
|
||||
{
|
||||
if (markedCell[cellI])
|
||||
{
|
||||
// This cell is marked, get its points
|
||||
const labelList& cPoints = meshCellPoints[cellI];
|
||||
|
||||
forAll (cPoints, i)
|
||||
{
|
||||
markedPoint[cPoints[i]] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snyc point list across processor boundaries
|
||||
syncTools::syncPointList
|
||||
(
|
||||
mesh_,
|
||||
markedPoint,
|
||||
orEqOp<bool>(),
|
||||
true, // Default value
|
||||
true // Apply separation for parallel cyclics
|
||||
);
|
||||
|
||||
// Get point cells
|
||||
const labelListList& meshPointCells = mesh_.pointCells();
|
||||
|
||||
// Loop through all points
|
||||
forAll (markedPoint, pointI)
|
||||
{
|
||||
if (markedPoint[pointI])
|
||||
{
|
||||
// This point is marked, mark all of its cells
|
||||
const labelList& pCells = meshPointCells[pointI];
|
||||
|
||||
forAll (pCells, i)
|
||||
{
|
||||
markedCell[pCells[i]] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Foam::label Foam::refinement::addFace
|
||||
(
|
||||
polyTopoChange& ref,
|
||||
|
|
|
@ -159,12 +159,6 @@ protected:
|
|||
//- Set file instance for cellLevel_ and pointLevel_
|
||||
void setInstance(const fileName& inst) const;
|
||||
|
||||
//- Extend marked cells across faces
|
||||
void extendMarkedCellsAcrossFaces(boolList& markedCell) const;
|
||||
|
||||
//- Extend marked cells across points
|
||||
void extendMarkedCellsAcrossPoints(boolList& markedCell) const;
|
||||
|
||||
|
||||
// Local topology modification functions (operate on cells/faces)
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ License
|
|||
#include "polyMesh.H"
|
||||
#include "hexMatcher.H"
|
||||
#include "faceZone.H"
|
||||
#include "syncTools.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
|
@ -927,4 +928,128 @@ void Foam::meshTools::setFaceInfo
|
|||
}
|
||||
|
||||
|
||||
void Foam::meshTools::extendMarkedCellsAcrossFaces
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
boolList& markedCell
|
||||
)
|
||||
{
|
||||
// Mark all faces for all marked cells
|
||||
const label nFaces = mesh.nFaces();
|
||||
boolList markedFace(nFaces, false);
|
||||
|
||||
// Get mesh cells
|
||||
const cellList& meshCells = mesh.cells();
|
||||
|
||||
// Loop through all cells
|
||||
forAll (markedCell, cellI)
|
||||
{
|
||||
if (markedCell[cellI])
|
||||
{
|
||||
// This cell is marked, get its faces
|
||||
const cell& cFaces = meshCells[cellI];
|
||||
|
||||
forAll (cFaces, i)
|
||||
{
|
||||
markedFace[cFaces[i]] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snyc the face list across processor boundaries
|
||||
syncTools::syncFaceList(mesh, markedFace, orEqOp<bool>(), false);
|
||||
|
||||
// Get necessary mesh data
|
||||
const label nInternalFaces = mesh.nInternalFaces();
|
||||
const labelList& owner = mesh.faceOwner();
|
||||
const labelList& neighbour = mesh.faceNeighbour();
|
||||
|
||||
// Internal faces
|
||||
for (label faceI = 0; faceI < nInternalFaces; ++faceI)
|
||||
{
|
||||
if (markedFace[faceI])
|
||||
{
|
||||
// Face is marked, mark both owner and neighbour
|
||||
const label& own = owner[faceI];
|
||||
const label& nei = neighbour[faceI];
|
||||
|
||||
// Mark owner and neighbour cells
|
||||
markedCell[own] = true;
|
||||
markedCell[nei] = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Boundary faces
|
||||
for (label faceI = nInternalFaces; faceI < nFaces; ++faceI)
|
||||
{
|
||||
if (markedFace[faceI])
|
||||
{
|
||||
// Face is marked, mark owner
|
||||
const label& own = owner[faceI];
|
||||
|
||||
// Mark owner
|
||||
markedCell[own] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::meshTools::extendMarkedCellsAcrossPoints
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
boolList& markedCell
|
||||
)
|
||||
{
|
||||
// Mark all points for all marked cells
|
||||
const label nPoints = mesh.nPoints();
|
||||
boolList markedPoint(nPoints, false);
|
||||
|
||||
// Get cell points
|
||||
const labelListList& meshCellPoints = mesh.cellPoints();
|
||||
|
||||
// Loop through all cells
|
||||
forAll (markedCell, cellI)
|
||||
{
|
||||
if (markedCell[cellI])
|
||||
{
|
||||
// This cell is marked, get its points
|
||||
const labelList& cPoints = meshCellPoints[cellI];
|
||||
|
||||
forAll (cPoints, i)
|
||||
{
|
||||
markedPoint[cPoints[i]] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Snyc point list across processor boundaries
|
||||
syncTools::syncPointList
|
||||
(
|
||||
mesh,
|
||||
markedPoint,
|
||||
orEqOp<bool>(),
|
||||
true, // Default value
|
||||
true // Apply separation for parallel cyclics
|
||||
);
|
||||
|
||||
// Get point cells
|
||||
const labelListList& meshPointCells = mesh.pointCells();
|
||||
|
||||
// Loop through all points
|
||||
forAll (markedPoint, pointI)
|
||||
{
|
||||
if (markedPoint[pointI])
|
||||
{
|
||||
// This point is marked, mark all of its cells
|
||||
const labelList& pCells = meshPointCells[pointI];
|
||||
|
||||
forAll (pCells, i)
|
||||
{
|
||||
markedCell[pCells[i]] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
|
|
@ -318,6 +318,25 @@ namespace meshTools
|
|||
label& zoneFlip
|
||||
);
|
||||
|
||||
|
||||
// Mark-up of mesh bits. Relocated from refinement polyMeshModifier
|
||||
|
||||
//- Extend marked cells across faces given a bool list of already marked
|
||||
// cells
|
||||
void extendMarkedCellsAcrossFaces
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
boolList& markedCell
|
||||
);
|
||||
|
||||
//- Extend marked cells across points given a bool list of already
|
||||
// marked cells
|
||||
void extendMarkedCellsAcrossPoints
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
boolList& markedCell
|
||||
);
|
||||
|
||||
} // End namespace meshTools
|
||||
|
||||
|
||||
|
|
Reference in a new issue