26 template <
int dim,
int spacedim>
37 template <
int dim,
int spacedim>
42 if (tria_signal.connected())
43 tria_signal.disconnect();
48 template <
int dim,
int spacedim>
52 update_flags |= flags;
57 template <
int dim,
int spacedim>
59 std::set<typename Triangulation<dim, spacedim>::active_cell_iterator>> &
65 update_flags = update_flags & ~update_vertex_to_cell_map;
67 return vertex_to_cells;
72 template <
int dim,
int spacedim>
73 const std::vector<std::vector<Tensor<1, spacedim>>> &
79 *
tria, get_vertex_to_cell_map());
80 update_flags = update_flags & ~update_vertex_to_cell_centers_directions;
82 return vertex_to_cell_centers;
87 template <
int dim,
int spacedim>
88 const std::map<unsigned int, Point<spacedim>> &
94 update_flags = update_flags & ~update_used_vertices;
101 template <
int dim,
int spacedim>
107 const auto &used_vertices = get_used_vertices();
108 std::vector<std::pair<Point<spacedim>,
unsigned int>>
vertices(
109 used_vertices.size());
111 for (
const auto &
it : used_vertices)
114 update_flags = update_flags & ~update_used_vertices_rtree;
116 return used_vertices_rtree;
121 template <
int dim,
int spacedim>
123 std::pair<BoundingBox<spacedim>,
129 std::vector<std::pair<
134 for (
const auto &cell :
tria->active_cell_iterators())
135 boxes.emplace_back(
mapping->get_bounding_box(cell), cell);
137 cell_bounding_boxes_rtree =
pack_rtree(boxes);
138 update_flags = update_flags & ~update_cell_bounding_boxes_rtree;
140 return cell_bounding_boxes_rtree;
145 template <
int dim,
int spacedim>
147 std::pair<BoundingBox<spacedim>,
153 std::vector<std::pair<
160 boxes.reserve(parallel_tria->n_locally_owned_active_cells());
163 for (
const auto &cell :
tria->active_cell_iterators() |
165 boxes.emplace_back(
mapping->get_bounding_box(cell), cell);
167 locally_owned_cell_bounding_boxes_rtree =
pack_rtree(boxes);
169 update_flags & ~update_locally_owned_cell_bounding_boxes_rtree;
171 return locally_owned_cell_bounding_boxes_rtree;
176 template <
int dim,
int spacedim>
181 covering_rtree.find(
level) == covering_rtree.end())
187 if (
const auto tria_mpi =
192 boxes, tria_mpi->get_communicator());
196 covering_rtree[
level] =
199 update_flags = update_flags & ~update_covering_rtree;
202 return covering_rtree[
level];
205 template <
int dim,
int spacedim>
206 const std::vector<std::set<unsigned int>> &
211 vertex_to_neighbor_subdomain.clear();
215 if (cell->is_ghost())
216 for (
const unsigned int v : cell->vertex_indices())
217 vertex_to_neighbor_subdomain[cell->vertex_index(v)].insert(
218 cell->subdomain_id());
220 update_flags = update_flags & ~update_vertex_to_neighbor_subdomain;
222 return vertex_to_neighbor_subdomain;
225 template <
int dim,
int spacedim>
226 const std::map<unsigned int, std::set<types::subdomain_id>> &
234 update_flags = update_flags & ~update_vertex_with_ghost_neighbors;
240#include "grid_tools_cache.inst"
Abstract base class for mapping classes.
unsigned int n_active_cells() const
unsigned int n_vertices() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
IteratorRange< active_cell_iterator > active_cell_iterators() const
std::map< unsigned int, std::set<::types::subdomain_id > > * vertices_with_ghost_neighbors
std::vector< BoundingBox< boost::geometry::dimension< typename Rtree::indexable_type >::value > > extract_rtree_level(const Rtree &tree, const unsigned int level)
boost::geometry::index::rtree< LeafType, IndexType, IndexableGetter > RTree
RTree< typename LeafTypeIterator::value_type, IndexType, IndexableGetter > pack_rtree(const LeafTypeIterator &begin, const LeafTypeIterator &end)