18 const std::vector<std::size_t>& elements)
24 std::vector<std::size_t> node_marked_counts(
_mesh.getNumberOfNodes(), 0);
26 for (std::size_t eid : elements)
28 auto* e =
_mesh.getElement(eid);
29 for (
unsigned i = 0; i < e->getNumberOfNodes(); i++)
37 std::vector<std::size_t> connected_nodes;
38 for (std::size_t i = 0; i < node_marked_counts.size(); i++)
40 if (node_marked_counts[i] ==
41 _mesh.getElementsConnectedToNode(*
_mesh.getNode(i)).size())
43 connected_nodes.push_back(i);
48 return connected_nodes.size();
71 std::vector<std::size_t> vec_boundary_nodes;
72 if (
_mesh.getDimension() == 1)
76 if (
_mesh.getElementsConnectedToNode(*n).size() == 1)
78 vec_boundary_nodes.push_back(n->getID());
82 else if (
_mesh.getDimension() == 2)
86 if (elem->getDimension() <
_mesh.getDimension())
90 if (!elem->isBoundaryElement())
95 std::size_t
const n_edges(elem->getNumberOfEdges());
96 for (std::size_t i = 0; i < n_edges; ++i)
98 if (elem->getNeighbor(i) !=
nullptr)
102 std::unique_ptr<MeshLib::Element const> edge(elem->getEdge(i));
103 for (
unsigned j = 0; j < edge->getNumberOfNodes(); j++)
105 vec_boundary_nodes.push_back(edge->getNode(j)->getID());
114 if (elem->getDimension() <
_mesh.getDimension())
118 if (!elem->isBoundaryElement())
123 std::size_t
const n_faces(elem->getNumberOfFaces());
124 for (std::size_t i = 0; i < n_faces; ++i)
126 if (elem->getNeighbor(i) !=
nullptr)
130 std::unique_ptr<MeshLib::Element const> face(elem->getFace(i));
131 for (
unsigned j = 0; j < face->getNumberOfNodes(); j++)
133 vec_boundary_nodes.push_back(face->getNode(j)->getID());
138 std::sort(vec_boundary_nodes.begin(), vec_boundary_nodes.end());
139 vec_boundary_nodes.erase(
140 std::unique(vec_boundary_nodes.begin(), vec_boundary_nodes.end()),
141 vec_boundary_nodes.end());
144 return vec_boundary_nodes.size();
149 std::vector<std::size_t> vec_temp(vec.size() +
_marked_nodes.size());
150 auto it = std::set_union(vec.begin(), vec.end(),
_marked_nodes.begin(),
152 vec_temp.resize(it - vec_temp.begin());
158 std::set<Node*> nodes_set;
159 for (
auto e : elements)
161 Node*
const* nodes = e->getNodes();
162 unsigned const nnodes = e->getNumberOfNodes();
163 nodes_set.insert(nodes, nodes + nnodes);
166 std::vector<Node*> nodes;
167 nodes.reserve(nodes_set.size());
169 std::move(nodes_set.cbegin(), nodes_set.cend(), std::back_inserter(nodes));