49 std::unique_ptr<MeshBase>
mesh = std::move(
_input);
51 std::vector<ExtraElementIDName> id_names;
52 id_names = getParam<std::vector<ExtraElementIDName>>(
"id_name");
57 "'is not defined in input mesh!");
63 const auto exclude_id_name = getParam<std::vector<ExtraElementIDName>>(
"exclude_id_name");
64 const auto & exclude_id_value =
65 getParam<std::vector<std::vector<dof_id_type>>>(
"exclude_id_value");
66 std::vector<unsigned int> id_index;
67 std::vector<std::set<dof_id_type>> id_value_set;
68 id_index.resize(exclude_id_name.size());
69 id_value_set.resize(exclude_id_name.size());
70 for (
unsigned int i = 0; i < exclude_id_name.size(); ++i)
72 id_index[i] =
mesh->get_elem_integer_index(exclude_id_name[i]);
73 std::copy(exclude_id_value[i].begin(),
74 exclude_id_value[i].end(),
75 std::inserter(id_value_set[i], id_value_set[i].end()));
78 std::set<dof_id_type> ids;
79 for (
const auto & elem :
mesh->active_element_ptr_range())
83 if (ids.count(parsed_ids[elem->id()]))
86 bool is_exclude_elem =
false;
87 for (
unsigned int i = 0; i < id_index.size(); ++i)
89 const auto id = elem->get_extra_integer(id_index[i]);
90 if (id_value_set[i].
count(
id))
92 is_exclude_elem =
true;
98 ids.insert(parsed_ids[elem->id()]);
102 std::map<dof_id_type, dof_id_type> map_ids;
103 for (
auto id : parsed_ids)
105 dof_id_type new_id = std::distance(ids.begin(), ids.find(
id.second)) + 1;
106 map_ids[
id.second] = new_id;
110 for (
const auto & elem :
mesh->active_element_ptr_range())
112 dof_id_type
id = parsed_ids[elem->id()];
113 dof_id_type new_id = 0;
115 new_id = map_ids[
id];
116 parsed_ids[elem->id()] = new_id;
120 const auto depletion_id =
121 mesh->add_elem_integer(getParam<ExtraElementIDName>(
"generated_id_name"));
122 for (Elem *
const elem :
mesh->active_element_ptr_range())
123 elem->set_extra_integer(depletion_id, parsed_ids.at(elem->id()));