hexRef8 Class Reference

Refinement of (split) hexes using polyTopoChange. More...

Public Member Functions

 ClassName ("hexRef8")
 Runtime type information. More...
 
 hexRef8 (const polyMesh &mesh, const bool readHistory=true)
 Construct from mesh, read_if_present refinement data. More...
 
 hexRef8 (const polyMesh &mesh, const labelList &cellLevel, const labelList &pointLevel, const refinementHistory &history, const scalar level0Edge=-great)
 Construct from mesh and un/refinement data and optional size of. More...
 
 hexRef8 (const polyMesh &mesh, const labelList &cellLevel, const labelList &pointLevel, const scalar level0Edge=-great)
 Construct from mesh and refinement data and optional size of. More...
 
 hexRef8 (const hexRef8 &)=delete
 Disallow default bitwise copy construction. More...
 
const polyMesh & mesh () const
 
const labelIOList & cellLevel () const
 
const labelIOList & pointLevel () const
 
const refinementHistory & history () const
 
scalar level0EdgeLength () const
 Typical edge length between unrefined points. More...
 
label faceLevel (const label facei) const
 Gets level such that the face has four points <= level. More...
 
labelList consistentRefinement (const labelList &cellsToRefine, const bool maxSet) const
 Given valid mesh and current cell level and proposed. More...
 
labelList consistentSlowRefinement (const label maxFaceDiff, const labelList &cellsToRefine, const labelList &facesToCheck, const label maxPointDiff, const labelList &pointsToCheck) const
 Like consistentRefinement but slower: More...
 
labelList consistentSlowRefinement2 (const label maxFaceDiff, const labelList &cellsToRefine, const labelList &facesToCheck) const
 Like consistentSlowRefinement but uses different meshWave. More...
 
labelListList setRefinement (const labelList &cells, polyTopoChange &)
 Insert refinement. All selected cells will be split into 8. More...
 
void updateMesh (const mapPolyMesh &)
 Update local numbering for changed mesh. More...
 
void storeData (const labelList &pointsToStore, const labelList &facesToStore, const labelList &cellsToStore)
 Signal points/face/cells for which to store data. More...
 
void updateMesh (const mapPolyMesh &, const Map< label > &pointsToRestore, const Map< label > &facesToRestore, const Map< label > &cellsToRestore)
 Update local numbering + undo. More...
 
void subset (const labelList &pointMap, const labelList &faceMap, const labelList &cellMap)
 Update local numbering for subsetted mesh. More...
 
void distribute (const mapDistributePolyMesh &)
 Update local numbering for mesh redistribution. More...
 
void checkMesh () const
 Debug: Check coupled mesh for correctness. More...
 
void checkRefinementLevels (const label maxPointDiff, const labelList &pointsToCheck) const
 Debug: Check 2:1 consistency across faces. More...
 
const cellShapeList & cellShapes () const
 Utility: get hexes as cell shapes. More...
 
labelList getSplitPoints () const
 Return the points at the centre of top-level split cells. More...
 
labelList consistentUnrefinement (const labelList &pointsToUnrefine, const bool maxSet) const
 Given proposed. More...
 
void setUnrefinement (const labelList &splitPointLabels, polyTopoChange &)
 Remove some refinement. Needs to be supplied output of. More...
 
void setInstance (const fileName &inst)
 
bool write (const bool write=true) const
 Force writing refinement+history to polyMesh directory. More...
 
void operator= (const hexRef8 &)=delete
 Disallow default bitwise assignment. More...
 

Detailed Description

Refinement of (split) hexes using polyTopoChange.

Source files

Definition at line 64 of file hexRef8.H.

Constructor & Destructor Documentation

◆ hexRef8() [1/4]

hexRef8 ( const polyMesh &  mesh,
const bool  readHistory = true 
)

Construct from mesh, read_if_present refinement data.

(from write below). If readHistory is true does read_if_present of refinement history. If false clears all history

Definition at line 1928 of file hexRef8.C.

References Foam::abort(), refinementHistory::active(), hexRef8::checkMesh(), hexRef8::checkRefinementLevels(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, IOobject::fileModificationChecking, regIOobject::headerOk(), primitiveMesh::nCells(), primitiveMesh::nPoints(), IOobject::objectPath(), refinementHistory::read(), IOobject::READ_IF_PRESENT, IOobject::readOpt(), List< T >::size(), IOobject::timeStamp, and refinementHistory::visibleCells().

Referenced by hexRef8::hexRef8().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hexRef8() [2/4]

hexRef8 ( const polyMesh &  mesh,
const labelList &  cellLevel,
const labelList &  pointLevel,
const refinementHistory &  history,
const scalar  level0Edge = -great 
)

Construct from mesh and un/refinement data and optional size of.

starting cells

Definition at line 2048 of file hexRef8.C.

References Foam::abort(), refinementHistory::active(), hexRef8::checkMesh(), hexRef8::checkRefinementLevels(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, hexRef8::hexRef8(), List< T >::size(), and refinementHistory::visibleCells().

Here is the call graph for this function:

◆ hexRef8() [3/4]

hexRef8 ( const polyMesh &  mesh,
const labelList &  cellLevel,
const labelList &  pointLevel,
const scalar  level0Edge = -great 
)

Construct from mesh and refinement data and optional size of.

starting cells

Definition at line 2156 of file hexRef8.C.

References Foam::abort(), hexRef8::checkMesh(), hexRef8::checkRefinementLevels(), hexRef8::consistentRefinement(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, and List< T >::size().

Here is the call graph for this function:

◆ hexRef8() [4/4]

hexRef8 ( const hexRef8 &  )
delete

Disallow default bitwise copy construction.

Member Function Documentation

◆ ClassName()

ClassName ( "hexRef8"  )

Runtime type information.

◆ mesh()

const polyMesh& mesh ( ) const
inline

Definition at line 380 of file hexRef8.H.

◆ cellLevel()

const labelIOList& cellLevel ( ) const
inline

Definition at line 385 of file hexRef8.H.

Referenced by backgroundMeshDecomposition::cellLevel(), dynamicRefineFvMesh::dynamicRefineFvMesh(), and dynamicRefineFvMesh::writeObject().

Here is the caller graph for this function:

◆ pointLevel()

const labelIOList& pointLevel ( ) const
inline

Definition at line 390 of file hexRef8.H.

Referenced by dynamicRefineFvMesh::dynamicRefineFvMesh(), and backgroundMeshDecomposition::pointLevel().

Here is the caller graph for this function:

◆ history()

const refinementHistory& history ( ) const
inline

Definition at line 395 of file hexRef8.H.

Referenced by dynamicRefineFvMesh::update().

Here is the caller graph for this function:

◆ level0EdgeLength()

◆ faceLevel()

◆ consistentRefinement()

Foam::labelList consistentRefinement ( const labelList &  cellsToRefine,
const bool  maxSet 
) const

Given valid mesh and current cell level and proposed.

cells to refine calculate any clashes (due to 2:1) and return ok list of cells to refine. Either adds cells to refine to set (maxSet = true) or removes cells to refine (maxSet = false)

Definition at line 2256 of file hexRef8.C.

References hexRef8::consistentSlowRefinement(), Foam::endl(), forAll, PackedList< nBits >::get(), Foam::Pout, Foam::reduce(), and PackedBoolList::set().

Referenced by hexRef8::hexRef8(), and hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ consistentSlowRefinement()

Foam::labelList consistentSlowRefinement ( const label  maxFaceDiff,
const labelList &  cellsToRefine,
const labelList &  facesToCheck,
const label  maxPointDiff,
const labelList &  pointsToCheck 
) const

Like consistentRefinement but slower:

  • specify number of cells between consecutive refinement levels (consistentRefinement equivalent to 1)
  • specify max level difference between point-connected cells. (-1 to disable) Note that with normal 2:1 limitation (maxFaceDiff=1) there can be 8:1 size difference across point connected cells so maxPointDiff allows you to make that less. cellsToRefine : cells we're thinking about refining. It will extend this set. All refinement levels will be at least maxFaceDiff layers thick. facesToCheck : additional faces where to implement the maxFaceDiff thickness (usually only boundary faces)

Definition at line 2331 of file hexRef8.C.

References Foam::abort(), List< T >::append(), hexRef8::consistentSlowRefinement2(), refinementData::count(), Foam::count(), Foam::endl(), Foam::exit(), Foam::FatalError, FatalErrorInFunction, Foam::findIndices(), forAll, forAllConstIter(), refinementData::isRefined(), FaceCellWave< Type, TrackingData >::iterate(), Foam::labelMin, Foam::mag(), Foam::max(), Foam::nl, patchi, Foam::Pout, Foam::reduce(), refinementData::refinementCount(), FaceCellWave< Type, TrackingData >::setFaceInfo(), List< T >::size(), syncTools::swapBoundaryFaceList(), syncTools::syncPointList(), and refinementData::updateFace().

Referenced by hexRef8::consistentRefinement(), and hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ consistentSlowRefinement2()

Foam::labelList consistentSlowRefinement2 ( const label  maxFaceDiff,
const labelList &  cellsToRefine,
const labelList &  facesToCheck 
) const

Like consistentSlowRefinement but uses different meshWave.

(proper distance instead of toplogical count). No point checks yet.

Definition at line 2815 of file hexRef8.C.

References Foam::abort(), List< T >::append(), Foam::endl(), Foam::exit(), Foam::FatalError, FatalErrorInFunction, Foam::findIndices(), forAll, PackedList< nBits >::get(), hexRef8::level0EdgeLength(), Foam::nl, IOobject::objectPath(), Foam::Pout, Foam::reduce(), PackedBoolList::set(), hexRef8::setRefinement(), List< T >::size(), HashTable< T, Key, Hash >::size(), Ostream::write(), and regIOobject::write().

Referenced by hexRef8::consistentSlowRefinement(), and hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setRefinement()

Foam::labelListList setRefinement ( const labelList &  cells,
polyTopoChange &  meshMod 
)

Insert refinement. All selected cells will be split into 8.

Returns per element in cells the 8 cells they were split into. Guarantees that the 0th element is the original cell label. Mapping: -split cells: 7 new ones get added from original -split faces: original gets modified; 3 new ones get added from original -added internal faces: added from original cell face(if that was internal) or created out-of-nothing (so will not get mapped!). Note: could make this inflate from point but that will allocate interpolation. -points added to split edge: added from edge start() -midpoints added: added from cellPoints[0].

Definition at line 3240 of file hexRef8.C.

References Foam::abort(), refinementHistory::active(), DynamicList< T, SizeInc, SizeMult, SizeDiv >::append(), List< T >::append(), edge::centre(), hexRef8::checkMesh(), HashTable< T, Key, Hash >::clear(), Foam::e, Foam::endl(), hexRef8::faceLevel(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::labelMax, Foam::labelMin, Foam::max(), Foam::min(), OSstream::name(), Foam::nl, Foam::Pout, refinementHistory::resize(), polyTopoChange::setAction(), hexRef8::setInstance(), List< T >::setSize(), List< T >::size(), hexRef8::storeData(), refinementHistory::storeSplit(), syncTools::swapBoundaryFaceList(), syncTools::syncBoundaryFacePositions(), syncTools::syncEdgeList(), syncTools::syncEdgePositions(), syncTools::syncFaceList(), List< T >::transfer(), Ostream::write(), and Foam::meshTools::writeOBJ().

Referenced by hexRef8::consistentSlowRefinement2(), and hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateMesh() [1/2]

void updateMesh ( const mapPolyMesh &  map)

Update local numbering for changed mesh.

Definition at line 4285 of file hexRef8.C.

Referenced by hexRef8::level0EdgeLength().

Here is the caller graph for this function:

◆ storeData()

void storeData ( const labelList &  pointsToStore,
const labelList &  facesToStore,
const labelList &  cellsToStore 
)

Signal points/face/cells for which to store data.

Definition at line 4260 of file hexRef8.C.

References forAll, HashTable< T, Key, Hash >::insert(), HashTable< T, Key, Hash >::resize(), and List< T >::size().

Referenced by hexRef8::level0EdgeLength(), and hexRef8::setRefinement().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateMesh() [2/2]

void updateMesh ( const mapPolyMesh &  map,
const Map< label > &  pointsToRestore,
const Map< label > &  facesToRestore,
const Map< label > &  cellsToRestore 
)

◆ subset()

void subset ( const labelList &  pointMap,
const labelList &  faceMap,
const labelList &  cellMap 
)

Update local numbering for subsetted mesh.

Gets new-to-old maps. Not compatible with unrefinement.

Definition at line 4487 of file hexRef8.C.

References Foam::abort(), refinementHistory::active(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, Foam::findIndex(), forAll, newPointi, Foam::nl, Foam::Pout, hexRef8::setInstance(), List< T >::size(), refinementHistory::subset(), List< T >::transfer(), and WarningInFunction.

Referenced by hexRef8::level0EdgeLength(), and hexRef8::updateMesh().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ distribute()

void distribute ( const mapDistributePolyMesh &  map)

Update local numbering for mesh redistribution.

Definition at line 4570 of file hexRef8.C.

References refinementHistory::active(), removeFaces::distribute(), refinementHistory::distribute(), mapDistributePolyMesh::distributeCellData(), mapDistributePolyMesh::distributePointData(), Foam::endl(), and Foam::Pout.

Referenced by hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ checkMesh()

void checkMesh ( ) const

◆ checkRefinementLevels()

void checkRefinementLevels ( const label  maxPointDiff,
const labelList &  pointsToCheck 
) const

Debug: Check 2:1 consistency across faces.

maxPointDiff==-1 : only check 2:1 across faces maxPointDiff!=-1 : check point-connected cells.

Gives problems after first splitting off inside mesher.

// Hanging points { Any patches with points having only two edges.

boolList isHangingPoint(mesh_.nPoints(), false);

const polyBoundaryMesh& patches = mesh_.boundaryMesh();

forAll(patches, patchi) { const polyPatch& pp = patches[patchi];

const labelList& meshPoints = pp.meshPoints();

forAll(meshPoints, i) { label pointi = meshPoints[i];

const labelList& pEdges = mesh_.pointEdges()[pointi];

if (pEdges.size() == 2) { isHangingPoint[pointi] = true; } } }

syncTools::syncPointList ( mesh_, isHangingPoint, andEqOp<bool>(), // only if all decide it is hanging point true, // null false // no separation );

OFstream str(mesh_.time().path()/"hangingPoints.obj");

label nHanging = 0;

forAll(isHangingPoint, pointi) { if (isHangingPoint[pointi]) { nHanging++;

Pout<< "Hanging boundary point " << pointi << " at " << mesh_.points()[pointi] << endl; meshTools::writeOBJ(str, mesh_.points()[pointi]); } }

if (returnReduce(nHanging, sumOp<label>()) > 0) { FatalErrorInFunction << "Detected a point used by two edges only (hanging point)" << nl << "This is not allowed" << abort(FatalError); } }

Definition at line 4808 of file hexRef8.C.

References Foam::abort(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::labelMax, Foam::labelMin, Foam::mag(), Foam::max(), Foam::nl, patchi, Foam::Pout, List< T >::size(), syncTools::swapBoundaryFaceList(), and syncTools::syncPointList().

Referenced by hexRef8::checkMesh(), hexRef8::getSplitPoints(), hexRef8::hexRef8(), and hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cellShapes()

const Foam::cellShapeList & cellShapes ( ) const

Utility: get hexes as cell shapes.

Definition at line 5060 of file hexRef8.C.

References Foam::endl(), forAll, Foam::nl, Foam::Pout, and List< T >::size().

Referenced by hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getSplitPoints()

Foam::labelList getSplitPoints ( ) const

Return the points at the centre of top-level split cells.

that can be unsplit.

Definition at line 5120 of file hexRef8.C.

References Foam::abort(), refinementHistory::active(), hexRef8::checkRefinementLevels(), hexRef8::consistentUnrefinement(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, forAll, refinementHistory::parentIndex(), Foam::Pout, List< T >::size(), and refinementHistory::visibleCells().

Referenced by hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ consistentUnrefinement()

Foam::labelList consistentUnrefinement ( const labelList &  pointsToUnrefine,
const bool  maxSet 
) const

Given proposed.

splitPoints to unrefine according to calculate any clashes (due to 2:1) and return ok list of points to unrefine. Either adds points to refine to set (maxSet = true) or removes points to refine (maxSet = false)

Definition at line 5324 of file hexRef8.C.

References Foam::abort(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::Pout, Foam::reduce(), hexRef8::setUnrefinement(), and syncTools::swapBoundaryFaceList().

Referenced by hexRef8::getSplitPoints(), and hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setUnrefinement()

void setUnrefinement ( const labelList &  splitPointLabels,
polyTopoChange &  meshMod 
)

Remove some refinement. Needs to be supplied output of.

consistentUnrefinement. Only call if undoable set. All 8 pointCells of a split point will be combined into the lowest numbered cell of those 8.

Definition at line 5558 of file hexRef8.C.

References Foam::abort(), refinementHistory::active(), hexRef8::checkMesh(), refinementHistory::combineCells(), removeFaces::compatibleRemoves(), Foam::endl(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::min(), Foam::nl, IOobject::objectPath(), pFaces, Foam::Pout, hexRef8::setInstance(), removeFaces::setRefinement(), List< T >::size(), HashTable< T, Key, Hash >::size(), and regIOobject::write().

Referenced by hexRef8::consistentUnrefinement(), and hexRef8::level0EdgeLength().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setInstance()

◆ write()

bool write ( const bool  write = true) const

Force writing refinement+history to polyMesh directory.

Definition at line 5746 of file hexRef8.C.

References refinementHistory::active(), and regIOobject::write().

Referenced by hexRef8::level0EdgeLength(), and dynamicRefineFvMesh::writeObject().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

void operator= ( const hexRef8 &  )
delete

Disallow default bitwise assignment.

Referenced by hexRef8::level0EdgeLength().

Here is the caller graph for this function:

The documentation for this class was generated from the following files: