25 const std::vector<std::size_t>& elements)
31 std::vector<std::size_t> node_marked_counts(
_mesh.getNumberOfNodes(), 0);
33 for (std::size_t eid : elements)
35 auto* e =
_mesh.getElement(eid);
36 for (
unsigned i = 0; i < e->getNumberOfNodes(); i++)
44 std::vector<std::size_t> connected_nodes;
45 for (std::size_t i = 0; i < node_marked_counts.size(); i++)
47 if (node_marked_counts[i] ==
48 _mesh.getElementsConnectedToNode(*
_mesh.getNode(i)).size())
50 connected_nodes.push_back(i);
55 return connected_nodes.size();
78 std::vector<std::size_t> vec_boundary_nodes;
79 if (
_mesh.getDimension() == 1)
83 if (
_mesh.getElementsConnectedToNode(*n).size() == 1)
85 vec_boundary_nodes.push_back(n->getID());
89 else if (
_mesh.getDimension() == 2)
93 if (elem->getDimension() <
_mesh.getDimension())
97 if (!elem->isBoundaryElement())
102 std::size_t
const n_edges(elem->getNumberOfEdges());
103 for (std::size_t i = 0; i < n_edges; ++i)
105 if (elem->getNeighbor(i) !=
nullptr)
109 std::unique_ptr<MeshLib::Element const> edge(elem->getEdge(i));
110 for (
unsigned j = 0; j < edge->getNumberOfNodes(); j++)
112 vec_boundary_nodes.push_back(edge->getNode(j)->getID());
121 if (elem->getDimension() <
_mesh.getDimension())
125 if (!elem->isBoundaryElement())
130 std::size_t
const n_faces(elem->getNumberOfFaces());
131 for (std::size_t i = 0; i < n_faces; ++i)
133 if (elem->getNeighbor(i) !=
nullptr)
137 std::unique_ptr<MeshLib::Element const> face(elem->getFace(i));
138 for (
unsigned j = 0; j < face->getNumberOfNodes(); j++)
140 vec_boundary_nodes.push_back(face->getNode(j)->getID());
145 std::sort(vec_boundary_nodes.begin(), vec_boundary_nodes.end());
146 vec_boundary_nodes.erase(
147 std::unique(vec_boundary_nodes.begin(), vec_boundary_nodes.end()),
148 vec_boundary_nodes.end());
151 return vec_boundary_nodes.size();
156 std::vector<std::size_t> vec_temp(vec.size() +
_marked_nodes.size());
157 auto it = std::set_union(vec.begin(), vec.end(),
_marked_nodes.begin(),
159 vec_temp.resize(it - vec_temp.begin());
165 std::set<Node*> nodes_set;
166 for (
auto e : elements)
168 Node*
const* nodes = e->getNodes();
169 unsigned const nnodes = e->getNumberOfNodes();
170 nodes_set.insert(nodes, nodes + nnodes);
173 std::vector<Node*> nodes;
174 nodes.reserve(nodes_set.size());
176 std::move(nodes_set.cbegin(), nodes_set.cend(), std::back_inserter(nodes));