22#ifdef DEAL_II_WITH_P4EST
30 template <
int dim,
int spacedim>
31 typename ::Triangulation<dim, spacedim>::cell_iterator
33 const ::parallel::distributed::Triangulation<dim, spacedim>
35 const typename ::internal::p4est::types<dim>::topidx
treeidx,
36 const typename ::internal::p4est::types<dim>::quadrant &quad)
38 int i,
l = quad.level;
42 for (i = 0; i <
l; ++i)
44 typename ::Triangulation<dim, spacedim>::cell_iterator cell(
49 Assert(cell->has_children(),
50 ExcMessage(
"p4est quadrant does not correspond to a cell!"));
54 typename ::Triangulation<dim, spacedim>::cell_iterator
out_cell(
64 template <
int dim,
int spacedim>
67 const typename ::parallel::distributed::Triangulation<dim,
71 std::map<unsigned int, std::set<::types::subdomain_id>>
81 template <
int dim,
int spacedim>
84 typename ::internal::p4est::iter<dim>::corner_info *
info,
89 auto *
sides =
reinterpret_cast<
90 typename ::internal::p4est::iter<dim>::corner_side *
>(
95 const ::parallel::distributed::Triangulation<dim, spacedim>
99 std::map<unsigned int, std::set<::types::subdomain_id>>
103 for (i = 0; i <
nsides; ++i)
105 if (
sides[i].is_ghost)
107 typename ::parallel::distributed::
108 Triangulation<dim, spacedim>::cell_iterator cell =
113 ExcMessage(
"ghost quad did not find ghost cell"));
117 *
subid = cell->subdomain_id();
130 for (i = 0; i <
nsides; ++i)
132 if (!
sides[i].is_ghost)
134 typename ::parallel::distributed::
135 Triangulation<dim, spacedim>::cell_iterator cell =
145 (*vertices_with_ghost_neighbors)[cell->vertex_index(
147 .insert(subdomain_ids[
j]);
158 template <
int dim,
int spacedim>
161 typename ::internal::p4est::iter<dim>::edge_info *
info,
166 auto *
sides =
reinterpret_cast<
167 typename ::internal::p4est::iter<dim>::edge_side *
>(
171 const ::parallel::distributed::Triangulation<dim, spacedim>
175 std::map<unsigned int, std::set<::types::subdomain_id>>
179 for (i = 0; i <
nsides; ++i)
183 for (
j = 0;
j < 2; ++
j)
185 if (
sides[i].
is.hanging.is_ghost[
j])
187 typename ::parallel::distributed::
188 Triangulation<dim, spacedim>::cell_iterator cell =
195 *
subid = cell->subdomain_id();
210 for (i = 0; i <
nsides; ++i)
214 for (
j = 0;
j < 2; ++
j)
216 if (!
sides[i].
is.hanging.is_ghost[
j])
218 typename ::parallel::distributed::
219 Triangulation<dim, spacedim>::cell_iterator cell =
226 (*vertices_with_ghost_neighbors)
229 .insert(subdomain_ids[
k]);
242 template <
int dim,
int spacedim>
245 typename ::internal::p4est::iter<dim>::face_info *
info,
250 auto *
sides =
reinterpret_cast<
251 typename ::internal::p4est::iter<dim>::face_side *
>(
256 const ::parallel::distributed::Triangulation<dim, spacedim>
260 std::map<unsigned int, std::set<::types::subdomain_id>>
262 int limit = (dim == 2) ? 2 : 4;
265 for (i = 0; i <
nsides; ++i)
271 if (
sides[i].
is.hanging.is_ghost[
j])
273 typename ::parallel::distributed::
274 Triangulation<dim, spacedim>::cell_iterator cell =
281 *
subid = cell->subdomain_id();
296 for (i = 0; i <
nsides; ++i)
302 if (!
sides[i].
is.hanging.is_ghost[
j])
304 typename ::parallel::distributed::
305 Triangulation<dim, spacedim>::cell_iterator cell =
314 (*vertices_with_ghost_neighbors)
318 .insert(subdomain_ids[
k]);
322 (*vertices_with_ghost_neighbors)
326 .insert(subdomain_ids[
k]);
538# ifdef P4EST_SEARCH_LOCAL
760# ifdef P4EST_SEARCH_LOCAL
784 for (
unsigned int c = 0;
861 connectivity->num_vertices,
862 connectivity->num_trees,
863 connectivity->num_corners,
864 connectivity->vertices,
865 connectivity->tree_to_vertex,
866 connectivity->tree_to_tree,
867 connectivity->tree_to_face,
868 connectivity->tree_to_corner,
869 connectivity->ctt_offset,
870 connectivity->corner_to_tree,
871 connectivity->corner_to_corner);
879 connectivity->num_vertices,
880 connectivity->num_trees,
881 connectivity->num_edges,
882 connectivity->num_corners,
883 connectivity->vertices,
884 connectivity->tree_to_vertex,
885 connectivity->tree_to_tree,
886 connectivity->tree_to_face,
887 connectivity->tree_to_edge,
888 connectivity->ett_offset,
889 connectivity->edge_to_tree,
890 connectivity->edge_to_edge,
891 connectivity->tree_to_corner,
892 connectivity->ctt_offset,
893 connectivity->corner_to_tree,
894 connectivity->corner_to_corner);
971#include "p4est_wrappers.inst"
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
void init_quadrant_children< 1 >(const typename types< 1 >::quadrant &q, typename types< 1 >::quadrant(&p4est_children)[::GeometryInfo< 1 >::max_children_per_cell])
void init_coarse_quadrant(typename types< dim >::quadrant &quad)
bool quadrant_is_equal< 1 >(const typename types< 1 >::quadrant &q1, const typename types< 1 >::quadrant &q2)
types< 2 >::connectivity * copy_connectivity< 2 >(const typename types< 2 >::connectivity *connectivity)
types< 3 >::connectivity * copy_connectivity< 3 >(const typename types< 3 >::connectivity *connectivity)
bool quadrant_is_equal(const typename types< dim >::quadrant &q1, const typename types< dim >::quadrant &q2)
void init_quadrant_children(const typename types< dim >::quadrant &p4est_cell, typename types< dim >::quadrant(&p4est_children)[::GeometryInfo< dim >::max_children_per_cell])
bool quadrant_is_ancestor(const typename types< dim >::quadrant &q1, const typename types< dim >::quadrant &q2)
void init_coarse_quadrant< 1 >(typename types< 1 >::quadrant &quad)
bool quadrant_is_ancestor< 1 >(types< 1 >::quadrant const &q1, types< 1 >::quadrant const &q2)
bool tree_exists_locally(const typename types< dim >::forest *parallel_forest, const typename types< dim >::topidx coarse_grid_cell)
const ::parallel::distributed::Triangulation< dim, spacedim > * triangulation
std::map< unsigned int, std::set<::types::subdomain_id > > * vertices_with_ghost_neighbors