57 if (!faceSizeMatch(faces, myFaces))
63 label numVert = calcLocalFaces(faces, myFaces);
65 if (numVert != vertPerCell)
71 calcEdgeAddressing(numVert);
77 vertLabels_.setSize(vertPerCell);
78 faceLabels_.setSize(facePerCell);
88 if (faceSize_[facei] == 3)
95 const face& face0 = localFaces_[face0I];
98 for (label face0vert0 = 0; face0vert0 < faceSize_[face0I]; face0vert0++)
105 vertLabels_[0] = pointMap_[face0[face0vert0]];
106 faceLabels_[0] = faceMap_[face0I];
117 !(owner[faceMap_[face0I]] == celli)
119 vertLabels_[1] = pointMap_[face0[face0vert1]];
133 const face& face4 = localFaces_[face4I];
139 if (faceSize_[face4I] != 4)
152 faceLabels_[4] = faceMap_[face4I];
155 label face4vert0 = pointFaceIndex_[face0[face0vert0]][face4I];
167 !(owner[faceMap_[face4I]] == celli)
169 vertLabels_[3] = pointMap_[face4[face4vert3]];
184 const face& face2 = localFaces_[face2I];
190 if (faceSize_[face2I] != 3)
196 faceLabels_[2] = faceMap_[face2I];
207 label face2vert3 = pointFaceIndex_[face4[face4vert3]][face2I];
215 (owner[faceMap_[face2I]] == celli)
217 vertLabels_[6] = pointMap_[face2[face2vert6]];
228 faceLabels_[1] = faceMap_[face1I];
229 const face& face1 = localFaces_[face1I];
235 label face1vert6 = pointFaceIndex_[face2[face2vert6]][face1I];
243 !(owner[faceMap_[face1I]] == celli)
245 vertLabels_[5] = pointMap_[face1[face1vert5]];
253 !(owner[faceMap_[face1I]] == celli)
255 vertLabels_[4] = pointMap_[face1[face1vert4]];
263 !(owner[faceMap_[face0I]] == celli)
265 vertLabels_[2] = pointMap_[face0[face0vert2]];
279 faceLabels_[3] = faceMap_[face3I];
296 faceLabels_[5] = faceMap_[face5I];
323 if (myFaces.
size() != 6)
331 for (
const label facei : myFaces)
333 const label size = faces[facei].
size();
349 return (nTris == 2 && nQuads == 4);
399 shape.
reset(model(), vertLabels());
void size(const label n)
Older name for setAddressableSize.
Base class for cellshape matchers (hexMatch, prismMatch, etc.). These are classes which given a mesh ...
Cell-face mesh analysis engine.
An analytical geometric cellShape.
const cellList & cells() const
virtual bool matchShape(const bool checkOnly, const faceList &faces, const labelList &faceOwner, const label celli, const labelList &myFaces)
Low level shape recognition. Return true if matches.
wedgeMatcher()
Default construct.
Various functions to operate on Lists.
#define forAll(list, i)
Loop across all elements in list.
labelList identity(const label len, label start=0)
Return an identity map of the given length with (map[i] == i), works like std::iota() but returning a...
void reset(const cellModel &model, const labelUList &labels, const bool doCollapse=false)
Reset from components.
virtual const labelList & faceOwner() const
Return face owner.
virtual const faceList & faces() const
Return raw faces.
virtual label faceHashValue() const
Hash value of all face sizes of this shape. Can be used for.
virtual bool isA(const primitiveMesh &mesh, const label celli)
Exact match. Uses faceSizeMatch.
List< label > labelList
A List of labels.
virtual bool matches(const primitiveMesh &mesh, const label celli, cellShape &shape)
Like isA but also constructs a cellShape (if shape matches)
virtual bool faceSizeMatch(const faceList &, const labelList &) const
Check whether number of face sizes match the shape.
static constexpr const zero Zero
Global zero (0)