All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cellMatcher Class Referenceabstract

Base class for cellshape matchers (hexMatch, prismMatch, etc.). These are classes which given a mesh and cell number find out the orientation of the cellShape and construct cell-vertex to mesh-vertex mapping and cell-face to mesh-face mapping. More...

Inheritance diagram for cellMatcher:
Collaboration diagram for cellMatcher:

Public Member Functions

 cellMatcher (const label vertPerCell, const label facePerCell, const label maxVertPerFace, const word &cellModelName)
 Construct given mesh and shape factors. More...
 
 cellMatcher (const cellMatcher &)=delete
 Disallow default bitwise copy construction. More...
 
virtual ~cellMatcher ()
 Destructor. More...
 
const Map< label > & localPoint () const
 
const faceListlocalFaces () const
 
const labelListfaceSize () const
 
const labelListpointMap () const
 
const labelListfaceMap () const
 
const labelListedgeFaces () const
 
const labelListListpointFaceIndex () const
 
const labelListvertLabels () const
 
const labelListfaceLabels () const
 
const cellModelmodel () const
 
void write (Ostream &os) const
 
virtual label nVertPerCell () const =0
 
virtual label nFacePerCell () const =0
 
virtual label nMaxVertPerFace () const =0
 
virtual label faceHashValue () const =0
 Hash value of all face sizes of this shape. Can be used for. More...
 
virtual bool faceSizeMatch (const faceList &, const labelList &) const =0
 Check whether number of face sizes match the shape. More...
 
virtual bool matchShape (const bool checkOnly, const faceList &faces, const labelList &faceOwner, const label celli, const labelList &myFaces)=0
 Low level shape recognition. Return true if matches. More...
 
virtual bool isA (const primitiveMesh &mesh, const label celli)=0
 Exact match. Uses faceSizeMatch. More...
 
virtual bool isA (const faceList &)=0
 Exact match given all the faces forming a cell. No checks. More...
 
virtual bool matches (const primitiveMesh &mesh, const label celli, cellShape &shape)=0
 Like isA but also constructs a cellShape (if shape matches) More...
 
void operator= (const cellMatcher &)=delete
 

Protected Member Functions

label calcLocalFaces (const faceList &faces, const labelList &myFaces)
 Calculates localFaces. Returns number of local vertices (or -1. More...
 
void calcEdgeAddressing (const label numVert)
 Fill edge (start, end) to face number. More...
 
void calcPointFaceIndex ()
 Fill vertex/face to index in face data structure. More...
 
label otherFace (const label numVert, const label v0, const label v1, const label localFacei) const
 Given start,end of edge lookup both faces sharing it and return. More...
 

Static Protected Member Functions

static label edgeKey (const label numVert, const label v0, const label v1)
 Given start and end of edge generate unique key. More...
 
static label nextVert (const label, const label, const bool)
 Step along face either in righthand or lefthand direction. More...
 

Protected Attributes

Map< labellocalPoint_
 
faceList localFaces_
 Faces using local vertex numbering. More...
 
labelList faceSize_
 Number of vertices per face in localFaces_. More...
 
labelList pointMap_
 Map from local to mesh vertex numbering. More...
 
labelList faceMap_
 Map from local to mesh face numbering. More...
 
labelList edgeFaces_
 Map from 'edge' to neighbouring faces. More...
 
labelListList pointFaceIndex_
 pointFaceIndex[localVertI][localFacei] is index in localFace More...
 
labelList vertLabels_
 After matching: holds mesh vertices in cellmodel order. More...
 
labelList faceLabels_
 After matching: holds mesh faces in cellmodel order. More...
 
const word cellModelName_
 CellModel name. More...
 
const cellModelcellModelPtr_
 

Detailed Description

Base class for cellshape matchers (hexMatch, prismMatch, etc.). These are classes which given a mesh and cell number find out the orientation of the cellShape and construct cell-vertex to mesh-vertex mapping and cell-face to mesh-face mapping.

For example,

    hexMatcher hex(mesh);
    cellShape shape;
    ..
    bool isHex = hex.match(celli, shape);

Now shape is set to the correct Hex cellShape (if isHex is true)

Alternatively there is direct access to the vertex and face mapping:

    const labelList& hexVertLabels = hex.vertLabels();
    const labelList& hexFaceLabels = hex.faceLabels();

Now

  • hexVertLabels[n] is vertex label of hex vertex n
  • hexFaceLabels[n] is face label of hex vertex n

Process of cellShape recognition consists of following steps:

  • renumber vertices of cell to local vertex numbers
  • construct (local to cell) addressing edge-to-faces
  • construct (local to cell) addressing vertex and face to index in face
  • find most unique face shape (e.g. triangle for prism)
  • walk (following either vertices in face or jumping from face to other face) to other faces and checking face sizes.
  • if necessary try other rotations of this face (only necessary for wedge, tet-wedge)
  • if necessary try other faces which most unique face shape (never necessary for hex degenerates)

The whole calculation is done such that no lists are allocated during cell checking. E.g. localFaces_ are always sized to hold max. number of possible face vertices and a separate list is filled which holds the actusl face sizes.

For now all hex-degenerates implemented. Numbering taken from picture in demoGuide.

Source files

Definition at line 99 of file cellMatcher.H.

Constructor & Destructor Documentation

◆ cellMatcher() [1/2]

cellMatcher ( const label  vertPerCell,
const label  facePerCell,
const label  maxVertPerFace,
const word cellModelName 
)

Construct given mesh and shape factors.

Definition at line 38 of file cellMatcher.C.

References cellMatcher::calcLocalFaces(), f(), forAll, and List< T >::setSize().

Here is the call graph for this function:

◆ cellMatcher() [2/2]

cellMatcher ( const cellMatcher )
delete

Disallow default bitwise copy construction.

◆ ~cellMatcher()

Member Function Documentation

◆ edgeKey()

Foam::label edgeKey ( const label  numVert,
const label  v0,
const label  v1 
)
inlinestaticprotected

Given start and end of edge generate unique key.

Definition at line 100 of file cellMatcherI.H.

References cellMatcher::nextVert().

Referenced by cellMatcher::calcEdgeAddressing(), cellMatcher::model(), and cellMatcher::otherFace().

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

◆ nextVert()

Foam::label nextVert ( const label  localVertI,
const label  size,
const bool  rightHand 
)
inlinestaticprotected

Step along face either in righthand or lefthand direction.

Definition at line 112 of file cellMatcherI.H.

Referenced by cellMatcher::edgeKey(), wedgeMatcher::matchShape(), tetWedgeMatcher::matchShape(), tetMatcher::matchShape(), pyrMatcher::matchShape(), prismMatcher::matchShape(), and hexMatcher::matchShape().

Here is the caller graph for this function:

◆ calcLocalFaces()

Foam::label calcLocalFaces ( const faceList faces,
const labelList myFaces 
)
protected

Calculates localFaces. Returns number of local vertices (or -1.

if more than vertPerCell).

Definition at line 74 of file cellMatcher.C.

References HashTableCore::end(), f(), HashTable< T, Key, Hash >::find(), forAll, forAllConstIter(), and List< T >::size().

Referenced by cellMatcher::cellMatcher(), wedgeMatcher::matchShape(), tetWedgeMatcher::matchShape(), tetMatcher::matchShape(), pyrMatcher::matchShape(), prismMatcher::matchShape(), and hexMatcher::matchShape().

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

◆ calcEdgeAddressing()

void calcEdgeAddressing ( const label  numVert)
protected

Fill edge (start, end) to face number.

Definition at line 138 of file cellMatcher.C.

References Foam::abort(), cellMatcher::edgeFaces_, cellMatcher::edgeKey(), f(), cellMatcher::faceSize_, Foam::FatalError, FatalErrorInFunction, forAll, and cellMatcher::localFaces_.

Referenced by hexMatcher::matchShape(), wedgeMatcher::matchShape(), tetWedgeMatcher::matchShape(), tetMatcher::matchShape(), pyrMatcher::matchShape(), and prismMatcher::matchShape().

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

◆ calcPointFaceIndex()

void calcPointFaceIndex ( )
protected

Fill vertex/face to index in face data structure.

Definition at line 187 of file cellMatcher.C.

References f(), cellMatcher::faceSize_, forAll, cellMatcher::localFaces_, cellMatcher::otherFace(), and cellMatcher::pointFaceIndex_.

Referenced by hexMatcher::matchShape(), wedgeMatcher::matchShape(), tetWedgeMatcher::matchShape(), tetMatcher::matchShape(), pyrMatcher::matchShape(), and prismMatcher::matchShape().

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

◆ otherFace()

Foam::label otherFace ( const label  numVert,
const label  v0,
const label  v1,
const label  localFacei 
) const
protected

Given start,end of edge lookup both faces sharing it and return.

face != localFacei

Definition at line 216 of file cellMatcher.C.

References Foam::abort(), cellMatcher::edgeFaces_, cellMatcher::edgeKey(), Foam::FatalError, and FatalErrorInFunction.

Referenced by cellMatcher::calcPointFaceIndex(), wedgeMatcher::matchShape(), tetWedgeMatcher::matchShape(), tetMatcher::matchShape(), pyrMatcher::matchShape(), prismMatcher::matchShape(), and hexMatcher::matchShape().

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

◆ localPoint()

const Foam::Map< Foam::label > & localPoint ( ) const
inline

Definition at line 32 of file cellMatcherI.H.

References cellMatcher::localPoint_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ localFaces()

const Foam::faceList & localFaces ( ) const
inline

Definition at line 38 of file cellMatcherI.H.

References cellMatcher::localFaces_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ faceSize()

const Foam::labelList & faceSize ( ) const
inline

Definition at line 44 of file cellMatcherI.H.

References cellMatcher::faceSize_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ pointMap()

const Foam::labelList & pointMap ( ) const
inline

Definition at line 50 of file cellMatcherI.H.

References cellMatcher::pointMap_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ faceMap()

const Foam::labelList & faceMap ( ) const
inline

Definition at line 56 of file cellMatcherI.H.

References cellMatcher::faceMap_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ edgeFaces()

const Foam::labelList & edgeFaces ( ) const
inline

Definition at line 62 of file cellMatcherI.H.

References cellMatcher::edgeFaces_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ pointFaceIndex()

const Foam::labelListList & pointFaceIndex ( ) const
inline

Definition at line 68 of file cellMatcherI.H.

References cellMatcher::pointFaceIndex_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ vertLabels()

const Foam::labelList & vertLabels ( ) const
inline

◆ faceLabels()

const Foam::labelList & faceLabels ( ) const
inline

Definition at line 80 of file cellMatcherI.H.

References cellMatcher::faceLabels_.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ model()

const Foam::cellModel & model ( ) const
inline

◆ write()

void write ( Foam::Ostream os) const

Definition at line 247 of file cellMatcher.C.

References Foam::endl(), cellMatcher::faceMap_, cellMatcher::faceSize_, forAll, cellMatcher::localFaces_, and cellMatcher::pointMap_.

Referenced by cellMatcher::~cellMatcher().

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

◆ nVertPerCell()

virtual label nVertPerCell ( ) const
pure virtual

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ nFacePerCell()

virtual label nFacePerCell ( ) const
pure virtual

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ nMaxVertPerFace()

virtual label nMaxVertPerFace ( ) const
pure virtual

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ faceHashValue()

virtual label faceHashValue ( ) const
pure virtual

Hash value of all face sizes of this shape. Can be used for.

quick initial recognition.

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ faceSizeMatch()

virtual bool faceSizeMatch ( const faceList ,
const labelList  
) const
pure virtual

Check whether number of face sizes match the shape.

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ matchShape()

virtual bool matchShape ( const bool  checkOnly,
const faceList faces,
const labelList faceOwner,
const label  celli,
const labelList myFaces 
)
pure virtual

Low level shape recognition. Return true if matches.

Works in detection mode only (checkOnly=true) or in exact matching. Returns true and sets vertLabels_. Needs faces, faceOwner of all faces in 'mesh' and cell number and labels of faces for this cell. celli only used in combination with faceOwner to detect owner status.

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ isA() [1/2]

virtual bool isA ( const primitiveMesh mesh,
const label  celli 
)
pure virtual

Exact match. Uses faceSizeMatch.

Returns true if cell matches shape exactly.

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ isA() [2/2]

virtual bool isA ( const faceList )
pure virtual

Exact match given all the faces forming a cell. No checks.

on whether faces match up and form a closed shape.

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

◆ matches()

virtual bool matches ( const primitiveMesh mesh,
const label  celli,
cellShape shape 
)
pure virtual

Like isA but also constructs a cellShape (if shape matches)

Implemented in hexMatcher, prismMatcher, pyrMatcher, tetMatcher, tetWedgeMatcher, and wedgeMatcher.

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

◆ operator=()

void operator= ( const cellMatcher )
delete

Referenced by cellMatcher::~cellMatcher().

Here is the caller graph for this function:

Member Data Documentation

◆ localPoint_

Map<label> localPoint_
protected

Definition at line 120 of file cellMatcher.H.

Referenced by cellMatcher::localPoint().

◆ localFaces_

◆ faceSize_

◆ pointMap_

◆ faceMap_

◆ edgeFaces_

labelList edgeFaces_
protected

Map from 'edge' to neighbouring faces.

Definition at line 135 of file cellMatcher.H.

Referenced by cellMatcher::calcEdgeAddressing(), cellMatcher::edgeFaces(), and cellMatcher::otherFace().

◆ pointFaceIndex_

labelListList pointFaceIndex_
protected

◆ vertLabels_

labelList vertLabels_
protected

◆ faceLabels_

labelList faceLabels_
protected

◆ cellModelName_

const word cellModelName_
protected

CellModel name.

Definition at line 148 of file cellMatcher.H.

Referenced by cellMatcher::model().

◆ cellModelPtr_

const cellModel* cellModelPtr_
mutableprotected

Definition at line 150 of file cellMatcher.H.

Referenced by cellMatcher::model().


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