FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

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...

#include <OpenFOAM/cellMatcher.H>


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 nessecary try other rotations of this face (only nessecary for wedge, tet-wedge)
  • if nessecary try other faces which most unique face shape (never nessecary 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 100 of file cellMatcher.H.

Inheritance diagram for cellMatcher:
Collaboration diagram for cellMatcher:

List of all members.

Public Member Functions

 cellMatcher (const label vertPerCell, const label facePerCell, const label maxVertPerFace, const word &cellModelName)
 Construct given mesh and shape factors.
virtual  ~cellMatcher ()
const Map< label > &  localPoint () const
const faceList &  localFaces () const
const labelList &  faceSize () const
const labelList &  pointMap () const
const labelList &  faceMap () const
const labelList &  edgeFaces () const
const labelListList &  pointFaceIndex () const
const labelList &  vertLabels () const
const labelList &  faceLabels () const
const cellModel &  model () 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.
virtual bool  faceSizeMatch (const faceList &, const labelList &) const =0
 Check whether number of face sizes match the shape.
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.
virtual bool  isA (const primitiveMesh &mesh, const label cellI)=0
 Exact match. Uses faceSizeMatch.
virtual bool  isA (const faceList &)=0
 Exact match given all the faces forming a cell. No checks.
virtual bool  matches (const primitiveMesh &mesh, const label cellI, cellShape &shape)=0
 Like isA but also constructs a cellShape (if shape matches)

Static Public Member Functions

static labelList  makeIdentity (const label nElems)
 Create list with incrementing labels.

Protected Member Functions

label  calcLocalFaces (const faceList &faces, const labelList &myFaces)
 Calculates localFaces. Returns number of local vertices (or -1.
void  calcEdgeAddressing (const label numVert)
 Fill edge (start, end) to face number.
void  calcPointFaceIndex ()
 Fill vertex/face to index in face data structure.
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.

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.
static label  nextVert (const label, const label, const bool)
 Step along face either in righthand or lefthand direction.

Protected Attributes

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

Constructor & Destructor Documentation

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

Construct given mesh and shape factors.

Definition at line 53 of file cellMatcher.C.

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

virtual ~cellMatcher (  ) [inline, virtual]

Definition at line 207 of file cellMatcher.H.


Member Function Documentation

Foam::label edgeKey ( const label   numVert,
const label   v0,
const label   v1  
) [inline, static, protected]

Given start and end of edge generate unique key.

Definition at line 100 of file cellMatcherI.H.

References v1.

Foam::label nextVert ( const label   localVertI,
const label   size,
const bool   rightHand  
) [inline, static, protected]

Step along face either in righthand or lefthand direction.

Definition at line 112 of file cellMatcherI.H.

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 90 of file cellMatcher.C.

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

void calcEdgeAddressing ( const label   numVert  ) [protected]

Fill edge (start, end) to face number.

Definition at line 160 of file cellMatcher.C.

References Foam::abort(), f(), Foam::FatalError, FatalErrorIn, and forAll.

void calcPointFaceIndex (  ) [protected]

Fill vertex/face to index in face data structure.

Definition at line 213 of file cellMatcher.C.

References f(), and forAll.

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 243 of file cellMatcher.C.

References Foam::abort(), Foam::FatalError, and FatalErrorIn.

Foam::labelList makeIdentity ( const label   nElems  ) [static]

Create list with incrementing labels.

Definition at line 37 of file cellMatcher.C.

References forAll.

Referenced by degenerateMatcher::match().

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

Definition at line 32 of file cellMatcherI.H.

References cellMatcher::localPoint_.

const Foam::faceList & localFaces (  ) const [inline]

Definition at line 38 of file cellMatcherI.H.

const Foam::labelList & faceSize (  ) const [inline]

Definition at line 44 of file cellMatcherI.H.

const Foam::labelList & pointMap (  ) const [inline]

Definition at line 50 of file cellMatcherI.H.

const Foam::labelList & faceMap (  ) const [inline]

Definition at line 56 of file cellMatcherI.H.

const Foam::labelList & edgeFaces (  ) const [inline]

Definition at line 62 of file cellMatcherI.H.

const Foam::labelListList & pointFaceIndex (  ) const [inline]

Definition at line 68 of file cellMatcherI.H.

const Foam::labelList & vertLabels (  ) const [inline]

Definition at line 74 of file cellMatcherI.H.

const Foam::labelList & faceLabels (  ) const [inline]

Definition at line 80 of file cellMatcherI.H.

const Foam::cellModel & model (  ) const [inline]

Definition at line 86 of file cellMatcherI.H.

References cellModeller::lookup().

void write ( Foam::Ostream &   os  ) const

Definition at line 278 of file cellMatcher.C.

References Foam::endl(), and forAll.

virtual label nVertPerCell (  ) const [pure virtual]
virtual label nFacePerCell (  ) const [pure virtual]
virtual label nMaxVertPerFace (  ) const [pure virtual]
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.

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.

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.

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.

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.

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.


Member Data Documentation

Map<label> localPoint_ [protected]

Definition at line 120 of file cellMatcher.H.

Referenced by cellMatcher::localPoint().

faceList localFaces_ [protected]

Faces using local vertex numbering.

Definition at line 123 of file cellMatcher.H.

labelList faceSize_ [protected]

Number of vertices per face in localFaces_.

Definition at line 126 of file cellMatcher.H.

labelList pointMap_ [protected]

Map from local to mesh vertex numbering.

Definition at line 129 of file cellMatcher.H.

labelList faceMap_ [protected]

Map from local to mesh face numbering.

Definition at line 132 of file cellMatcher.H.

labelList edgeFaces_ [protected]

Map from 'edge' to neighbouring faces.

Definition at line 135 of file cellMatcher.H.

pointFaceIndex[localVertI][localFaceI] is index in localFace

where localVertI is.

Definition at line 139 of file cellMatcher.H.

labelList vertLabels_ [protected]

After matching: holds mesh vertices in cellmodel order.

Definition at line 142 of file cellMatcher.H.

labelList faceLabels_ [protected]

After matching: holds mesh faces in cellmodel order.

Definition at line 145 of file cellMatcher.H.

const word cellModelName_ [protected]

CellModel name.

Definition at line 148 of file cellMatcher.H.

const cellModel* cellModelPtr_ [mutable, protected]

Definition at line 150 of file cellMatcher.H.


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