cellCuts Class Reference

Description of cuts across cells. More...

Inheritance diagram for cellCuts:
[legend]
Collaboration diagram for cellCuts:
[legend]

Public Member Functions

 ClassName ("cellCuts")
 Runtime type information. More...
 
 cellCuts (const polyMesh &mesh, const labelList &cutCells, const labelList &meshVerts, const labelList &meshEdges, const scalarField &meshEdgeWeights, const bool verbose=true)
 Construct from cells to cut and pattern of cuts. More...
 
 cellCuts (const polyMesh &mesh, const labelList &meshVerts, const labelList &meshEdges, const scalarField &meshEdgeWeights, const bool verbose=true)
 Construct from pattern of cuts. Detect cells to cut. More...
 
 cellCuts (const polyMesh &mesh, const labelList &cellLabels, const labelListList &cellLoops, const List< scalarField > &cellEdgeWeights, const bool verbose=true)
 Construct from complete cellLoops through specified cells. More...
 
 cellCuts (const polyMesh &mesh, const cellLooper &cellCutter, const List< refineCell > &refCells, const bool verbose=true)
 Construct from list of cells to cut and direction to cut in. More...
 
 cellCuts (const polyMesh &mesh, const cellLooper &cellCutter, const labelList &cellLabels, const List< plane > &cutPlanes, const bool verbose=true)
 Construct from list of cells to cut and plane to cut with and. More...
 
 cellCuts (const polyMesh &mesh, const boolList &pointIsCut, const boolList &edgeIsCut, const scalarField &edgeWeight, const Map< edge > &faceSplitCut, const labelListList &cellLoops, const label nLoops, const labelListList &cellAnchorPoints, const bool verbose=true)
 Construct from components. More...
 
 ~cellCuts ()=default
 Destructor. More...
 
void clearOut ()
 Clear out demand-driven storage. More...
 
const boolListpointIsCut () const
 Is mesh point cut. More...
 
const boolListedgeIsCut () const
 Is edge cut. More...
 
const scalarFieldedgeWeight () const
 If edge is cut gives weight (ratio between start() and end()) More...
 
const labelListListfaceCuts () const
 Cuts per existing face (includes those along edge of face) More...
 
const Map< edge > & faceSplitCut () const
 Gives for split face the two cuts that split the face into two. More...
 
const labelListListcellLoops () const
 For each cut cell the cut along the circumference. More...
 
label nLoops () const
 Number of valid cell loops. More...
 
const labelListListcellAnchorPoints () const
 For each cut cell the points on the 'anchor' side of the cell. More...
 
pointField loopPoints (const label celli) const
 Returns coordinates of points on loop for given cell. More...
 
labelList nonAnchorPoints (const labelList &cellPoints, const labelList &anchorPoints, const labelList &loop) const
 Invert anchor point selection. More...
 
void flip (const label celli)
 Flip loop for celli. Updates anchor points as well. More...
 
void flipLoopOnly (const label celli)
 Flip loop for celli. Does not update anchors. Use with care. More...
 
void writeOBJ (Ostream &os, const pointField &loopPoints, label &vertI) const
 debugging:Write list of cuts to stream in OBJ format More...
 
void writeOBJ (Ostream &os) const
 debugging:Write all of cuts to stream in OBJ format More...
 
void writeCellOBJ (const fileName &dir, const label celli) const
 debugging:Write edges of cell and loop 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...
 

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

Description of cuts across cells.

Description of cut is given as list of vertices and list of edges to be cut (and position on edge).

Does some checking of correctness/non-overlapping of cuts. 2x2x2 refinement has to be done in three passes since cuts can not overlap (would make addressing too complicated)

Introduces concept of 'cut' which is either an existing vertex or a edge.

Input can either be

  1. list of cut vertices and list of cut edges. Constructs cell circumference walks ('cellLoops').
  2. list of cell circumference walks. Will filter them so they don't overlap.
  3. cellWalker and list of cells to refine (refineCell). Constructs cellLoops and does B. cellWalker is class which can cut a single cell using a plane through the cell centre and in a certain normal direction

CellCuts constructed from cellLoops (B, C) can have multiple cut-edges and/or cut-point as long as there is per face only one (or none) cut across a face, i.e. a face can only be split into two faces.

The information available after construction:

  • pointIsCut, edgeIsCut.
  • faceSplitCut : the cross-cut of a face.
  • cellLoops : the loop which cuts across a cell
  • cellAnchorPoints : per cell the vertices on one side which are considered the anchor points.

AnchorPoints: connected loops have to be oriented in the same way to be able to grow new internal faces out of the same bottom faces. (limitation of the mapping procedure). The loop is cellLoop is oriented such that the normal of it points towards the anchorPoints. This is the only routine which uses geometric information.

Limitations:

  • cut description is very precise. Hard to get right.
  • do anchor points need to be unique per cell? Very inefficient.
  • is orientation guaranteed to be correct? Uses geometric info so can go wrong on highly distorted meshes.
  • is memory inefficient. Probably need to use Maps instead of labelLists.
Source files

Definition at line 110 of file cellCuts.H.

Constructor & Destructor Documentation

◆ cellCuts() [1/6]

cellCuts ( const polyMesh mesh,
const labelList cutCells,
const labelList meshVerts,
const labelList meshEdges,
const scalarField meshEdgeWeights,
const bool  verbose = true 
)

Construct from cells to cut and pattern of cuts.

Definition at line 2871 of file cellCuts.C.

References cellCuts::clearOut(), Foam::endl(), and Foam::Pout.

Here is the call graph for this function:

◆ cellCuts() [2/6]

cellCuts ( const polyMesh mesh,
const labelList meshVerts,
const labelList meshEdges,
const scalarField meshEdgeWeights,
const bool  verbose = true 
)

Construct from pattern of cuts. Detect cells to cut.

Definition at line 2916 of file cellCuts.C.

References cellCuts::clearOut(), Foam::endl(), Foam::identity(), edgeVertex::mesh(), primitiveMesh::nCells(), and Foam::Pout.

Here is the call graph for this function:

◆ cellCuts() [3/6]

cellCuts ( const polyMesh mesh,
const labelList cellLabels,
const labelListList cellLoops,
const List< scalarField > &  cellEdgeWeights,
const bool  verbose = true 
)

Construct from complete cellLoops through specified cells.

Checks for consistency. Constructs cut-cut addressing and cellAnchorPoints.

Definition at line 2965 of file cellCuts.C.

References cellCuts::cellLoops(), cellCuts::clearOut(), Foam::endl(), and Foam::Pout.

Here is the call graph for this function:

◆ cellCuts() [4/6]

cellCuts ( const polyMesh mesh,
const cellLooper cellCutter,
const List< refineCell > &  refCells,
const bool  verbose = true 
)

Construct from list of cells to cut and direction to cut in.

(always through cell centre) and celllooper.

Definition at line 3013 of file cellCuts.C.

References cellCuts::clearOut(), Foam::endl(), and Foam::Pout.

Here is the call graph for this function:

◆ cellCuts() [5/6]

cellCuts ( const polyMesh mesh,
const cellLooper cellCutter,
const labelList cellLabels,
const List< plane > &  cutPlanes,
const bool  verbose = true 
)

Construct from list of cells to cut and plane to cut with and.

celllooper. (constructor above always cuts through cell centre)

Definition at line 3060 of file cellCuts.C.

References cellCuts::clearOut(), Foam::endl(), and Foam::Pout.

Here is the call graph for this function:

◆ cellCuts() [6/6]

cellCuts ( const polyMesh mesh,
const boolList pointIsCut,
const boolList edgeIsCut,
const scalarField edgeWeight,
const Map< edge > &  faceSplitCut,
const labelListList cellLoops,
const label  nLoops,
const labelListList cellAnchorPoints,
const bool  verbose = true 
)

Construct from components.

Definition at line 3110 of file cellCuts.C.

References Foam::endl(), and Foam::Pout.

Here is the call graph for this function:

◆ ~cellCuts()

~cellCuts ( )
default

Destructor.

Member Function Documentation

◆ ClassName()

ClassName ( "cellCuts"  )

Runtime type information.

◆ clearOut()

void clearOut ( )

Clear out demand-driven storage.

Definition at line 3143 of file cellCuts.C.

Referenced by cellCuts::cellCuts().

Here is the caller graph for this function:

◆ pointIsCut()

const boolList & pointIsCut ( ) const
inline

Is mesh point cut.

Definition at line 555 of file cellCuts.H.

Referenced by meshCutAndRemove::setRefinement().

Here is the caller graph for this function:

◆ edgeIsCut()

const boolList & edgeIsCut ( ) const
inline

Is edge cut.

Definition at line 561 of file cellCuts.H.

Referenced by meshCutter::setRefinement(), and meshCutAndRemove::setRefinement().

Here is the caller graph for this function:

◆ edgeWeight()

const scalarField & edgeWeight ( ) const
inline

If edge is cut gives weight (ratio between start() and end())

Definition at line 567 of file cellCuts.H.

Referenced by meshCutter::setRefinement(), and meshCutAndRemove::setRefinement().

Here is the caller graph for this function:

◆ faceCuts()

const labelListList & faceCuts ( ) const
inline

Cuts per existing face (includes those along edge of face)

Cuts in no particular order

Definition at line 574 of file cellCuts.H.

◆ faceSplitCut()

const Map< edge > & faceSplitCut ( ) const
inline

Gives for split face the two cuts that split the face into two.

Definition at line 584 of file cellCuts.H.

Referenced by meshCutter::setRefinement(), and meshCutAndRemove::setRefinement().

Here is the caller graph for this function:

◆ cellLoops()

const labelListList & cellLoops ( ) const
inline

For each cut cell the cut along the circumference.

Definition at line 590 of file cellCuts.H.

Referenced by cellCuts::cellCuts(), meshCutter::setRefinement(), and meshCutAndRemove::setRefinement().

Here is the caller graph for this function:

◆ nLoops()

label nLoops ( ) const
inline

Number of valid cell loops.

Definition at line 596 of file cellCuts.H.

Referenced by meshCutter::setRefinement(), meshCutAndRemove::setRefinement(), and refinementIterator::setRefinement().

Here is the caller graph for this function:

◆ cellAnchorPoints()

const labelListList & cellAnchorPoints ( ) const
inline

For each cut cell the points on the 'anchor' side of the cell.

Definition at line 602 of file cellCuts.H.

Referenced by meshCutter::setRefinement(), and meshCutAndRemove::setRefinement().

Here is the caller graph for this function:

◆ loopPoints()

Foam::pointField loopPoints ( const label  celli) const

Returns coordinates of points on loop for given cell.

Uses cellLoops_ and edgeWeight_

Definition at line 3149 of file cellCuts.C.

References forAll, and UList< T >::size().

Here is the call graph for this function:

◆ nonAnchorPoints()

Foam::labelList nonAnchorPoints ( const labelList cellPoints,
const labelList anchorPoints,
const labelList loop 
) const

Invert anchor point selection.

Definition at line 1329 of file cellCuts.C.

References forAll, UList< T >::found(), List< T >::setSize(), and UList< T >::size().

Here is the call graph for this function:

◆ flip()

void flip ( const label  celli)

Flip loop for celli. Updates anchor points as well.

Definition at line 3174 of file cellCuts.C.

References mesh, and Foam::reverse().

Here is the call graph for this function:

◆ flipLoopOnly()

void flipLoopOnly ( const label  celli)

Flip loop for celli. Does not update anchors. Use with care.

(only if you're sure loop orientation is wrong)

Definition at line 3191 of file cellCuts.C.

References Foam::reverse().

Here is the call graph for this function:

◆ writeOBJ() [1/2]

void writeOBJ ( Ostream os,
const pointField loopPoints,
label &  vertI 
) const

debugging:Write list of cuts to stream in OBJ format

Definition at line 3199 of file cellCuts.C.

References Foam::endl(), forAll, os(), Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Here is the call graph for this function:

◆ writeOBJ() [2/2]

void writeOBJ ( Ostream os) const

debugging:Write all of cuts to stream in OBJ format

Definition at line 3226 of file cellCuts.C.

References forAll, and os().

Here is the call graph for this function:

◆ writeCellOBJ()

void writeCellOBJ ( const fileName dir,
const label  celli 
) const

debugging:Write edges of cell and loop

Definition at line 3240 of file cellCuts.C.


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