12 #include "libmesh/elem.h" 21 "input",
"Name of an existing mesh generator to which we assign element IDs");
22 params.
addParam<std::vector<ExtraElementIDName>>(
"id_name",
"Extra integer id names");
23 params.
addParam<ExtraElementIDName>(
"material_id_name",
"material_id",
"Material id name");
24 params.
addParam<std::vector<dof_id_type>>(
25 "exclude_material_id",
26 "Define a list of material IDs to be excluded in the depletion ID generation");
27 params.
addParam<std::vector<ExtraElementIDName>>(
28 "exclude_id_name",
"Extra ID names that need to be excluded in the depletion ID generation");
29 params.
addParam<std::vector<std::vector<dof_id_type>>>(
30 "exclude_id_value",
"Extra ID values corresponding to names defined in `exclude_id_name`");
32 "generated_id_name",
"depletion_id",
"The generated extra element integer name");
34 "This DepletionIDGenerator source code is to assign an extra element integer for " 35 "elements on a mesh based on material and other extra element IDs that is typically used for " 42 _material_id_name(getParam<ExtraElementIDName>(
"material_id_name"))
46 std::unique_ptr<MeshBase>
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())
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()));
std::unordered_map< dof_id_type, dof_id_type > getExtraIDUniqueCombinationMap(const MeshBase &mesh, const std::set< SubdomainID > &block_ids, std::vector< ExtraElementIDName > extra_ids)
T & getMesh(MooseMesh &mesh)
function to cast mesh
ExtraElementIDName _material_id_name
material id name
static InputParameters validParams()
const Parallel::Communicator & comm() const
DepletionIDGenerator(const InputParameters ¶meters)
bool isParamValid(const std::string &name) const
virtual std::unique_ptr< MeshBase > generate() override
void paramError(const std::string ¶m, Args... args) const
static InputParameters validParams()
Assigns depletion IDs to elements based on reporting and material IDs.
std::unique_ptr< MeshBase > & _input
input mesh for adding element IDs
registerMooseObject("ReactorApp", DepletionIDGenerator)
void set_union(T &data, const unsigned int root_id) const