117 const bool orientation_needed,
118 const bool has_tetrahedra)
120 Assert(children_per_object == cells.children_per_object,
123 if (n_new_cells == 0)
125 const auto total_cells =
size() + n_new_cells;
129 refine_flags.reserve(total_cells);
130 refine_flags.insert(refine_flags.end(),
131 total_cells - refine_flags.size(),
136 refine_choice.reserve(total_cells);
137 refine_choice.insert(
139 total_cells - refine_choice.size(),
140 static_cast<std::uint8_t
>(
144 coarsen_flags.reserve(total_cells);
145 coarsen_flags.insert(coarsen_flags.end(),
146 total_cells - coarsen_flags.size(),
149 active_cell_indices.reserve(total_cells);
150 active_cell_indices.insert(active_cell_indices.end(),
151 total_cells - active_cell_indices.size(),
154 subdomain_ids.reserve(total_cells);
155 subdomain_ids.insert(subdomain_ids.end(),
156 total_cells - subdomain_ids.size(),
159 level_subdomain_ids.reserve(total_cells);
160 level_subdomain_ids.insert(level_subdomain_ids.end(),
161 total_cells - level_subdomain_ids.size(),
164 global_active_cell_indices.reserve(total_cells);
165 global_active_cell_indices.insert(global_active_cell_indices.end(),
167 global_active_cell_indices.size(),
170 global_level_cell_indices.reserve(total_cells);
171 global_level_cell_indices.insert(global_level_cell_indices.end(),
173 global_level_cell_indices.size(),
176 if (dim == spacedim - 1)
178 direction_flags.reserve(total_cells);
179 direction_flags.insert(direction_flags.end(),
180 total_cells - direction_flags.size(),
184 direction_flags.clear();
186 parents.reserve((total_cells + 1) / 2);
187 parents.insert(parents.end(), (total_cells + 1) / 2 - parents.size(), -1);
189 reference_cell.reserve(total_cells);
190 cell_vertex_indices_cache.insert(cell_vertex_indices_cache.end(),
191 vertices_per_object * total_cells -
192 cell_vertex_indices_cache.size(),
195 neighbor_levels.reserve(total_cells * faces_per_object);
196 neighbor_levels.insert(neighbor_levels.end(),
197 total_cells * faces_per_object -
198 neighbor_levels.size(),
200 neighbor_indices.reserve(total_cells * faces_per_object);
201 neighbor_indices.insert(neighbor_indices.end(),
202 total_cells * faces_per_object -
203 neighbor_indices.size(),
208 face_orientations.resize(orientation_needed ? total_cells : 0);
210 reference_cell.reserve(total_cells);
211 reference_cell.insert(reference_cell.end(),
212 total_cells - reference_cell.size(),
213 ReferenceCells::get_hypercube<dim>());