14 std::vector<dof_id_type>
16 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
17 const std::vector<std::vector<unsigned int>> & pattern,
18 const bool use_exclude_id,
19 const std::vector<bool> & exclude_ids)
25 std::vector<dof_id_type> integer_ids;
26 integer_ids.reserve(n);
33 integer_ids.insert(integer_ids.end(), meshes[
pattern[i][
j]]->n_elem(),
value);
38 std::vector<dof_id_type>
40 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
41 const std::vector<std::vector<unsigned int>> & pattern)
47 std::vector<dof_id_type> integer_ids;
48 integer_ids.reserve(n);
51 integer_ids.insert(integer_ids.end(), meshes[
pattern[i][
j]]->n_elem(),
pattern[i][
j]);
55 std::vector<dof_id_type>
57 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
58 const std::vector<std::vector<unsigned int>> & pattern,
59 const std::vector<std::vector<dof_id_type>> & id_pattern)
65 std::vector<dof_id_type> integer_ids;
66 integer_ids.reserve(n);
69 integer_ids.insert(integer_ids.end(), meshes[
pattern[i][
j]]->n_elem(), id_pattern[i][
j]);
75 const std::vector<std::unique_ptr<ReplicatedMesh>> & meshes,
76 const std::vector<std::vector<unsigned int>> & pattern)
78 std::set<SubdomainID> blks;
82 std::set<SubdomainID> mesh_blks;
83 meshes[
pattern[i][
j]]->subdomain_ids(mesh_blks);
84 blks.insert(mesh_blks.begin(), mesh_blks.end());
89 std::map<SubdomainID, unsigned int>
91 const bool has_assembly_boundary,
92 const std::set<subdomain_id_type> background_blk_ids,
93 const std::set<SubdomainID> & blks)
95 std::map<SubdomainID, unsigned int> blks_duct;
96 if (has_assembly_boundary)
98 std::set<SubdomainID> mesh_blks;
101 for (
const auto mesh_blk : mesh_blks)
102 if (!blks.count(mesh_blk) && !background_blk_ids.count(mesh_blk))
103 blks_duct[mesh_blk] = i++;
105 if (background_blk_ids.size() == 0)
106 blks_duct.erase(blks_duct.begin());
114 const unsigned int extra_id_index,
116 const bool use_exclude_id,
117 const std::vector<bool> & exclude_ids,
118 const bool has_assembly_boundary,
119 const std::set<subdomain_id_type> background_block_ids,
120 const std::vector<std::unique_ptr<ReplicatedMesh>> & input_meshes,
121 const std::vector<std::vector<unsigned int>> & pattern,
122 const std::vector<std::vector<dof_id_type>> & id_pattern)
124 std::vector<dof_id_type> integer_ids;
127 if (assign_type == AssignType::cell)
129 else if (assign_type == AssignType::pattern)
131 else if (assign_type == AssignType::manual)
134 if (has_assembly_boundary)
137 const std::set<SubdomainID> blks =
getCellBlockIDs(input_meshes, pattern);
138 const unsigned int duct_boundary_id =
139 *std::max_element(integer_ids.begin(), integer_ids.end()) + 1;
140 const std::map<SubdomainID, unsigned int> blks_duct =
141 getDuckBlockIDs(mesh, has_assembly_boundary, background_block_ids, blks);
145 unsigned int id = integer_ids[i];
146 unsigned old_id = id;
147 for (
auto elem :
mesh.element_ptr_range())
149 auto blk = elem->subdomain_id();
151 if (!blks.count(blk))
154 if (!blks_duct.count(blk))
156 elem->set_extra_integer(extra_id_index, old_id);
159 elem->set_extra_integer(extra_id_index, duct_boundary_id + blks_duct.at(blk));
164 elem->set_extra_integer(extra_id_index,
id);
167 if (i < integer_ids.size())
176 for (
auto & elem :
mesh.element_ptr_range())
177 elem->set_extra_integer(extra_id_index, integer_ids[i++]);
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
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 ...
AssignType
Enum item for reporting id assign types.
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::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
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
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
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
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
void subdomain_ids(std::set< subdomain_id_type > &ids, const bool global=true) const
static const dof_id_type invalid_id
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
assign the same reporting IDs for all tiles in the pattern with same input