Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
meshCutter Class Reference

Cuts (splits) cells. More...

Inheritance diagram for meshCutter:
Inheritance graph
[legend]
Collaboration diagram for meshCutter:
Collaboration graph
[legend]

Public Member Functions

 ClassName ("meshCutter")
 Runtime type information. More...
 
 meshCutter (const polyMesh &mesh)
 Construct from mesh. More...
 
 ~meshCutter ()
 Destructor. More...
 
void setRefinement (const cellCuts &cuts, polyTopoChange &meshMod)
 Do actual cutting with cut description. Inserts mesh changes. More...
 
void updateMesh (const mapPolyMesh &)
 Force recalculation of locally stored data on topological change. More...
 
const Map< label > & addedCells () const
 Cells added. Per split cell label of added cell. More...
 
const Map< label > & addedFaces () const
 Faces added. Per split cell label of added face. More...
 
const HashTable< label, edge, Hash< edge > > & addedPoints () const
 Points added. Per split edge label of added point. More...
 
- Public Member Functions inherited from edgeVertex
 edgeVertex (const polyMesh &mesh)
 Construct from mesh. More...
 
const polyMeshmesh () const
 
bool isEdge (const label eVert) const
 
label getEdge (const label eVert) const
 
label getVertex (const label eVert) const
 
label vertToEVert (const label vertI) const
 
label edgeToEVert (const label edgeI) const
 
point coord (const label cut, const scalar weight) const
 
label cutPairToEdge (const label cut0, const label cut1) const
 
OstreamwriteCut (Ostream &os, const label cut, const scalar) const
 Write cut description to Ostream. More...
 
OstreamwriteCuts (Ostream &os, const labelList &, const scalarField &) const
 Write cut descriptions to Ostream. More...
 

Private Member Functions

label findCutCell (const cellCuts &, const labelList &) const
 Returns -1 or the cell in cellLabels that is cut. More...
 
label findInternalFacePoint (const labelList &pointLabels) const
 Returns first pointI in pointLabels that uses an internal. More...
 
void faceCells (const cellCuts &cuts, const label faceI, label &own, label &nei) const
 Get new owner and neighbour of face. Checks anchor points to see if. More...
 
void getFaceInfo (const label faceI, label &patchID, label &zoneID, label &zoneFlip) const
 Get patch information for face. More...
 
void addFace (polyTopoChange &meshMod, const label faceI, const face &newFace, const label owner, const label neighbour)
 Adds a face on top of existing faceI. Flips face. More...
 
void modFace (polyTopoChange &meshMod, const label faceI, const face &newFace, const label owner, const label neighbour)
 Modifies existing faceI for either new owner/neighbour or. More...
 
void copyFace (const face &f, const label startFp, const label endFp, face &newFace) const
 
void splitFace (const face &f, const label v0, const label v1, face &f0, face &f1) const
 Split face along cut into two faces. Faces are in same point. More...
 
face addEdgeCutsToFace (const label faceI) const
 Add cuts of edges to face. More...
 
face loopToFace (const label cellI, const labelList &loop) const
 Convert loop of cuts into face. More...
 
void getFacesEdgesPoints (const label cellI, labelHashSet &faces, labelHashSet &edges, labelHashSet &points) const
 Get elements of cell. More...
 
 meshCutter (const meshCutter &)
 Disallow default bitwise copy construct. More...
 
void operator= (const meshCutter &)
 Disallow default bitwise assignment. More...
 

Static Private Member Functions

static bool uses (const labelList &elems1, const labelList &elems2)
 Do list 1 and 2 share elements? More...
 
static bool isIn (const edge &, const labelList &)
 Do the elements of edge appear in consecutive order in the list. More...
 

Private Attributes

Map< labeladdedCells_
 Cells added in last setRefinement. Per splitcell label of added. More...
 
Map< labeladdedFaces_
 Faces added in last setRefinement. Per split cell label of added. More...
 
HashTable< label, edge, Hash< edge > > addedPoints_
 Points added in last setRefinement. Per split edge label of added. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from edgeVertex
static void updateLabels (const labelList &map, List< refineCell > &)
 Update refine list from map. Used to update cell/face labels. More...
 
static void updateLabels (const labelList &map, Map< label > &)
 Update map from map. Used to update cell/face labels. More...
 
static void updateLabels (const labelList &map, labelHashSet &)
 Update map from map. Used to update cell/face labels. More...
 
static bool isEdge (const primitiveMesh &mesh, const label eVert)
 Is eVert an edge? More...
 
static label getEdge (const primitiveMesh &mesh, const label eVert)
 Convert eVert to edge label. More...
 
static label getVertex (const primitiveMesh &mesh, const label eVert)
 Convert eVert to vertex label. More...
 
static label vertToEVert (const primitiveMesh &mesh, const label vertI)
 Convert pointI to eVert. More...
 
static label edgeToEVert (const primitiveMesh &mesh, const label edgeI)
 Convert edgeI to eVert. More...
 
static point coord (const primitiveMesh &, const label cut, const scalar weight)
 Return coordinate of cut (uses weight if edgeCut) More...
 
static label cutPairToEdge (const primitiveMesh &, const label cut0, const label cut1)
 Find mesh edge (or -1) between two cuts. More...
 

Detailed Description

Cuts (splits) cells.

Description of cut is given as a loop of 'cuts' per cell (see cellCuts). setRefinement() takes this cut description and inserts the necessary topoActions (add points/faces/cells) into the polyTopoChange.

Stores added cells/faces/points.

Cut description gives orientation to cut by calculating 'anchorPoints'. The side of the cell that contains the anchorPoints is the master cell. Likewise the cells' edges will have the split added as a duplicate of the master (anchor) point. Think of it as the cell with the anchor points at the bottom. Add a face at the bottom to split the cell and then sweep this face up to be through the middle of the cell (inflation).

  1. Start: cell with anchor points at bottom
    +-------+
    |       +
    |       +
    |       +
    |       +
    |       +
    |       +
    |       +
    +-------+
    anchor  anchor
    
  2. Topo change: splitface introduced at bottom of cell, introducing a new cell and splitting the side faces into two.
    +-------+
    |       +
    |       +
    |       + <- addedCell
    |       +
    |       +
    |       +
    +-------+ <- splitFace
    +-------+ <- original cell
    anchor  anchor
    
  3. Inflation: splitface shifted up to middle of cell (or wherever cut was)
    +-------+
    |       +
    |       + <- addedCell
    |       +
    +-------+ <- splitFace
    |       +
    |       + <- original cell
    |       +
    +-------+
    anchor  anchor
    

Anyway this was the original idea. Inflation was meant to handle conservative properties distribution without interpolation. (just face sweeping through space). But problem was that only if the introduced splitface was exactly the same shape as bottom face (so same 2D topo or perfectly flat) the volume between them was 0.

This meshCutting still uses anchorPoints though:

Source files

Definition at line 134 of file meshCutter.H.

Constructor & Destructor Documentation

◆ meshCutter() [1/2]

meshCutter ( const meshCutter )
private

Disallow default bitwise copy construct.

◆ meshCutter() [2/2]

meshCutter ( const polyMesh mesh)

Construct from mesh.

Definition at line 505 of file meshCutter.C.

◆ ~meshCutter()

~meshCutter ( )

Destructor.

Definition at line 517 of file meshCutter.C.

Member Function Documentation

◆ uses()

bool uses ( const labelList elems1,
const labelList elems2 
)
staticprivate

Do list 1 and 2 share elements?

Definition at line 47 of file meshCutter.C.

References Foam::findIndex(), and forAll.

Here is the call graph for this function:

◆ isIn()

bool isIn ( const edge twoCuts,
const labelList cuts 
)
staticprivate

Do the elements of edge appear in consecutive order in the list.

Definition at line 61 of file meshCutter.C.

References Foam::findIndex().

Here is the call graph for this function:

◆ findCutCell()

Foam::label findCutCell ( const cellCuts cuts,
const labelList cellLabels 
) const
private

Returns -1 or the cell in cellLabels that is cut.

Definition at line 84 of file meshCutter.C.

References cellCuts::cellLoops(), forAll, Foam::labelI, and List::size().

Here is the call graph for this function:

◆ findInternalFacePoint()

Foam::label findInternalFacePoint ( const labelList pointLabels) const
private

Returns first pointI in pointLabels that uses an internal.

face. Used to find point to inflate cell/face from (has to be connected to internal face)

Definition at line 103 of file meshCutter.C.

References Foam::abort(), Foam::FatalError, FatalErrorInFunction, forAll, Foam::labelI, mesh, pFaces, primitiveMesh::pointFaces(), and pointLabels().

Here is the call graph for this function:

◆ faceCells()

void faceCells ( const cellCuts cuts,
const label  faceI,
label own,
label nei 
) const
private

Get new owner and neighbour of face. Checks anchor points to see if.

need to get original or added cell.

Definition at line 135 of file meshCutter.C.

References cellCuts::cellAnchorPoints(), cellCuts::cellLoops(), f(), polyMesh::faceNeighbour(), polyMesh::faceOwner(), polyMesh::faces(), and mesh.

Here is the call graph for this function:

◆ getFaceInfo()

void getFaceInfo ( const label  faceI,
label patchID,
label zoneID,
label zoneFlip 
) const
private

Get patch information for face.

Definition at line 169 of file meshCutter.C.

References polyMesh::boundaryMesh(), polyMesh::faceZones(), faceZone::flipMap(), mesh, faceZone::whichFace(), polyBoundaryMesh::whichPatch(), and ZoneMesh::whichZone().

Here is the call graph for this function:

◆ addFace()

void addFace ( polyTopoChange meshMod,
const label  faceI,
const face newFace,
const label  owner,
const label  neighbour 
)
private

Adds a face on top of existing faceI. Flips face.

if owner>neighbour

Definition at line 197 of file meshCutter.C.

References Foam::endl(), Foam::Pout, face::reverseFace(), and polyTopoChange::setAction().

Here is the call graph for this function:

◆ modFace()

void modFace ( polyTopoChange meshMod,
const label  faceI,
const face newFace,
const label  owner,
const label  neighbour 
)
private

Modifies existing faceI for either new owner/neighbour or.

new face points. Checks if anything changed and flips face if owner>neighbour

Definition at line 275 of file meshCutter.C.

References Foam::endl(), polyMesh::faces(), mesh, Foam::Pout, face::reverseFace(), and polyTopoChange::setAction().

Here is the call graph for this function:

◆ copyFace()

void copyFace ( const face f,
const label  startFp,
const label  endFp,
face newFace 
) const
private

Definition at line 350 of file meshCutter.C.

References f(), and List::size().

Here is the call graph for this function:

◆ splitFace()

void splitFace ( const face f,
const label  v0,
const label  v1,
face f0,
face f1 
) const
private

Split face along cut into two faces. Faces are in same point.

order as original face (i.e. maintain normal direction)

Definition at line 372 of file meshCutter.C.

References Foam::abort(), f(), f1, Foam::FatalError, FatalErrorInFunction, Foam::findIndex(), List::setSize(), and List::size().

Here is the call graph for this function:

◆ addEdgeCutsToFace()

Foam::face addEdgeCutsToFace ( const label  faceI) const
private

Add cuts of edges to face.

Definition at line 411 of file meshCutter.C.

References f(), polyMesh::faces(), HashTable::find(), forAll, mesh, List::setSize(), and List::size().

Here is the call graph for this function:

◆ loopToFace()

Foam::face loopToFace ( const label  cellI,
const labelList loop 
) const
private

Convert loop of cuts into face.

Definition at line 444 of file meshCutter.C.

References Foam::e, primitiveMesh::edges(), HashTable::find(), Foam::meshTools::findEdge(), forAll, mesh, List::setSize(), and List::size().

Here is the call graph for this function:

◆ getFacesEdgesPoints()

void getFacesEdgesPoints ( const label  cellI,
labelHashSet faces,
labelHashSet edges,
labelHashSet points 
) const
private

Get elements of cell.

◆ operator=()

void operator= ( const meshCutter )
private

Disallow default bitwise assignment.

◆ ClassName()

ClassName ( "meshCutter"  )

Runtime type information.

◆ setRefinement()

void setRefinement ( const cellCuts cuts,
polyTopoChange meshMod 
)

◆ updateMesh()

void updateMesh ( const mapPolyMesh morphMap)

Force recalculation of locally stored data on topological change.

Definition at line 972 of file meshCutter.C.

References Foam::e, Foam::endl(), forAllConstIter(), HashTable::insert(), Foam::Pout, mapPolyMesh::reverseCellMap(), mapPolyMesh::reverseFaceMap(), and mapPolyMesh::reversePointMap().

Referenced by main(), and undoableMeshCutter::updateMesh().

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

◆ addedCells()

const Map<label>& addedCells ( ) const
inline

Cells added. Per split cell label of added cell.

Definition at line 297 of file meshCutter.H.

References meshCutter::addedCells_.

◆ addedFaces()

const Map<label>& addedFaces ( ) const
inline

Faces added. Per split cell label of added face.

Definition at line 303 of file meshCutter.H.

References meshCutter::addedFaces_.

◆ addedPoints()

const HashTable<label, edge, Hash<edge> >& addedPoints ( ) const
inline

Points added. Per split edge label of added point.

Definition at line 309 of file meshCutter.H.

References meshCutter::addedPoints_.

Field Documentation

◆ addedCells_

Map<label> addedCells_
private

Cells added in last setRefinement. Per splitcell label of added.

cell

Definition at line 142 of file meshCutter.H.

Referenced by meshCutter::addedCells().

◆ addedFaces_

Map<label> addedFaces_
private

Faces added in last setRefinement. Per split cell label of added.

face

Definition at line 146 of file meshCutter.H.

Referenced by meshCutter::addedFaces().

◆ addedPoints_

HashTable<label, edge, Hash<edge> > addedPoints_
private

Points added in last setRefinement. Per split edge label of added.

point

Definition at line 150 of file meshCutter.H.

Referenced by meshCutter::addedPoints().


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