190 for (
int i = 0; i < elLock.size(); i++)
192 vector<NodeSharedPtr> nodes;
193 elLock[i]->GetEl()->GetCurvedNodes(nodes);
194 for (
int j = 0; j < nodes.size(); j++)
196 ignoredNodes.insert(nodes[j]);
203 switch (
m_mesh->m_spaceDim)
207 for(
auto &edge :
m_mesh->m_edgeSet)
209 if(edge->m_elLink.size() == 2)
214 boundaryNodes.insert(edge->m_n1);
215 boundaryNodes.insert(edge->m_n2);
216 for(
int i = 0; i < edge->m_edgeNodes.size(); i++)
218 boundaryNodes.insert(edge->m_edgeNodes[i]);
227 for (
auto &face :
m_mesh->m_faceSet)
229 if (face->m_elLink.size() == 2)
234 vector<NodeSharedPtr> vs = face->m_vertexList;
235 for (
int j = 0; j < vs.size(); j++)
237 boundaryNodes.insert(vs[j]);
240 vector<EdgeSharedPtr> es = face->m_edgeList;
241 for (
int j = 0; j < es.size(); j++)
243 for (
int k = 0; k < es[j]->m_edgeNodes.size(); k++)
245 boundaryNodes.insert(es[j]->m_edgeNodes[k]);
249 for (
int i = 0; i < face->m_faceNodes.size(); i++)
251 boundaryNodes.insert(face->m_faceNodes[i]);
258 for (
auto &node :
m_mesh->m_vertexSet)
260 if(node->GetNumCadCurve() > 1)
262 boundaryNodes.insert(node);
274 vector<NodeSharedPtr> remainEdgeVertex;
275 vector<NodeSharedPtr> remainFace;
276 vector<NodeSharedPtr> remainVolume;
280 for (
auto &node :
m_mesh->m_vertexSet)
282 if (boundaryNodes.find(node) == boundaryNodes.end() &&
283 ignoredNodes.find(node) == ignoredNodes.end())
285 remainEdgeVertex.push_back(node);
286 if (node->GetNumCadCurve() == 1)
290 else if (node->GetNumCADSurf() == 1)
302 for (
auto &edge :
m_mesh->m_edgeSet)
304 vector<NodeSharedPtr> &n = edge->m_edgeNodes;
305 for (
int j = 0; j < n.size(); j++)
307 if (boundaryNodes.find(n[j]) == boundaryNodes.end() &&
308 ignoredNodes.find(n[j]) == ignoredNodes.end())
310 remainEdgeVertex.push_back(n[j]);
311 if (n[j]->GetNumCadCurve() == 1)
315 else if (n[j]->GetNumCADSurf() == 1)
328 for (
auto &face :
m_mesh->m_faceSet)
330 vector<NodeSharedPtr> &n = face->m_faceNodes;
331 for (
int j = 0; j < n.size(); j++)
333 if (boundaryNodes.find(n[j]) == boundaryNodes.end() &&
334 ignoredNodes.find(n[j]) == ignoredNodes.end())
336 remainFace.push_back(n[j]);
337 if (n[j]->GetNumCADSurf() == 1)
350 for (
int i = 0; i <
m_mesh->m_element[
m_mesh->m_expDim].size(); i++)
352 vector<NodeSharedPtr> ns =
353 m_mesh->m_element[
m_mesh->m_expDim][i]->GetVolumeNodes();
354 for (
int j = 0; j < ns.size(); j++)
356 if (boundaryNodes.find(ns[j]) == boundaryNodes.end() &&
357 ignoredNodes.find(ns[j]) == ignoredNodes.end())
359 remainVolume.push_back(ns[j]);
366 m_res->n = remainEdgeVertex.size()
367 + remainFace.size() + remainVolume.size();
370 vector<vector<NodeSharedPtr> > ret;
371 vector<vector<NodeSharedPtr> > retPart;
375 vector<int> num_el(remainEdgeVertex.size());
376 for (
int i = 0; i < remainEdgeVertex.size(); i++)
379 auto it =
m_nodeElMap.find(remainEdgeVertex[i]->m_id);
380 vector<ElUtilSharedPtr> &elUtils = it->second;
381 num_el[i] = elUtils.size();
384 vector<int> permNode(remainEdgeVertex.size());
385 for (
int i = 0; i < remainEdgeVertex.size(); ++i)
389 std::sort(permNode.begin(), permNode.end(), NodeComparator(num_el));
391 vector<NodeSharedPtr> remainEdgeVertexSort(remainEdgeVertex.size());
392 for (
int i = 0; i < remainEdgeVertex.size(); ++i)
395 remainEdgeVertexSort[i] = remainEdgeVertex[j];
401 cout <<
"Number of Edge/Vertex Coloursets: " << retPart.size() << endl;
403 for (
int i = 0; i < retPart.size(); i++)
405 ret.push_back(retPart[i]);
412 cout <<
"Number of Face Coloursets: " << retPart.size() << endl;
414 for (
int i = 0; i < retPart.size(); i++)
416 ret.push_back(retPart[i]);
423 cout <<
"Number of Volume Coloursets: " << retPart.size() << endl;
425 for (
int i = 0; i < retPart.size(); i++)
427 ret.push_back(retPart[i]);
#define ASSERTL0(condition, msg)
std::vector< std::vector< NodeSharedPtr > > CreateColoursets(std::vector< NodeSharedPtr > remain)
MeshSharedPtr m_mesh
Mesh object.
std::unordered_set< NodeSharedPtr, NodeHash > NodeSet