First part of compilation fixes for polyhedralRefinement class
Still need to reorganize faceRemover engine such that it works with polyTopoChange alongside (preferably) or instead of directTopoChange
This commit is contained in:
parent
912d801aa9
commit
b735b5829f
3 changed files with 171 additions and 92 deletions
|
@ -37,6 +37,9 @@ $(slidingInterface)/decoupleSlidingInterface.C
|
||||||
repatchCoverage = $(polyMeshModifiers)/repatchCoverage
|
repatchCoverage = $(polyMeshModifiers)/repatchCoverage
|
||||||
$(repatchCoverage)/repatchCoverage.C
|
$(repatchCoverage)/repatchCoverage.C
|
||||||
|
|
||||||
|
polyhedralRefinement = $(polyMeshModifiers)/polyhedralRefinement
|
||||||
|
$(polyhedralRefinement)/polyhedralRefinement.C
|
||||||
|
|
||||||
polyTopoChange/polyTopoChange/polyTopoChange.C
|
polyTopoChange/polyTopoChange/polyTopoChange.C
|
||||||
polyTopoChange/polyTopoChange/actions/topoAction/topoActions.C
|
polyTopoChange/polyTopoChange/actions/topoAction/topoActions.C
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,12 @@ Notes
|
||||||
#include "foamTime.H"
|
#include "foamTime.H"
|
||||||
#include "primitiveMesh.H"
|
#include "primitiveMesh.H"
|
||||||
#include "polyTopoChange.H"
|
#include "polyTopoChange.H"
|
||||||
|
#include "syncTools.H"
|
||||||
|
#include "meshTools.H"
|
||||||
|
#include "cellSet.H"
|
||||||
|
#include "faceSet.H"
|
||||||
|
#include "pointSet.H"
|
||||||
|
#include "mapPolyMesh.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
@ -91,7 +97,7 @@ Foam::label Foam::polyhedralRefinement::getAnchorLevel
|
||||||
|
|
||||||
if (f.size() <= 3)
|
if (f.size() <= 3)
|
||||||
{
|
{
|
||||||
return pointLevel_[f[findMinMaxLevel(f, maxOp<label>())]];
|
return pointLevel_[f[findMaxLevel(f)]];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -113,7 +119,7 @@ Foam::label Foam::polyhedralRefinement::getAnchorLevel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::polyhedralRefinement::calcLevel0EdgeLength() const
|
void Foam::polyhedralRefinement::calcLevel0EdgeLength()
|
||||||
{
|
{
|
||||||
if (cellLevel_.size() != mesh_.nCells())
|
if (cellLevel_.size() != mesh_.nCells())
|
||||||
{
|
{
|
||||||
|
@ -185,7 +191,7 @@ Foam::scalar Foam::polyhedralRefinement::calcLevel0EdgeLength() const
|
||||||
(
|
(
|
||||||
mesh_,
|
mesh_,
|
||||||
edgeLevel,
|
edgeLevel,
|
||||||
ifEqEqOp<labelMax>(),
|
ifEqEqAssignFirstOp<label, labelMax>(),
|
||||||
labelMin,
|
labelMin,
|
||||||
false // no separation
|
false // no separation
|
||||||
);
|
);
|
||||||
|
@ -322,7 +328,7 @@ Foam::scalar Foam::polyhedralRefinement::calcLevel0EdgeLength() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::polyhedralRefinement::setInstance(const fileName& inst)
|
void Foam::polyhedralRefinement::setInstance(const fileName& inst) const
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
|
@ -396,7 +402,7 @@ void Foam::polyhedralRefinement::extendMarkedCells(boolList& refineCell) const
|
||||||
void Foam::polyhedralRefinement::setPolyhedralRefinement
|
void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
(
|
(
|
||||||
polyTopoChange& ref
|
polyTopoChange& ref
|
||||||
)
|
) const
|
||||||
{
|
{
|
||||||
// Note: assumes that cellsToRefine_ are set prior to the function call
|
// Note: assumes that cellsToRefine_ are set prior to the function call
|
||||||
|
|
||||||
|
@ -410,20 +416,9 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Pout<< "polyhedralRefinement::setPolyhedralRefinement(...)" << nl
|
|
||||||
<< "Checking initial mesh before setting refinement" << endl;
|
|
||||||
|
|
||||||
checkMesh();
|
|
||||||
}
|
|
||||||
|
|
||||||
// New point and cell levels. Insert original lists into dynamic list for
|
// New point and cell levels. Insert original lists into dynamic list for
|
||||||
// easy insertion. Note: dynamic lists shall be resized with multiplier 2 on
|
// easy insertion. Note: dynamic lists shall be resized with multiplier 2 on
|
||||||
// the first insertion using operator() for non existing element. Note: I'm
|
// the first insertion using operator() for non existing element
|
||||||
// pretty sure that we don't need to update newCellLevel for new cells and
|
|
||||||
// newPointLevel for new points here as this information will be correctly
|
|
||||||
// set in updateMesh member function after the topo change is performed.
|
|
||||||
dynamicLabelList newCellLevel(cellLevel_);
|
dynamicLabelList newCellLevel(cellLevel_);
|
||||||
dynamicLabelList newPointLevel(pointLevel_);
|
dynamicLabelList newPointLevel(pointLevel_);
|
||||||
|
|
||||||
|
@ -640,7 +635,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Pout<< "polyhedralRefinement::setPolyhedralRefinement(...)" <<
|
Pout<< "polyhedralRefinement::setPolyhedralRefinement(...)"
|
||||||
<< "Writing centres of edges to split to file " << str.name()
|
<< "Writing centres of edges to split to file " << str.name()
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
@ -673,9 +668,12 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
const labelList& meshFaceOwner = mesh_.faceOwner();
|
const labelList& meshFaceOwner = mesh_.faceOwner();
|
||||||
const labelList& meshFaceNeighbour = mesh_.faceNeighbour();
|
const labelList& meshFaceNeighbour = mesh_.faceNeighbour();
|
||||||
|
|
||||||
|
const label nFaces = mesh_.nFaces();
|
||||||
|
const label nInternalFaces = mesh_.nInternalFaces();
|
||||||
|
|
||||||
// Internal faces: look at cells on both sides. Uniquely determined since
|
// Internal faces: look at cells on both sides. Uniquely determined since
|
||||||
// the face itself is guaranteed to be same level as most refined neighbour
|
// the face itself is guaranteed to be same level as most refined neighbour
|
||||||
for (label faceI = 0; faceI < mesh_.nInternalFaces(); ++faceI)
|
for (label faceI = 0; faceI < nInternalFaces; ++faceI)
|
||||||
{
|
{
|
||||||
// Note: no need to check whether the face has valid anchor level since
|
// Note: no need to check whether the face has valid anchor level since
|
||||||
// all faces can be split
|
// all faces can be split
|
||||||
|
@ -709,11 +707,11 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
// Memory management
|
// Memory management
|
||||||
{
|
{
|
||||||
// Create list for swapping boundary data
|
// Create list for swapping boundary data
|
||||||
labelList newNeiLevel(mesh_.nFaces() - mesh_.nInternalFaces());
|
labelList newNeiLevel(nFaces - nInternalFaces);
|
||||||
|
|
||||||
forAll(newNeiLevel, i)
|
forAll(newNeiLevel, i)
|
||||||
{
|
{
|
||||||
const label& own = meshFaceOwner[i + mesh_.nInternalFaces()];
|
const label& own = meshFaceOwner[i + nInternalFaces];
|
||||||
const label& ownLevel = cellLevel_[own];
|
const label& ownLevel = cellLevel_[own];
|
||||||
const label newOwnLevel =
|
const label newOwnLevel =
|
||||||
ownLevel + (cellMidPoint[own] > -1 ? 1 : 0);
|
ownLevel + (cellMidPoint[own] > -1 ? 1 : 0);
|
||||||
|
@ -727,7 +725,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
forAll(newNeiLevel, i)
|
forAll(newNeiLevel, i)
|
||||||
{
|
{
|
||||||
// Get face index
|
// Get face index
|
||||||
const label faceI = i + mesh_.nInternalFaces();
|
const label faceI = i + nInternalFaces;
|
||||||
|
|
||||||
// Note: no need to check whether the face has valid anchor level
|
// Note: no need to check whether the face has valid anchor level
|
||||||
// since all faces can be split
|
// since all faces can be split
|
||||||
|
@ -776,7 +774,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
// Allocate storage for boundary face points
|
// Allocate storage for boundary face points
|
||||||
pointField bFaceMids
|
pointField bFaceMids
|
||||||
(
|
(
|
||||||
mesh_.nFaces() - mesh_.nInternalFaces(),
|
nFaces - nInternalFaces,
|
||||||
point(-GREAT, -GREAT, -GREAT)
|
point(-GREAT, -GREAT, -GREAT)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -784,7 +782,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
forAll(bFaceMids, i)
|
forAll(bFaceMids, i)
|
||||||
{
|
{
|
||||||
// Get face index
|
// Get face index
|
||||||
const label faceI = i + mesh_.nInternalFaces();
|
const label faceI = i + nInternalFaces;
|
||||||
|
|
||||||
if (faceMidPoint[faceI] > -1)
|
if (faceMidPoint[faceI] > -1)
|
||||||
{
|
{
|
||||||
|
@ -820,9 +818,9 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
polyAddPoint
|
polyAddPoint
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
faceI < mesh_.nInternalFaces()
|
faceI < nInternalFaces
|
||||||
? meshFaceCentres[faceI]
|
? meshFaceCentres[faceI]
|
||||||
: bFaceMids[faceI - mesh_.nInternalFaces()]
|
: bFaceMids[faceI - nInternalFaces]
|
||||||
), // Point
|
), // Point
|
||||||
f[0], // Master point
|
f[0], // Master point
|
||||||
-1, // Zone for point
|
-1, // Zone for point
|
||||||
|
@ -853,7 +851,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
}
|
}
|
||||||
|
|
||||||
Pout<< "polyhedralRefinement::setPolyhedralRefinement(...)" << nl
|
Pout<< "polyhedralRefinement::setPolyhedralRefinement(...)" << nl
|
||||||
<< "Writing " splitFaces.size()
|
<< "Writing " << splitFaces.size()
|
||||||
<< " faces to split to faceSet " << splitFaces.objectPath()
|
<< " faces to split to faceSet " << splitFaces.objectPath()
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
|
@ -1294,7 +1292,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
|
|
||||||
// The point with the lowest level should be an anchor
|
// The point with the lowest level should be an anchor
|
||||||
// point of the neighbouring cells.
|
// point of the neighbouring cells.
|
||||||
const label anchorFp = findMinMaxLevel(f, minOp<label>());
|
const label anchorFp = findMinLevel(f);
|
||||||
|
|
||||||
label own, nei;
|
label own, nei;
|
||||||
setNewFaceNeighbours
|
setNewFaceNeighbours
|
||||||
|
@ -1378,7 +1376,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
|
|
||||||
// The point with the lowest level should be an anchor point of the
|
// The point with the lowest level should be an anchor point of the
|
||||||
// neighbouring cells
|
// neighbouring cells
|
||||||
label anchorFp = findMinMaxLevel(f, maxOp<label>());
|
label anchorFp = findMaxLevel(f);
|
||||||
|
|
||||||
label own, nei;
|
label own, nei;
|
||||||
setNewFaceNeighbours
|
setNewFaceNeighbours
|
||||||
|
@ -1518,7 +1516,7 @@ void Foam::polyhedralRefinement::setPolyhedralRefinement
|
||||||
void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
||||||
(
|
(
|
||||||
polyTopoChange& ref
|
polyTopoChange& ref
|
||||||
)
|
) const
|
||||||
{
|
{
|
||||||
// It is an error to attempt to unrefine if the history is inactive
|
// It is an error to attempt to unrefine if the history is inactive
|
||||||
if (!history_.active())
|
if (!history_.active())
|
||||||
|
@ -1526,7 +1524,7 @@ void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"polyhedralRefinement::setPolyhedralUnrefinement"
|
"polyhedralRefinement::setPolyhedralUnrefinement"
|
||||||
<< "(polyTopoChange& ref)"
|
"(polyTopoChange& ref)"
|
||||||
) << "Attempt to unrefine polyhedral cells without storing"
|
) << "Attempt to unrefine polyhedral cells without storing"
|
||||||
<< " the refinement history. This is not allowed."
|
<< " the refinement history. This is not allowed."
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
|
@ -1540,9 +1538,8 @@ void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
||||||
Pout<< "polyhedralRefinement::setPolyhedralUnrefinement"
|
Pout<< "polyhedralRefinement::setPolyhedralUnrefinement"
|
||||||
<< "(polyTopoChange& ref)"
|
<< "(polyTopoChange& ref)"
|
||||||
<< nl
|
<< nl
|
||||||
<< "Checking initial mesh before setting unrefinement." << endl;
|
<< "Checking validity of cellLevel before setting unrefinement."
|
||||||
|
<< endl;
|
||||||
checkMesh();
|
|
||||||
|
|
||||||
forAll(cellLevel_, cellI)
|
forAll(cellLevel_, cellI)
|
||||||
{
|
{
|
||||||
|
@ -1559,7 +1556,12 @@ void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write split points into a point set
|
// Write split points into a point set
|
||||||
pointSet pSet(mesh_, "splitPoints", labelHashSet(splitPointLabels_));
|
pointSet pSet
|
||||||
|
(
|
||||||
|
mesh_,
|
||||||
|
"splitPoints",
|
||||||
|
labelHashSet(splitPointsToUnrefine_)
|
||||||
|
);
|
||||||
pSet.write();
|
pSet.write();
|
||||||
|
|
||||||
// Write split point cells into a cell set
|
// Write split point cells into a cell set
|
||||||
|
@ -1567,13 +1569,13 @@ void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
||||||
(
|
(
|
||||||
mesh_,
|
mesh_,
|
||||||
"splitPointCells",
|
"splitPointCells",
|
||||||
splitPointLabels_.size()
|
splitPointsToUnrefine_.size()
|
||||||
);
|
);
|
||||||
|
|
||||||
forAll(splitPointLabels, i)
|
forAll(splitPointsToUnrefine_, i)
|
||||||
{
|
{
|
||||||
// Get point cells and insert them into cell set
|
// Get point cells and insert them into cell set
|
||||||
const labelList& pCells = meshPointCells[splitPointLabels_[i]];
|
const labelList& pCells = meshPointCells[splitPointsToUnrefine_[i]];
|
||||||
|
|
||||||
forAll(pCells, j)
|
forAll(pCells, j)
|
||||||
{
|
{
|
||||||
|
@ -1603,7 +1605,7 @@ void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
||||||
{
|
{
|
||||||
// Collect split faces in the hast set, guess size to prevent excessive
|
// Collect split faces in the hast set, guess size to prevent excessive
|
||||||
// resizing
|
// resizing
|
||||||
labelHashSet splitFaces(12*splitPointLabels_.size());
|
labelHashSet splitFaces(12*splitPointsToUnrefine_.size());
|
||||||
|
|
||||||
// Get point faces
|
// Get point faces
|
||||||
const labelListList& meshPointFaces = mesh_.pointFaces();
|
const labelListList& meshPointFaces = mesh_.pointFaces();
|
||||||
|
@ -1648,7 +1650,7 @@ void Foam::polyhedralRefinement::setPolyhedralUnrefinement
|
||||||
facesToRemove,
|
facesToRemove,
|
||||||
cellRegion,
|
cellRegion,
|
||||||
cellRegionMaster,
|
cellRegionMaster,
|
||||||
meshMod
|
ref
|
||||||
);
|
);
|
||||||
|
|
||||||
// Remove the n cells that originated from merging around the split point
|
// Remove the n cells that originated from merging around the split point
|
||||||
|
@ -1717,7 +1719,7 @@ Foam::label Foam::polyhedralRefinement::addFace
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Ordering is flipped, reverse face and flip owner/neighbour
|
// Ordering is flipped, reverse face and flip owner/neighbour
|
||||||
newFaceI = meshMod.setAction
|
newFaceI = ref.setAction
|
||||||
(
|
(
|
||||||
polyAddFace
|
polyAddFace
|
||||||
(
|
(
|
||||||
|
@ -1772,7 +1774,7 @@ Foam::label Foam::polyhedralRefinement::addInternalFace
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// This is not an internal face. Add face out of nothing
|
// This is not an internal face. Add face out of nothing
|
||||||
return meshMod.setAction
|
return ref.setAction
|
||||||
(
|
(
|
||||||
polyAddFace
|
polyAddFace
|
||||||
(
|
(
|
||||||
|
@ -1829,7 +1831,7 @@ void Foam::polyhedralRefinement::modifyFace
|
||||||
if ((nei == -1) || (own < nei))
|
if ((nei == -1) || (own < nei))
|
||||||
{
|
{
|
||||||
// Ordering is ok, add the face
|
// Ordering is ok, add the face
|
||||||
meshMod.setAction
|
ref.setAction
|
||||||
(
|
(
|
||||||
polyModifyFace
|
polyModifyFace
|
||||||
(
|
(
|
||||||
|
@ -1848,7 +1850,7 @@ void Foam::polyhedralRefinement::modifyFace
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Ordering is flipped, reverse face and flip owner/neighbour
|
// Ordering is flipped, reverse face and flip owner/neighbour
|
||||||
meshMod.setAction
|
ref.setAction
|
||||||
(
|
(
|
||||||
polyModifyFace
|
polyModifyFace
|
||||||
(
|
(
|
||||||
|
@ -2097,7 +2099,7 @@ void Foam::polyhedralRefinement::createInternalFaces
|
||||||
|
|
||||||
midPointToAnchors,
|
midPointToAnchors,
|
||||||
midPointToFaceMids,
|
midPointToFaceMids,
|
||||||
meshMod
|
ref
|
||||||
);
|
);
|
||||||
|
|
||||||
if (newFaceI != -1)
|
if (newFaceI != -1)
|
||||||
|
@ -2269,7 +2271,7 @@ void Foam::polyhedralRefinement::walkFaceToMid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::polyRef::walkFaceFromMid
|
void Foam::polyhedralRefinement::walkFaceFromMid
|
||||||
(
|
(
|
||||||
const labelList& edgeMidPoint,
|
const labelList& edgeMidPoint,
|
||||||
const label cLevel,
|
const label cLevel,
|
||||||
|
@ -2324,6 +2326,52 @@ void Foam::polyRef::walkFaceFromMid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::polyhedralRefinement::findMinLevel(const labelList& f) const
|
||||||
|
{
|
||||||
|
// Initialise minimum level to large value
|
||||||
|
label minLevel = labelMax;
|
||||||
|
|
||||||
|
// Initialise point label at which min level is reached to -1
|
||||||
|
label pointIMin = -1;
|
||||||
|
|
||||||
|
forAll(f, fp)
|
||||||
|
{
|
||||||
|
const label& level = pointLevel_[f[fp]];
|
||||||
|
|
||||||
|
if (level < minLevel)
|
||||||
|
{
|
||||||
|
minLevel = level;
|
||||||
|
pointIMin = fp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pointIMin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::polyhedralRefinement::findMaxLevel(const labelList& f) const
|
||||||
|
{
|
||||||
|
// Initialise maximum level to small value
|
||||||
|
label maxLevel = labelMin;
|
||||||
|
|
||||||
|
// Initialise point label at which max level is reached to -1
|
||||||
|
label pointIMax = -1;
|
||||||
|
|
||||||
|
forAll(f, fp)
|
||||||
|
{
|
||||||
|
const label& level = pointLevel_[f[fp]];
|
||||||
|
|
||||||
|
if (level > maxLevel)
|
||||||
|
{
|
||||||
|
maxLevel = level;
|
||||||
|
pointIMax = fp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pointIMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::label Foam::polyhedralRefinement::countAnchors
|
Foam::label Foam::polyhedralRefinement::countAnchors
|
||||||
(
|
(
|
||||||
const labelList& f,
|
const labelList& f,
|
||||||
|
@ -2407,7 +2455,7 @@ Foam::label Foam::polyhedralRefinement::storeMidPointInfo
|
||||||
|
|
||||||
Map<edge>& midPointToAnchors,
|
Map<edge>& midPointToAnchors,
|
||||||
Map<edge>& midPointToFaceMids,
|
Map<edge>& midPointToFaceMids,
|
||||||
directTopoChange& meshMod
|
polyTopoChange& ref
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
// A single internal face is added per edge inbetween anchor points,
|
// A single internal face is added per edge inbetween anchor points,
|
||||||
|
@ -2606,7 +2654,7 @@ Foam::label Foam::polyhedralRefinement::storeMidPointInfo
|
||||||
|
|
||||||
checkInternalOrientation
|
checkInternalOrientation
|
||||||
(
|
(
|
||||||
meshMod,
|
ref,
|
||||||
cellI,
|
cellI,
|
||||||
faceI,
|
faceI,
|
||||||
ownPt,
|
ownPt,
|
||||||
|
@ -2617,7 +2665,7 @@ Foam::label Foam::polyhedralRefinement::storeMidPointInfo
|
||||||
|
|
||||||
return addInternalFace
|
return addInternalFace
|
||||||
(
|
(
|
||||||
meshMod,
|
ref,
|
||||||
faceI,
|
faceI,
|
||||||
anchorPointI,
|
anchorPointI,
|
||||||
newFace,
|
newFace,
|
||||||
|
@ -2663,12 +2711,24 @@ void Foam::polyhedralRefinement::checkInternalOrientation
|
||||||
const point& ownPt,
|
const point& ownPt,
|
||||||
const point& neiPt,
|
const point& neiPt,
|
||||||
const face& newFace
|
const face& newFace
|
||||||
)
|
) const
|
||||||
{
|
{
|
||||||
const face compactFace(identity(newFace.size()));
|
const face compactFace(identity(newFace.size()));
|
||||||
|
|
||||||
|
// Get list of polyAddPoint objects
|
||||||
|
const DynamicList<polyAddPoint>& polyAddedPoints(ref.addedPoints());
|
||||||
|
|
||||||
|
// Create a list of newly added points
|
||||||
|
pointField addedPoints(polyAddedPoints.size());
|
||||||
|
forAll (addedPoints, i)
|
||||||
|
{
|
||||||
|
addedPoints[i] = polyAddedPoints[i].newPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get compact points
|
||||||
const pointField compactPoints
|
const pointField compactPoints
|
||||||
(
|
(
|
||||||
IndirectList<point>(ref.points(), newFace)()
|
IndirectList<point>(addedPoints, newFace)()
|
||||||
);
|
);
|
||||||
|
|
||||||
const vector n(compactFace.normal(compactPoints));
|
const vector n(compactFace.normal(compactPoints));
|
||||||
|
@ -2728,12 +2788,24 @@ void Foam::polyhedralRefinement::checkBoundaryOrientation
|
||||||
const point& ownPt,
|
const point& ownPt,
|
||||||
const point& boundaryPt,
|
const point& boundaryPt,
|
||||||
const face& newFace
|
const face& newFace
|
||||||
)
|
) const
|
||||||
{
|
{
|
||||||
const face compactFace(identity(newFace.size()));
|
const face compactFace(identity(newFace.size()));
|
||||||
|
|
||||||
|
// Get list of polyAddPoint objects
|
||||||
|
const DynamicList<polyAddPoint>& polyAddedPoints(ref.addedPoints());
|
||||||
|
|
||||||
|
// Create a list of newly added points
|
||||||
|
pointField addedPoints(polyAddedPoints.size());
|
||||||
|
forAll (addedPoints, i)
|
||||||
|
{
|
||||||
|
addedPoints[i] = polyAddedPoints[i].newPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get compact points
|
||||||
const pointField compactPoints
|
const pointField compactPoints
|
||||||
(
|
(
|
||||||
IndirectList<point>(meshMod.points(), newFace)()
|
IndirectList<point>(addedPoints, newFace)()
|
||||||
);
|
);
|
||||||
|
|
||||||
const vector n(compactFace.normal(compactPoints));
|
const vector n(compactFace.normal(compactPoints));
|
||||||
|
@ -2912,7 +2984,7 @@ Foam::label Foam::polyhedralRefinement::pointConsistentRefinement
|
||||||
const label& pointI = iter.key();
|
const label& pointI = iter.key();
|
||||||
|
|
||||||
// Get the cells for this point
|
// Get the cells for this point
|
||||||
const labelList& curCells = pointCells[pointI];
|
const labelList& curCells = meshPointCells[pointI];
|
||||||
|
|
||||||
// Find maximum refinement level for this points
|
// Find maximum refinement level for this points
|
||||||
forAll (curCells, cellI)
|
forAll (curCells, cellI)
|
||||||
|
@ -2950,7 +3022,7 @@ Foam::label Foam::polyhedralRefinement::pointConsistentRefinement
|
||||||
const label& pointI = iter.key();
|
const label& pointI = iter.key();
|
||||||
|
|
||||||
// Get the cells for this point
|
// Get the cells for this point
|
||||||
const labelList& curCells = pointCells[pointI];
|
const labelList& curCells = meshPointCells[pointI];
|
||||||
|
|
||||||
// Loop through these point cells and set cells for refinement which
|
// Loop through these point cells and set cells for refinement which
|
||||||
// would end up having refinement level smaller than maximum level - 1
|
// would end up having refinement level smaller than maximum level - 1
|
||||||
|
@ -3271,7 +3343,7 @@ Foam::polyhedralRefinement::polyhedralRefinement
|
||||||
),
|
),
|
||||||
labelList(mesh_.nPoints(), 0)
|
labelList(mesh_.nPoints(), 0)
|
||||||
),
|
),
|
||||||
level0EdgeLength(), // Initialised in constructor body
|
level0EdgeLength_(), // Initialised in constructor body
|
||||||
history_
|
history_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
|
@ -3428,9 +3500,7 @@ Foam::polyhedralRefinement::polyhedralRefinement
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::polyhedralRefinement::~polyhedralRefinement()
|
Foam::polyhedralRefinement::~polyhedralRefinement()
|
||||||
{
|
{}
|
||||||
clearAddressing();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
@ -3493,22 +3563,26 @@ void Foam::polyhedralRefinement::setCellsToRefine
|
||||||
|
|
||||||
// Make sure that the refinement is face consistent (2:1 consistency) and
|
// Make sure that the refinement is face consistent (2:1 consistency) and
|
||||||
// point consistent (4:1 consistency) if necessary
|
// point consistent (4:1 consistency) if necessary
|
||||||
|
|
||||||
|
// Counter for additional cells to refine due to consistency in each
|
||||||
|
// iteration
|
||||||
|
label nAddCells = 0;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
// Number of additional cells to refine due to consistency in this
|
// Reset counter at the beginning of each iteration
|
||||||
// iteration
|
nAddCells = 0;
|
||||||
label nAddCells = 0;
|
|
||||||
|
|
||||||
if (pointBasedRefinement_)
|
if (pointBasedRefinement_)
|
||||||
{
|
{
|
||||||
// Check for 4:1 point based consistent refinement. Updates
|
// Check for 4:1 point based consistent refinement. Updates
|
||||||
// cellsToRefine and returns number of cells added in this iteration
|
// cellsToRefine and returns number of cells added in this iteration
|
||||||
nAddCells += pointConsistentRefinement(cellsToRefine);
|
nAddCells += pointConsistentRefinement(refineCell);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for 2:1 face based consistent refinement. Updates cellsToRefine
|
// Check for 2:1 face based consistent refinement. Updates cellsToRefine
|
||||||
// and returns number of cells added in this iteration
|
// and returns number of cells added in this iteration
|
||||||
nAddCells += faceConsistentRefinement(cellsToRefine);
|
nAddCells += faceConsistentRefinement(refineCell);
|
||||||
|
|
||||||
// Global reduction
|
// Global reduction
|
||||||
reduce(nAddCells, sumOp<label>());
|
reduce(nAddCells, sumOp<label>());
|
||||||
|
@ -3642,7 +3716,7 @@ void Foam::polyhedralRefinement::setSplitPointsToUnrefine
|
||||||
const faceList& meshFaces = mesh_.faces();
|
const faceList& meshFaces = mesh_.faces();
|
||||||
|
|
||||||
// Loop through all boundary faces
|
// Loop through all boundary faces
|
||||||
for (label faceI < nInternalFaces; faceI < nFaces; ++faceI)
|
for (label faceI = nInternalFaces; faceI < nFaces; ++faceI)
|
||||||
{
|
{
|
||||||
// Get current boundary face and mark all its points as ordinary (not
|
// Get current boundary face and mark all its points as ordinary (not
|
||||||
// split) points
|
// split) points
|
||||||
|
@ -3654,7 +3728,7 @@ void Foam::polyhedralRefinement::setSplitPointsToUnrefine
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finally, mark all split points
|
// Finally, mark all split points
|
||||||
forAll (splitMaster, point)
|
forAll (splitMaster, pointI)
|
||||||
{
|
{
|
||||||
if (splitMaster[pointI] > -1)
|
if (splitMaster[pointI] > -1)
|
||||||
{
|
{
|
||||||
|
@ -3689,9 +3763,6 @@ void Foam::polyhedralRefinement::setSplitPointsToUnrefine
|
||||||
// possibly have cells around that will be refined. This might happen if
|
// possibly have cells around that will be refined. This might happen if
|
||||||
// someone uses an inconsistent refinement/unrefinement selection procedure
|
// someone uses an inconsistent refinement/unrefinement selection procedure
|
||||||
|
|
||||||
// Get cell points
|
|
||||||
const labelListList& meshCellPoints = mesh_.cellPoints();
|
|
||||||
|
|
||||||
// Loop through cells to refine
|
// Loop through cells to refine
|
||||||
forAll (cellsToRefine_, i)
|
forAll (cellsToRefine_, i)
|
||||||
{
|
{
|
||||||
|
@ -3715,6 +3786,10 @@ void Foam::polyhedralRefinement::setSplitPointsToUnrefine
|
||||||
const label nCells = mesh_.nCells();
|
const label nCells = mesh_.nCells();
|
||||||
const labelListList& meshPointCells = mesh_.pointCells();
|
const labelListList& meshPointCells = mesh_.pointCells();
|
||||||
|
|
||||||
|
// Count number of removed cells from unrefinement (cells that will not be
|
||||||
|
// unrefined) in each iteration
|
||||||
|
label nRemCells = 0;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
// First, create cells to unrefine (all cells sharing point to unrefine)
|
// First, create cells to unrefine (all cells sharing point to unrefine)
|
||||||
|
@ -3735,9 +3810,8 @@ void Foam::polyhedralRefinement::setSplitPointsToUnrefine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count number of removed cells from unrefinement (cells that will
|
// Reset number of removed cells from unrefinement for this iteration
|
||||||
// not be unrefined)
|
nRemCells = 0;
|
||||||
label nRemCells = 0;
|
|
||||||
|
|
||||||
// Note: No need to check for point consistent unrefinement if a point
|
// Note: No need to check for point consistent unrefinement if a point
|
||||||
// consistent refinement process has been ensured. Skip it.
|
// consistent refinement process has been ensured. Skip it.
|
||||||
|
@ -3787,7 +3861,7 @@ void Foam::polyhedralRefinement::setSplitPointsToUnrefine
|
||||||
// Loop through all point cells
|
// Loop through all point cells
|
||||||
forAll (pCells, i)
|
forAll (pCells, i)
|
||||||
{
|
{
|
||||||
if (!cellsToUnrefine[own])
|
if (!cellsToUnrefine[pCells[i]])
|
||||||
{
|
{
|
||||||
// Cell must not be refined, remove point from
|
// Cell must not be refined, remove point from
|
||||||
// unrefinement as well
|
// unrefinement as well
|
||||||
|
|
|
@ -44,8 +44,8 @@ Author
|
||||||
Vuko Vukcevic, Wikki Ltd. All rights reserved.
|
Vuko Vukcevic, Wikki Ltd. All rights reserved.
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
Generalisation of hexRef8 for polyhedral cells and refactorisation into mesh
|
Generalisation of hexRef8 for polyhedral cells and refactorisation using
|
||||||
modifier engine.
|
polyMesh modifier engine.
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ Notes
|
||||||
#include "polyMeshModifier.H"
|
#include "polyMeshModifier.H"
|
||||||
#include "labelIOList.H"
|
#include "labelIOList.H"
|
||||||
#include "polyRefinementHistory.H"
|
#include "polyRefinementHistory.H"
|
||||||
#include "removePolyFaces.H"
|
#include "removeFaces.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
@ -73,31 +73,31 @@ class polyhedralRefinement
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- Reference to polyMesh for easy access in helper functions
|
//- Reference to polyMesh for easy access in helper functions
|
||||||
polyMesh& mesh_;
|
const polyMesh& mesh_;
|
||||||
|
|
||||||
|
|
||||||
// Refinement control and handling
|
// Refinement control and handling
|
||||||
|
|
||||||
//- List of cells to refine in this time step
|
//- List of cells to refine in this time step
|
||||||
labelList cellsToRefine_;
|
mutable labelList cellsToRefine_;
|
||||||
|
|
||||||
//- List of split point labels to unrefine in this time step
|
//- List of split point labels to unrefine in this time step
|
||||||
labelList splitPointsToUnrefine_;
|
mutable labelList splitPointsToUnrefine_;
|
||||||
|
|
||||||
//- Cell refinement level
|
//- Cell refinement level
|
||||||
labelIOList cellLevel_;
|
mutable labelIOList cellLevel_;
|
||||||
|
|
||||||
//- Point refinement level
|
//- Point refinement level
|
||||||
labelIOList pointLevel_;
|
mutable labelIOList pointLevel_;
|
||||||
|
|
||||||
//- Typical edge length between unrefined points
|
//- Typical edge length between unrefined points
|
||||||
const scalar level0EdgeLength_;
|
scalar level0EdgeLength_;
|
||||||
|
|
||||||
//- Refinement history
|
//- Refinement history
|
||||||
polyRefinementHistory history_;
|
mutable polyRefinementHistory history_;
|
||||||
|
|
||||||
//- Face remover engine
|
//- Face remover engine
|
||||||
removePolyFaces faceRemover_;
|
mutable removeFaces faceRemover_;
|
||||||
|
|
||||||
//- Maximum number of cells in the mesh. Note: not strictly enforced
|
//- Maximum number of cells in the mesh. Note: not strictly enforced
|
||||||
label maxCells_;
|
label maxCells_;
|
||||||
|
@ -131,10 +131,10 @@ class polyhedralRefinement
|
||||||
label getAnchorLevel(const label faceI) const;
|
label getAnchorLevel(const label faceI) const;
|
||||||
|
|
||||||
//- Calculate level0EdgeLength_ (constructor helper)
|
//- Calculate level0EdgeLength_ (constructor helper)
|
||||||
void calcLevel0EdgeLength() const;
|
void calcLevel0EdgeLength();
|
||||||
|
|
||||||
//- Set file instance for cellLevel_, pointLevel_ and history_
|
//- Set file instance for cellLevel_, pointLevel_ and history_
|
||||||
void setInstance(const fileName& inst);
|
void setInstance(const fileName& inst) const;
|
||||||
|
|
||||||
//- Extend cells to refine. Given a markup field of refinement
|
//- Extend cells to refine. Given a markup field of refinement
|
||||||
// candidates (true for cells to refine), marks the neigbhours of
|
// candidates (true for cells to refine), marks the neigbhours of
|
||||||
|
@ -158,13 +158,13 @@ class polyhedralRefinement
|
||||||
// that will allocate interpolation.
|
// that will allocate interpolation.
|
||||||
// -points added to split edge: added from edge start()
|
// -points added to split edge: added from edge start()
|
||||||
// -midpoints added: added from cellPoints[0].
|
// -midpoints added: added from cellPoints[0].
|
||||||
void setPolyhedralRefinement(polyTopoChange& ref);
|
void setPolyhedralRefinement(polyTopoChange& ref) const;
|
||||||
|
|
||||||
//- Remove some of the previously performed refinement. Uses
|
//- Remove some of the previously performed refinement. Uses
|
||||||
// splitPointLabels_ to determine the unrefinement.
|
// splitPointLabels_ to determine the unrefinement.
|
||||||
// All n pointCells of a split point will be combined into
|
// All n pointCells of a split point will be combined into
|
||||||
// the lowest numbered cell of those n.
|
// the lowest numbered cell of those n.
|
||||||
void setPolyhedralUnrefinement(polyTopoChange& ref);
|
void setPolyhedralUnrefinement(polyTopoChange& ref) const;
|
||||||
|
|
||||||
|
|
||||||
// Local topology modification functions (operate on cells/faces)
|
// Local topology modification functions (operate on cells/faces)
|
||||||
|
@ -263,9 +263,11 @@ class polyhedralRefinement
|
||||||
dynamicLabelList& faceVerts
|
dynamicLabelList& faceVerts
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Get index of point with minimum or maximum point level
|
//- Get index of point with minimum point level
|
||||||
template<class BinaryOp>
|
label findMinLevel(const labelList& f) const;
|
||||||
label findMinMaxLevel(const labelList& f, BinaryOp& op) const;
|
|
||||||
|
//- Get index of point with maximum point level
|
||||||
|
label findMaxLevel(const labelList& f) const;
|
||||||
|
|
||||||
//- Count number of vertices <= anchorLevel for a given face
|
//- Count number of vertices <= anchorLevel for a given face
|
||||||
label countAnchors
|
label countAnchors
|
||||||
|
@ -416,7 +418,7 @@ public:
|
||||||
//- Typical edge length between unrefined points
|
//- Typical edge length between unrefined points
|
||||||
scalar level0EdgeLength() const
|
scalar level0EdgeLength() const
|
||||||
{
|
{
|
||||||
return level0Edge_;
|
return level0EdgeLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in a new issue