46 std::vector<bool> marked_base_nodes(mesh.
getNodes().size(),
false);
47 for (
auto const org_element : org_elements)
49 for (std::size_t k = 0; k < org_element->getNumberOfBaseNodes(); ++k)
51 auto const& base_node = *org_element->getNode(k);
52 marked_base_nodes[base_node.getID()] =
true;
57 std::vector<MeshLib::Node*> new_mesh_nodes{
static_cast<std::size_t
>(
58 std::count(begin(marked_base_nodes), end(marked_base_nodes),
true))};
59 std::size_t base_node_cnt = 0;
60 auto const& org_nodes = mesh.
getNodes();
61 std::vector<std::size_t> base_node_map(org_nodes.size(), -1);
62 for (std::size_t k = 0; k < org_nodes.size(); ++k)
64 if (marked_base_nodes[k])
66 new_mesh_nodes[base_node_cnt] =
68 base_node_map[k] = base_node_cnt;
74 std::vector<MeshLib::Element*> vec_new_eles;
79 vec_new_eles.push_back(createLinearElement<MeshLib::Line>(
80 e, new_mesh_nodes, base_node_map));
84 vec_new_eles.push_back(createLinearElement<MeshLib::Quad>(
85 e, new_mesh_nodes, base_node_map));
89 vec_new_eles.push_back(createLinearElement<MeshLib::Tri>(
90 e, new_mesh_nodes, base_node_map));
94 vec_new_eles.push_back(createLinearElement<MeshLib::Hex>(
95 e, new_mesh_nodes, base_node_map));
99 vec_new_eles.push_back(createLinearElement<MeshLib::Tet>(
100 e, new_mesh_nodes, base_node_map));
104 OGS_FATAL(
"Mesh element type {:s} is not supported",
109 auto new_mesh = std::make_unique<MeshLib::Mesh>(
110 new_mesh_name, new_mesh_nodes, vec_new_eles,
113 std::vector<MeshLib::MeshItemType>(1,
123 auto double_property =
125 if (double_property ==
nullptr)
131 new_mesh->getProperties().createNewPropertyVector<
double>(
134 assert(new_prop !=
nullptr);
136 for (std::size_t k = 0; k < org_nodes.size(); ++k)
138 if (!marked_base_nodes[k])
142 std::copy_n(double_property->begin() + k * n_src_comp,
144 new_prop->begin() + base_node_map[k] * n_src_comp);