45 template<
class FaceList,
class Po
intField>
51 if (edgesPtr_ || faceFacesPtr_ || edgeFacesPtr_ || faceEdgesPtr_)
55 <<
"addressing already calculated"
60 const List<face_type>& locFcs = localFaces();
67 for (
const auto&
f : locFcs)
73 edgesPtr_.reset(
new edgeList(maxEdges));
74 auto& edges = *edgesPtr_;
77 auto& edgeFaces = *edgeFacesPtr_;
81 List<DynamicList<label>>
ff(locFcs.size());
84 auto& faceEdges = *faceEdgesPtr_;
94 faceIntoEdges[facei] = locFcs[facei].edges();
96 labelList& curFaceEdges = faceEdges[facei];
97 curFaceEdges.
setSize(faceIntoEdges[facei].size());
99 forAll(curFaceEdges, faceEdgeI)
101 curFaceEdges[faceEdgeI] = -1;
120 const face_type& curF = locFcs[facei];
121 const edgeList& curEdges = faceIntoEdges[facei];
124 List<DynamicList<label>> neiFaces(curF.size());
125 List<DynamicList<label>> edgeOfNeiFace(curF.size());
127 label nNeighbours = 0;
133 if (faceEdges[facei][edgeI] >= 0)
continue;
138 const edge&
e = curEdges[edgeI];
144 forAll(nbrFaces, nbrFacei)
147 label curNei = nbrFaces[nbrFacei];
153 const edgeList& searchEdges = faceIntoEdges[curNei];
155 forAll(searchEdges, neiEdgeI)
157 if (searchEdges[neiEdgeI] ==
e)
162 neiFaces[edgeI].append(curNei);
163 edgeOfNeiFace[edgeI].append(neiEdgeI);
166 ff[facei].append(curNei);
167 ff[curNei].append(facei);
187 for (label neiSearch = 0; neiSearch < nNeighbours; neiSearch++)
191 label minNei = locFcs.size();
195 if (neiFaces[nfI].size() && neiFaces[nfI][0] < minNei)
198 minNei = neiFaces[nfI][0];
205 edges[nEdges] = curEdges[nextNei];
208 faceEdges[facei][nextNei] = nEdges;
210 DynamicList<label>& cnf = neiFaces[nextNei];
211 DynamicList<label>& eonf = edgeOfNeiFace[nextNei];
220 faceEdges[cnf[cnfI]][eonf[cnfI]] = nEdges;
222 curEf[cnfI + 1] = cnf[cnfI];
235 <<
"Error in internal edge insertion"
241 nInternalEdges_ = nEdges;
251 if (curEdges[edgeI] < 0)
254 edges[nEdges] = faceIntoEdges[facei][edgeI];
255 curEdges[edgeI] = nEdges;
268 edges.setSize(nEdges);
271 edgeFaces.setSize(nEdges);
275 auto& faceFaces = *faceFacesPtr_;
279 faceFaces[facei].transfer(
ff[facei]);