40void Foam::cellPointConnectivity::generateCellPointConnectivity(label cellI)
42 const cell& cFaceLabels(mesh_.
cells()[cellI]);
48 forAll(cPointLabels, pointI)
50 pointLabelPointIndices[pointI] =
53 sort(pointLabelPointIndices);
65 edgeLabelsEdgeIndices[2*cEdgeI][0] = cEdges[cEdgeI][0];
66 edgeLabelsEdgeIndices[2*cEdgeI][1] = cEdges[cEdgeI][1];
67 edgeLabelsEdgeIndices[2*cEdgeI][2] = cEdgeI;
69 edgeLabelsEdgeIndices[2*cEdgeI+1][0] = cEdges[cEdgeI][1];
70 edgeLabelsEdgeIndices[2*cEdgeI+1][1] = cEdges[cEdgeI][0];
71 edgeLabelsEdgeIndices[2*cEdgeI+1][2] = - cEdgeI - 1;
73 sort(edgeLabelsEdgeIndices);
77 forAll(cFaceLabels, cFaceI)
79 const face& cFace(mesh_.faces()[cFaceLabels[cFaceI]]);
81 const bool owner(mesh_.faceOwner()[cFaceLabels[cFaceI]] == cellI);
83 const label cFaceNEdges(cFace.size());
86 edgeLabelsFaceIndices.append(
labelList(3, label(-1)));
87 edgeLabelsFaceIndices.last()[0] =
88 cFace[(cFaceEdgeI + owner) % cFaceNEdges];
89 edgeLabelsFaceIndices.last()[1] =
90 cFace[(cFaceEdgeI + !owner) % cFaceNEdges];
91 edgeLabelsFaceIndices.last()[2] = cFaceI;
94 sort(edgeLabelsFaceIndices);
101 forAll(edgeLabelsFaceIndices,
I)
103 const label edgeLabelsEdgeIndex(edgeLabelsEdgeIndices[
I][2]);
104 const label absCellEdgeEdgeIndex
106 edgeLabelsEdgeIndex >= 0
107 ? edgeLabelsEdgeIndex
108 : - edgeLabelsEdgeIndex - 1
110 const label absCellEdgeFaceIndex(edgeLabelsFaceIndices[
I][2]);
111 const label edgeLabelsFaceIndex
113 edgeLabelsEdgeIndex >= 0
114 ? absCellEdgeFaceIndex
115 : - absCellEdgeFaceIndex - 1
118 edgeFaceIndices[absCellEdgeEdgeIndex].append(edgeLabelsFaceIndex);
119 faceEdgeIndices[absCellEdgeFaceIndex].append(edgeLabelsEdgeIndex);
126 const labelPair pointIndices(cEdges[edgeI]);
130 edgeFaceIndices[edgeI][0],
131 edgeFaceIndices[edgeI][1]
135 faceIndices[0] >= 0 ? faceIndices[0] : - faceIndices[0] - 1,
136 faceIndices[1] >= 0 ? faceIndices[1] : - faceIndices[1] - 1
139 const bool order(faceIndices[0] > faceIndices[1]);
141 pointLabelEdgeIndexFaceIndexPairs.append(
labelList(4, label(-1)));
142 pointLabelEdgeIndexFaceIndexPairs.last()[0] = pointIndices[0];
143 pointLabelEdgeIndexFaceIndexPairs.last()[1] = edgeI;
144 pointLabelEdgeIndexFaceIndexPairs.last()[2] = absFaceIndices[order];
145 pointLabelEdgeIndexFaceIndexPairs.last()[3] = absFaceIndices[!order];
147 pointLabelEdgeIndexFaceIndexPairs.append(
labelList(4, label(-1)));
148 pointLabelEdgeIndexFaceIndexPairs.last()[0] = pointIndices[1];
149 pointLabelEdgeIndexFaceIndexPairs.last()[1] = edgeI;
150 pointLabelEdgeIndexFaceIndexPairs.last()[2] = absFaceIndices[!order];
151 pointLabelEdgeIndexFaceIndexPairs.last()[3] = absFaceIndices[order];
153 sort(pointLabelEdgeIndexFaceIndexPairs);
157 List<List<Pair<label> > > pointFaceIndexPairs(cPointLabels.size());
160 label pointLabelOld(pointLabelEdgeIndexFaceIndexPairs[0][0]);
163 pointLabelEdgeIndexFaceIndexPairs,
164 pointLabelEdgeIndexFaceIndexPairI
167 const labelList& pointLabelEdgeIndexFaceIndexPair
169 pointLabelEdgeIndexFaceIndexPairs
171 pointLabelEdgeIndexFaceIndexPairI
175 if (pointLabelOld != pointLabelEdgeIndexFaceIndexPair[0])
178 pointLabelOld = pointLabelEdgeIndexFaceIndexPair[0];
181 const label pointI(pointLabelPointIndices[
I][1]);
183 pointEdgeIndices[pointI].append
185 pointLabelEdgeIndexFaceIndexPair[1]
188 pointFaceIndexPairs[pointI].append
192 pointLabelEdgeIndexFaceIndexPair[2],
193 pointLabelEdgeIndexFaceIndexPair[3]
201 forAll(pointFaceIndexPairs, pointI)
205 pointFaceIndices[pointI].append(faceIndexPairs[0][0]);
207 for (label pairI = 1; pairI < faceIndexPairs.size(); pairI ++)
209 for (label pairJ = pairI; pairJ < faceIndexPairs.size(); ++ pairJ)
211 if (faceIndexPairs[pairI-1][1] == faceIndexPairs[pairJ][0])
215 pointEdgeIndices[pointI][pairI],
216 pointEdgeIndices[pointI][pairJ]
221 faceIndexPairs[pairI],
222 faceIndexPairs[pairJ]
228 pointFaceIndices[pointI].append(faceIndexPairs[pairI][0]);
233 forAll(cPointLabels, pointI)
235 labelList& edgeIndices(pointEdgeIndices[pointI]);
236 labelList& faceIndices(pointFaceIndices[pointI]);
238 const label nPointFaces(faceIndices.size());
240 cellPointPoints_[cellI][pointI].resize(nPointFaces);
242 forAll(edgeIndices, edgeI)
244 cellPointPoints_[cellI][pointI][edgeI] =
245 cEdges[edgeIndices[edgeI]]
247 cEdges[edgeIndices[edgeI]][0] == cPointLabels[pointI]
251 cellPointFaces_[cellI][pointI].resize(nPointFaces);
253 forAll(faceIndices, faceI)
255 cellPointFaces_[cellI][pointI][faceI] =
267Foam::cellPointConnectivity::cellPointConnectivity(
const polyMesh&
mesh)
271 cellPointPoints_(
mesh.nCells()),
272 cellPointFaces_(
mesh.nCells())
276 const label
nPoints(
mesh.cellPoints()[cellI].size());
278 cellPointPoints_[cellI].resize(
nPoints);
279 cellPointFaces_[cellI].resize(
nPoints);
281 generateCellPointConnectivity(cellI);
MoveableMeshObject(const word &objName, const objectRegistry &obr)
This class provides ordered connectivity for each point of each cell. Lists are available of the poin...
Mesh consisting of general polyhedral cells.
virtual const faceList & faces() const
Return raw faces.
const cellList & cells() const
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
List< edge > edgeList
List of edge.
Pair< label > labelPair
A pair of labels.
List< labelPair > labelPairList
List of labelPair.
List< labelList > labelListList
List of labelList.
List< label > labelList
A List of labels.
static const Identity< scalar > I
const word GlobalIOList< Tuple2< scalar, vector > >::typeName("scalarVectorTable")
void Swap(DynamicList< T, SizeMinA > &a, DynamicList< T, SizeMinB > &b)
Exchange contents of lists - see DynamicList::swap().
void sort(UList< T > &list)
Sort the list.
#define forAll(list, i)
Loop across all elements in list.