35 Foam::label Foam::primitiveMesh::getEdge
37 List<DynamicList<label> >& pe,
38 DynamicList<edge>& es,
41 const label nextPointI
47 label eI = pe[pointI][ppI];
49 const edge&
e = es[eI];
51 if (e.start() == nextPointI || e.end() == nextPointI)
58 label edgeI = es.size();
59 pe[pointI].append(edgeI);
60 pe[nextPointI].append(edgeI);
61 if (pointI < nextPointI)
63 es.append(edge(pointI, nextPointI));
67 es.append(edge(nextPointI, pointI));
73 void Foam::primitiveMesh::calcEdges(
const bool doFaceEdges)
const
77 Pout<<
"primitiveMesh::calcEdges(const bool) : "
78 <<
"calculating edges, pointEdges and optionally faceEdges"
84 if ((edgesPtr_ || pePtr_) || (doFaceEdges && fePtr_))
86 FatalErrorIn(
"primitiveMesh::calcEdges(const bool) const")
87 <<
"edges or pointEdges or faceEdges already calculated"
107 List<DynamicList<label> > pe(
nPoints());
123 faceEdges[faceI].setSize(fcs[faceI].size());
134 nInternal0Edges_ = 0;
136 label nInt1Edges = 0;
141 if (nInternalPoints_ == -1)
146 const face&
f = fcs[faceI];
150 label pointI = f[fp];
151 label nextPointI = f[f.fcIndex(fp)];
153 label edgeI = getEdge(pe, es, pointI, nextPointI);
157 (*fePtr_)[faceI][fp] = edgeI;
163 nInternal0Edges_ = es.size();
169 for (label faceI = nInternalFaces_; faceI < fcs.size(); faceI++)
171 const face& f = fcs[faceI];
175 label pointI = f[fp];
176 label nextPointI = f[f.fcIndex(fp)];
178 label oldNEdges = es.size();
179 label edgeI = getEdge(pe, es, pointI, nextPointI);
181 if (es.size() > oldNEdges)
187 (*fePtr_)[faceI][fp] = edgeI;
193 for (label faceI = 0; faceI < nInternalFaces_; faceI++)
195 const face& f = fcs[faceI];
199 label pointI = f[fp];
200 label nextPointI = f[f.fcIndex(fp)];
202 label oldNEdges = es.size();
203 label edgeI = getEdge(pe, es, pointI, nextPointI);
205 if (es.size() > oldNEdges)
207 if (pointI < nInternalPoints_)
209 if (nextPointI < nInternalPoints_)
220 if (nextPointI < nInternalPoints_)
232 (*fePtr_)[faceI][fp] = edgeI;
243 if (nInternalPoints_ != -1)
245 nInternalEdges_ = es.size()-nExtEdges;
246 nInternal1Edges_ = nInternal0Edges_+nInt1Edges;
282 label internal0EdgeI = 0;
285 label internal1EdgeI = nInternal0Edges_;
288 label internal2EdgeI = nInternal1Edges_;
291 label externalEdgeI = nInternalEdges_;
301 const DynamicList<label>& pEdges = pe[pointI];
303 nbrPoints.setSize(pEdges.size());
307 const edge& e = es[pEdges[i]];
309 label nbrPointI = e.otherVertex(pointI);
311 if (nbrPointI < pointI)
317 nbrPoints[i] = nbrPointI;
323 if (nInternalPoints_ == -1)
328 if (nbrPoints[i] != -1)
330 label edgeI = pEdges[nbrPoints.indices()[i]];
332 oldToNew[edgeI] = internal0EdgeI++;
338 if (pointI < nInternalPoints_)
342 label nbrPointI = nbrPoints[i];
344 label edgeI = pEdges[nbrPoints.indices()[i]];
348 if (edgeI < nExtEdges)
351 oldToNew[edgeI] = externalEdgeI++;
353 else if (nbrPointI < nInternalPoints_)
356 oldToNew[edgeI] = internal0EdgeI++;
361 oldToNew[edgeI] = internal1EdgeI++;
370 label nbrPointI = nbrPoints[i];
372 label edgeI = pEdges[nbrPoints.indices()[i]];
376 if (edgeI < nExtEdges)
379 oldToNew[edgeI] = externalEdgeI++;
381 else if (nbrPointI < nInternalPoints_)
390 oldToNew[edgeI] = internal2EdgeI++;
405 const edge& e = es[edgeI];
408 <<
"Did not sort edge " << edgeI <<
" points:" << e
411 <<
"Current buckets:" <<
endl
412 <<
" internal0EdgeI:" << internal0EdgeI <<
endl
413 <<
" internal1EdgeI:" << internal1EdgeI <<
endl
414 <<
" internal2EdgeI:" << internal2EdgeI <<
endl
415 <<
" externalEdgeI:" << externalEdgeI <<
endl
425 edgesPtr_ =
new edgeList(es.size());
429 edges[oldToNew[edgeI]] = es[edgeI];
437 DynamicList<label>& pEdges = pe[pointI];
440 pointEdges[pointI].transfer(pEdges);
457 Foam::label Foam::primitiveMesh::findFirstCommonElementFromSortedLists
468 while (iter1 != list1.end() && iter2 != list2.end())
474 else if (*iter1 > *iter2)
488 "primitiveMesh::findFirstCommonElementFromSortedLists"
489 "(const labelList&, const labelList&)"
490 ) <<
"No common elements in lists " << list1 <<
" and " << list2
528 Pout<<
"primitiveMesh::faceEdges() : "
529 <<
"calculating faceEdges" <<
endl;
542 const face& f = fcs[faceI];
549 label pointI = f[fp];
550 label nextPointI = f[f.
fcIndex(fp)];
557 label edgeI = pEdges[i];
559 if (es[edgeI].otherVertex(pointI) == nextPointI)
573 void Foam::primitiveMesh::clearOutEdges()
591 return faceEdges()[faceI];
596 const face& f = faces()[faceI];
608 findFirstCommonElementFromSortedLists
623 return faceEdges(faceI, labels_);
635 return cellEdges()[cellI];
645 const labelList& fe = faceEdges(cFaces[i]);
649 labelSet_.insert(fe[feI]);
655 if (labelSet_.size() > storage.
capacity())
662 storage.
append(iter.key());
672 return cellEdges(cellI, labels_);