21 std::string mesh_name, std::vector<MeshLib::Element*>
const& elements)
23 auto ids_vector =
views::ids | ranges::to<std::vector>();
25 DBUG(
"Found {:d} elements in the mesh", elements.size());
28 auto bulk_element_ids = elements | ids_vector;
31 std::unordered_map<std::size_t, MeshLib::Node*> id_node_hash_map;
32 id_node_hash_map.reserve(
35 for (
auto& e : elements)
38 unsigned const n_nodes = e->getNumberOfNodes();
39 for (
unsigned i = 0; i < n_nodes; ++i)
42 auto const it = id_node_hash_map.find(n->
getID());
43 if (it == id_node_hash_map.end())
45 auto new_node_in_map = id_node_hash_map[n->
getID()] =
47 e->setNode(i, new_node_in_map);
51 e->setNode(i, it->second);
56 std::map<std::size_t, MeshLib::Node*> nodes_map;
57 for (
const auto& n : id_node_hash_map)
59 nodes_map[n.first] = n.second;
64 nodes_map | ranges::views::values | ranges::to<std::vector>;
68 nodes_map | ranges::views::keys | ranges::to<std::vector>;
70 auto mesh = std::make_unique<MeshLib::Mesh>(
71 std::move(mesh_name), std::move(element_nodes), std::move(elements),
73 assert(mesh !=
nullptr);