12std::vector<dof_id_type>
14 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
15 const std::vector<std::vector<unsigned int>> & pattern,
16 const bool use_exclude_id,
17 const std::vector<bool> & exclude_ids)
20 for (MooseIndex(pattern) i = 0; i <
pattern.size(); ++i)
21 for (MooseIndex(pattern[i]) j = 0; j <
pattern[i].size(); ++j)
22 n += meshes[pattern[i][j]]->
n_elem();
23 std::vector<dof_id_type> integer_ids;
24 integer_ids.reserve(n);
26 for (MooseIndex(pattern) i = 0; i <
pattern.size(); ++i)
27 for (MooseIndex(pattern[i]) j = 0; j <
pattern[i].size(); ++j)
30 (use_exclude_id && exclude_ids[
pattern[i][j]]) ? DofObject::invalid_id : id++;
31 integer_ids.insert(integer_ids.end(), meshes[pattern[i][j]]->n_elem(), value);
36std::vector<dof_id_type>
38 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
39 const std::vector<std::vector<unsigned int>> & pattern)
42 for (MooseIndex(pattern) i = 0; i <
pattern.size(); ++i)
43 for (MooseIndex(pattern[i]) j = 0; j <
pattern[i].size(); ++j)
44 n += meshes[pattern[i][j]]->
n_elem();
45 std::vector<dof_id_type> integer_ids;
46 integer_ids.reserve(n);
47 for (MooseIndex(pattern) i = 0; i <
pattern.size(); ++i)
48 for (MooseIndex(pattern[i]) j = 0; j <
pattern[i].size(); ++j)
49 integer_ids.insert(integer_ids.end(), meshes[pattern[i][j]]->n_elem(), pattern[i][j]);
53std::vector<dof_id_type>
55 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
56 const std::vector<std::vector<unsigned int>> & pattern,
57 const std::vector<std::vector<dof_id_type>> & id_pattern)
60 for (MooseIndex(pattern) i = 0; i <
pattern.size(); ++i)
61 for (MooseIndex(pattern[i]) j = 0; j <
pattern[i].size(); ++j)
62 n += meshes[pattern[i][j]]->
n_elem();
63 std::vector<dof_id_type> integer_ids;
64 integer_ids.reserve(n);
65 for (MooseIndex(pattern) i = 0; i <
pattern.size(); ++i)
66 for (MooseIndex(pattern[i]) j = 0; j <
pattern[i].size(); ++j)
67 integer_ids.insert(integer_ids.end(), meshes[pattern[i][j]]->n_elem(), id_pattern[i][j]);
73 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
74 const std::vector<std::vector<unsigned int>> & pattern)
76 std::set<SubdomainID> blks;
77 for (MooseIndex(pattern) i = 0; i <
pattern.size(); ++i)
78 for (MooseIndex(pattern[i]) j = 0; j <
pattern[i].size(); ++j)
80 std::set<SubdomainID> mesh_blks;
82 if (!
mesh.preparation().has_cached_elem_data)
83 mesh.cache_elem_data();
84 mesh.subdomain_ids(mesh_blks);
85 blks.insert(mesh_blks.begin(), mesh_blks.end());
90std::map<SubdomainID, unsigned int>
92 const bool has_assembly_boundary,
93 const std::set<subdomain_id_type> background_blk_ids,
94 const std::set<SubdomainID> & blks)
96 std::map<SubdomainID, unsigned int> blks_duct;
97 if (has_assembly_boundary)
99 std::set<SubdomainID> mesh_blks;
100 mesh.subdomain_ids(mesh_blks);
102 for (
const auto mesh_blk : mesh_blks)
103 if (!blks.count(mesh_blk) && !background_blk_ids.count(mesh_blk))
104 blks_duct[mesh_blk] = i++;
106 if (background_blk_ids.size() == 0)
107 blks_duct.erase(blks_duct.begin());
115 const unsigned int extra_id_index,
117 const bool use_exclude_id,
118 const std::vector<bool> & exclude_ids,
119 const bool has_assembly_boundary,
120 const std::set<subdomain_id_type> background_block_ids,
121 const std::vector<std::unique_ptr<ReplicatedMesh>> & input_meshes,
122 const std::vector<std::vector<unsigned int>> & pattern,
123 const std::vector<std::vector<dof_id_type>> & id_pattern)
125 std::vector<dof_id_type> integer_ids;
128 if (assign_type == AssignType::cell)
129 integer_ids = getCellwiseIntegerIDs(input_meshes, pattern, use_exclude_id, exclude_ids);
130 else if (assign_type == AssignType::pattern)
131 integer_ids = getPatternIntegerIDs(input_meshes, pattern);
132 else if (assign_type == AssignType::manual)
133 integer_ids = getManualIntegerIDs(input_meshes, pattern, id_pattern);
135 if (has_assembly_boundary)
138 const std::set<SubdomainID> blks = getCellBlockIDs(input_meshes, pattern);
139 const unsigned int duct_boundary_id =
140 *std::max_element(integer_ids.begin(), integer_ids.end()) + 1;
141 const std::map<SubdomainID, unsigned int> blks_duct =
142 getDuckBlockIDs(mesh, has_assembly_boundary, background_block_ids, blks);
146 unsigned int id = integer_ids[i];
147 unsigned old_id = id;
148 for (
auto elem :
mesh.element_ptr_range())
150 auto blk = elem->subdomain_id();
152 if (!blks.count(blk))
155 if (!blks_duct.count(blk))
157 elem->set_extra_integer(extra_id_index, old_id);
160 elem->set_extra_integer(extra_id_index, duct_boundary_id + blks_duct.at(blk));
165 elem->set_extra_integer(extra_id_index,
id);
168 if (i < integer_ids.size())
177 for (
auto & elem :
mesh.element_ptr_range())
178 elem->set_extra_integer(extra_id_index, integer_ids[i++]);
std::vector< dof_id_type > getCellwiseIntegerIDs(const std::vector< std::unique_ptr< libMesh::ReplicatedMesh > > &meshes, const std::vector< std::vector< unsigned int > > &pattern, const bool use_exclude_id, const std::vector< bool > &exclude_ids)
assign IDs for each component in pattern in sequential order
std::map< SubdomainID, unsigned int > getDuckBlockIDs(const MeshBase &mesh, const bool has_assembly_boundary, const std::set< subdomain_id_type > background_blk_ids, const std::set< SubdomainID > &blks)
get list of block IDs for the assembly duck regions
std::set< SubdomainID > getCellBlockIDs(const std::vector< std::unique_ptr< libMesh::ReplicatedMesh > > &meshes, const std::vector< std::vector< unsigned int > > &pattern)
get list of block IDs in input mesh cells
std::vector< dof_id_type > getManualIntegerIDs(const std::vector< std::unique_ptr< libMesh::ReplicatedMesh > > &meshes, const std::vector< std::vector< unsigned int > > &pattern, const std::vector< std::vector< dof_id_type > > &id_pattern)
assign IDs based on user-defined mapping defined in id_pattern
AssignType
Enum item for reporting id assign types.
@ pattern
assign the same reporting IDs for all tiles in the pattern with same input
std::vector< dof_id_type > getPatternIntegerIDs(const std::vector< std::unique_ptr< libMesh::ReplicatedMesh > > &meshes, const std::vector< std::vector< unsigned int > > &pattern)
assign IDs for each input component type
void assignReportingIDs(MeshBase &mesh, const unsigned int extra_id_index, const ReportingIDGeneratorUtils::AssignType assign_type, const bool use_exclude_id, const std::vector< bool > &exclude_ids, const bool has_assembly_boundary, const std::set< subdomain_id_type > background_block_ids, const std::vector< std::unique_ptr< libMesh::ReplicatedMesh > > &input_meshes, const std::vector< std::vector< unsigned int > > &pattern, const std::vector< std::vector< dof_id_type > > &id_pattern)
assign the reporting IDs to the output mesh from the cartesian or hexagonal patterned mesh generator
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)