55 "void topologicalCleaner::checkInvalidConnectionsForVerticesCells()"
66 const VRWGraph& pointCells = mesh_.addressingData().pointCells();
67 const VRWGraph& cellCells = mesh_.addressingData().cellCells();
72 label nInvalidConnections(0);
76 const label pointI = bPoints[bpI];
79 Info <<
"Checking point " << pointI <<
endl;
87 if( !materialForCell[cI] )
89 materialForCell[cI] = material;
100 const label pointCellI =
101 pointCells(pointI, frontCells[fcI]);
107 if( materialForCell[pcI] )
111 cellCells(pointCellI, nI) ==
112 pointCells(pointI, pcI)
115 newFrontCells.
append(pcI);
116 materialForCell[pcI] = material;
123 frontCells = newFrontCells;
125 }
while( frontCells.
size() != 0 );
131 Info <<
"Number of materials for vertex is " << material <<
endl;
136 ++nInvalidConnections;
138 if( irregularNodesPtr )
140 irregularNodesPtr->
insert(pointI);
146 if( materialForCell[pcI] == 1 )
149 const cell&
c =
cells[pointCells(pointI, pcI)];
156 if(
f[pI] == pointI )
157 f[pI] =
nPoints + materialForCell[pcI] - 1;
161 for(
label i=1;i<material;++i)
170 Info <<
"Found " << nInvalidConnections
171 <<
" invalid cell connections" <<
endl;
173 mesh_.clearAddressingData();
175 if( nInvalidConnections != 0 )
189 boolList removeCell(mesh_.cells().size(),
false);
193 # pragma omp parallel for schedule(static, 1)
199 removeCell[faceOwner[edgeFaces(edgeI, fI)]] =
true;
213 std::map<label, labelLongList> exchangeData;
214 std::map<label, labelLongList>::iterator eIter;
220 numFacesAtEdge.insert
228 const label neiProc = edgesAtProcs(eI, procI);
233 eIter = exchangeData.find(neiProc);
234 if( eIter == exchangeData.end() )
239 std::pair<label, labelLongList>
246 eIter = exchangeData.find(neiProc);
249 eIter->second.append(globalEdgeLabel[eI]);
250 eIter->second.append(edgeFaces.
sizeOfRow(eI));
258 eIter = exchangeData.find(neiProcs[procI]);
267 toOtherProc << dataToSend;
274 fromOtherProc >> receivedData;
277 while( counter < receivedData.size() )
279 const label geI = receivedData[counter++];
280 const label nFaces = receivedData[counter++];
282 numFacesAtEdge[geI] += nFaces;
284 if( numFacesAtEdge[geI] > 2 )
286 const label edgeI = globalToLocal[geI];
288 removeCell[faceOwner[edgeFaces(edgeI, fI)]] =
true;
302 decomposeCell_.setSize(mesh_.cells().size());
303 decomposeCell_ =
false;