deal.II version 9.8.0
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
p4est_wrappers.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2016 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_p4est_wrappers_h
14#define dealii_p4est_wrappers_h
15
16#include <deal.II/base/config.h>
17
19
20#ifdef DEAL_II_WITH_P4EST
21
23
24# include <p4est_bits.h>
25# include <p4est_communication.h>
26# include <p4est_extended.h>
27# include <p4est_ghost.h>
28# include <p4est_iterate.h>
29# include <p4est_search.h>
30# include <p4est_vtk.h>
31# include <p8est_bits.h>
32# include <p8est_communication.h>
33# include <p8est_extended.h>
34# include <p8est_ghost.h>
35# include <p8est_iterate.h>
36# include <p8est_search.h>
37# include <p8est_vtk.h>
38
39# include <limits>
40
41#endif // DEAL_II_WITH_P4EST
42
44
45#ifdef DEAL_II_WITH_P4EST
46// Forward declaration
47# ifndef DOXYGEN
48namespace parallel
49{
50 namespace distributed
51 {
52 template <int dim, int spacedim>
53 DEAL_II_CXX20_REQUIRES((concepts::is_valid_dim_spacedim<dim, spacedim>))
54 class Triangulation;
55 }
56} // namespace parallel
57# endif
58
59namespace internal
60{
61 namespace p4est
62 {
70 template <int>
71 struct types;
72
73 // these struct mimics p4est for 1d
74 template <>
75 struct types<1>
76 {
77 // id of a quadrant is an integeger
78 using quadrant = int;
79
80 // maximum number of children
81 static const int max_n_child_indices_bits = 27;
82
83 // number of bits the data type of id has
84 static const int n_bits = std::numeric_limits<quadrant>::digits;
85 };
86
87 template <>
88 struct types<2>
89 {
90 using connectivity = p4est_connectivity_t;
91 using forest = p4est_t;
92 using tree = p4est_tree_t;
93 using quadrant = p4est_quadrant_t;
94 using quadrant_coord = p4est_qcoord_t;
95 using topidx = p4est_topidx_t;
96 using locidx = p4est_locidx_t;
97 using gloidx = p4est_gloidx_t;
98 using balance_type = p4est_connect_type_t;
99 using ghost = p4est_ghost_t;
100 using transfer_context = p4est_transfer_context_t;
101 using search_partition_callback = p4est_search_partition_t;
102 };
103
104 template <>
105 struct types<3>
106 {
107 using connectivity = p8est_connectivity_t;
108 using forest = p8est_t;
109 using tree = p8est_tree_t;
110 using quadrant = p8est_quadrant_t;
111 using quadrant_coord = p4est_qcoord_t;
112 using topidx = p4est_topidx_t;
113 using locidx = p4est_locidx_t;
114 using gloidx = p4est_gloidx_t;
115 using balance_type = p8est_connect_type_t;
116 using ghost = p8est_ghost_t;
117 using transfer_context = p8est_transfer_context_t;
118 using search_partition_callback = p8est_search_partition_t;
119 };
120
121
122
136 template <int dim>
137 struct functions;
138
139 template <>
140 struct functions<2>
141 {
142 static int (&quadrant_compare)(const void *v1, const void *v2);
143
144 static void (&quadrant_childrenv)(const types<2>::quadrant *q,
146
148 const types<2>::quadrant *q);
149
150 static void (&quadrant_set_morton)(types<2>::quadrant *quadrant,
151 int level,
152 std::uint64_t id);
153
154 static void
156
158 const types<2>::quadrant *q2);
159
161 const types<2>::quadrant *q2);
162
164 const types<2>::quadrant *q2);
165
167 int level);
168
170 const types<2>::locidx which_tree,
171 const types<2>::quadrant *q,
172 const int guess);
173
175 types<2>::topidx num_vertices,
176 types<2>::topidx num_trees,
177 types<2>::topidx num_corners,
178 types<2>::topidx num_vtt);
179
181 types<2>::topidx num_vertices,
182 types<2>::topidx num_trees,
183 types<2>::topidx num_corners,
184 const double *vertices,
185 const types<2>::topidx *ttv,
186 const types<2>::topidx *ttt,
187 const int8_t *ttf,
188 const types<2>::topidx *ttc,
189 const types<2>::topidx *coff,
190 const types<2>::topidx *ctt,
191 const int8_t *ctc);
192
194 types<2>::topidx tree_left,
195 types<2>::topidx tree_right,
196 int face_left,
197 int face_right,
198 int orientation);
199
200
201
202 static void (&connectivity_destroy)(p4est_connectivity_t *connectivity);
203
205 MPI_Comm mpicomm,
206 types<2>::connectivity *connectivity,
207 types<2>::locidx min_quadrants,
208 int min_level,
209 int fill_uniform,
210 std::size_t data_size,
211 p4est_init_t init_fn,
212 void *user_pointer);
213
215 int copy_data);
216
218
220 int refine_recursive,
221 p4est_refine_t refine_fn,
222 p4est_init_t init_fn);
223
225 int coarsen_recursive,
226 p4est_coarsen_t coarsen_fn,
227 p4est_init_t init_fn);
228
231 p4est_init_t init_fn);
232
234 int partition_for_coarsening,
235 p4est_weight_t weight_fn);
236
237 static void (&save)(const char *filename,
239 int save_data);
240
241 static types<2>::forest *(&load_ext)(const char *filename,
242 MPI_Comm mpicomm,
243 std::size_t data_size,
244 int load_data,
245 int autopartition,
246 int broadcasthead,
247 void *user_pointer,
249
250 static int (&connectivity_save)(const char *filename,
251 types<2>::connectivity *connectivity);
252
254
255 static types<2>::connectivity *(&connectivity_load)(const char *filename,
256 std::size_t *length);
257
258 static unsigned int (&checksum)(types<2>::forest *p4est);
259
261 p4est_geometry_t *,
262 const char *baseName);
263
266
267 static void (&ghost_destroy)(types<2>::ghost *ghost);
268
270 std::size_t data_size,
271 p4est_init_t init_fn,
272 void *user_pointer);
273
275
276 static std::size_t (&connectivity_memory_used)(
278
279 template <int spacedim>
280 static void
283 void *user_data);
284
285 static constexpr unsigned int max_level = P4EST_MAXLEVEL;
286
287 static void (&transfer_fixed)(const types<2>::gloidx *dest_gfq,
288 const types<2>::gloidx *src_gfq,
289 MPI_Comm mpicomm,
290 int tag,
291 void *dest_data,
292 const void *src_data,
293 std::size_t data_size);
294
296 const types<2>::gloidx *dest_gfq,
297 const types<2>::gloidx *src_gfq,
298 MPI_Comm mpicomm,
299 int tag,
300 void *dest_data,
301 const void *src_data,
302 std::size_t data_size);
303
305
306 static void (&transfer_custom)(const types<2>::gloidx *dest_gfq,
307 const types<2>::gloidx *src_gfq,
308 MPI_Comm mpicomm,
309 int tag,
310 void *dest_data,
311 const int *dest_sizes,
312 const void *src_data,
313 const int *src_sizes);
314
316 const types<2>::gloidx *dest_gfq,
317 const types<2>::gloidx *src_gfq,
318 MPI_Comm mpicomm,
319 int tag,
320 void *dest_data,
321 const int *dest_sizes,
322 const void *src_data,
323 const int *src_sizes);
324
326
327 static void (&search_partition)(
328 types<2>::forest *forest,
329 int call_post,
332 sc_array_t *points);
333
335 types<2>::connectivity *connectivity,
336 types<2>::topidx treeid,
339 double vxyz[3]);
340 };
341
342
343 template <>
344 struct functions<3>
345 {
346 static int (&quadrant_compare)(const void *v1, const void *v2);
347
348 static void (&quadrant_childrenv)(const types<3>::quadrant *q,
350
352 const types<3>::quadrant *q);
353
354 static void (&quadrant_set_morton)(types<3>::quadrant *quadrant,
355 int level,
356 std::uint64_t id);
357
358 static void
360
362 const types<3>::quadrant *q2);
363
365 const types<3>::quadrant *q2);
366
368 const types<3>::quadrant *q2);
370 int level);
371
373 const types<3>::locidx which_tree,
374 const types<3>::quadrant *q,
375 const int guess);
376
378 types<3>::topidx num_vertices,
379 types<3>::topidx num_trees,
380 types<3>::topidx num_edges,
381 types<3>::topidx num_ett,
382 types<3>::topidx num_corners,
383 types<3>::topidx num_ctt);
384
386 types<3>::topidx num_vertices,
387 types<3>::topidx num_trees,
388 types<3>::topidx num_edges,
389 types<3>::topidx num_corners,
390 const double *vertices,
391 const types<3>::topidx *ttv,
392 const types<3>::topidx *ttt,
393 const int8_t *ttf,
394 const types<3>::topidx *tte,
395 const types<3>::topidx *eoff,
396 const types<3>::topidx *ett,
397 const int8_t *ete,
398 const types<3>::topidx *ttc,
399 const types<3>::topidx *coff,
400 const types<3>::topidx *ctt,
401 const int8_t *ctc);
402
404 types<3>::topidx tree_left,
405 types<3>::topidx tree_right,
406 int face_left,
407 int face_right,
408 int orientation);
409
410 static void (&connectivity_destroy)(p8est_connectivity_t *connectivity);
411
413 MPI_Comm mpicomm,
414 types<3>::connectivity *connectivity,
415 types<3>::locidx min_quadrants,
416 int min_level,
417 int fill_uniform,
418 std::size_t data_size,
419 p8est_init_t init_fn,
420 void *user_pointer);
421
423 int copy_data);
424
425 static void (&destroy)(types<3>::forest *p8est);
426
427 static void (&refine)(types<3>::forest *p8est,
428 int refine_recursive,
429 p8est_refine_t refine_fn,
430 p8est_init_t init_fn);
431
432 static void (&coarsen)(types<3>::forest *p8est,
433 int coarsen_recursive,
434 p8est_coarsen_t coarsen_fn,
435 p8est_init_t init_fn);
436
437 static void (&balance)(types<3>::forest *p8est,
439 p8est_init_t init_fn);
440
442 int partition_for_coarsening,
443 p8est_weight_t weight_fn);
444
445 static void (&save)(const char *filename,
447 int save_data);
448
449 static types<3>::forest *(&load_ext)(const char *filename,
450 MPI_Comm mpicomm,
451 std::size_t data_size,
452 int load_data,
453 int autopartition,
454 int broadcasthead,
455 void *user_pointer,
457
458 static int (&connectivity_save)(const char *filename,
459 types<3>::connectivity *connectivity);
460
462
463 static types<3>::connectivity *(&connectivity_load)(const char *filename,
464 std::size_t *length);
465
466 static unsigned int (&checksum)(types<3>::forest *p8est);
467
468 static void (&vtk_write_file)(types<3>::forest *p8est,
469 p8est_geometry_t *,
470 const char *baseName);
473
474 static void (&ghost_destroy)(types<3>::ghost *ghost);
475
477 std::size_t data_size,
478 p8est_init_t init_fn,
479 void *user_pointer);
480
482
483 static std::size_t (&connectivity_memory_used)(
485
486 static constexpr unsigned int max_level = P8EST_MAXLEVEL;
487
488 static void (&transfer_fixed)(const types<3>::gloidx *dest_gfq,
489 const types<3>::gloidx *src_gfq,
490 MPI_Comm mpicomm,
491 int tag,
492 void *dest_data,
493 const void *src_data,
494 std::size_t data_size);
495
497 const types<3>::gloidx *dest_gfq,
498 const types<3>::gloidx *src_gfq,
499 MPI_Comm mpicomm,
500 int tag,
501 void *dest_data,
502 const void *src_data,
503 std::size_t data_size);
504
506
507 static void (&transfer_custom)(const types<3>::gloidx *dest_gfq,
508 const types<3>::gloidx *src_gfq,
509 MPI_Comm mpicomm,
510 int tag,
511 void *dest_data,
512 const int *dest_sizes,
513 const void *src_data,
514 const int *src_sizes);
515
517 const types<3>::gloidx *dest_gfq,
518 const types<3>::gloidx *src_gfq,
519 MPI_Comm mpicomm,
520 int tag,
521 void *dest_data,
522 const int *dest_sizes,
523 const void *src_data,
524 const int *src_sizes);
525
527
528 static void (&search_partition)(
529 types<3>::forest *forest,
530 int call_post,
533 sc_array_t *points);
534
536 types<3>::connectivity *connectivity,
537 types<3>::topidx treeid,
541 double vxyz[3]);
542 };
543
544
545
552 template <int dim>
553 struct iter;
554
555 template <>
556 struct iter<2>
557 {
558 using corner_info = p4est_iter_corner_info_t;
559 using corner_side = p4est_iter_corner_side_t;
560 using corner_iter = p4est_iter_corner_t;
561 using face_info = p4est_iter_face_info_t;
562 using face_side = p4est_iter_face_side_t;
563 using face_iter = p4est_iter_face_t;
564 };
565
566 template <>
567 struct iter<3>
568 {
569 using corner_info = p8est_iter_corner_info_t;
570 using corner_side = p8est_iter_corner_side_t;
571 using corner_iter = p8est_iter_corner_t;
572 using edge_info = p8est_iter_edge_info_t;
573 using edge_side = p8est_iter_edge_side_t;
574 using edge_iter = p8est_iter_edge_t;
575 using face_info = p8est_iter_face_info_t;
576 using face_side = p8est_iter_face_side_t;
577 using face_iter = p8est_iter_face_t;
578 };
579
580
581
586 template <int dim>
587 void
589 const typename types<dim>::quadrant &p4est_cell,
590 typename types<dim>::quadrant (
592
593
594
598 template <int dim>
599 void
601
602
603
607 template <int dim>
608 bool
609 quadrant_is_equal(const typename types<dim>::quadrant &q1,
610 const typename types<dim>::quadrant &q2);
611
612
613
617 template <int dim>
618 bool
620 const typename types<dim>::quadrant &q2);
621
622
623
627 template <int dim>
628 bool
629 tree_exists_locally(const typename types<dim>::forest *parallel_forest,
630 const typename types<dim>::topidx coarse_grid_cell);
631
632
636 template <int dim>
637 typename types<dim>::connectivity *
638 copy_connectivity(const typename types<dim>::connectivity *connectivity);
639
640# ifndef DOXYGEN
641 template <>
642 typename types<2>::connectivity *
643 copy_connectivity<2>(const typename types<2>::connectivity *connectivity);
644
645 template <>
646 typename types<3>::connectivity *
647 copy_connectivity<3>(const typename types<3>::connectivity *connectivity);
648# endif
649 } // namespace p4est
650} // namespace internal
651
652#endif // DEAL_II_WITH_P4EST
653
655
656#endif // dealii_p4est_wrappers_h
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_CXX20_REQUIRES(condition)
Definition config.h:246
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
void init_coarse_quadrant(typename types< dim >::quadrant &quad)
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)
bool tree_exists_locally(const typename types< dim >::forest *parallel_forest, const typename types< dim >::topidx coarse_grid_cell)
types< dim >::connectivity * copy_connectivity(const typename types< dim >::connectivity *connectivity)
Definition types.h:30
static constexpr unsigned int max_children_per_cell
static types< 2 >::connectivity *(& connectivity_load)(const char *filename, std::size_t *length)
static void(& quadrant_set_morton)(types< 2 >::quadrant *quadrant, int level, std::uint64_t id)
static void(& connectivity_destroy)(p4est_connectivity_t *connectivity)
static types< 2 >::connectivity *(& connectivity_new)(types< 2 >::topidx num_vertices, types< 2 >::topidx num_trees, types< 2 >::topidx num_corners, types< 2 >::topidx num_vtt)
static void(& quadrant_coord_to_vertex)(types< 2 >::connectivity *connectivity, types< 2 >::topidx treeid, types< 2 >::quadrant_coord x, types< 2 >::quadrant_coord y, double vxyz[3])
static void(& vtk_write_file)(types< 2 >::forest *p4est, p4est_geometry_t *, const char *baseName)
static int(& connectivity_save)(const char *filename, types< 2 >::connectivity *connectivity)
static void(& transfer_custom)(const types< 2 >::gloidx *dest_gfq, const types< 2 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const int *dest_sizes, const void *src_data, const int *src_sizes)
static void(& search_partition)(types< 2 >::forest *forest, int call_post, types< 2 >::search_partition_callback quadrant_fn, types< 2 >::search_partition_callback point_fn, sc_array_t *points)
static void(& ghost_destroy)(types< 2 >::ghost *ghost)
static int(& quadrant_is_sibling)(const types< 2 >::quadrant *q1, const types< 2 >::quadrant *q2)
static std::size_t(& forest_memory_used)(types< 2 >::forest *p4est)
static void(& refine)(types< 2 >::forest *p4est, int refine_recursive, p4est_refine_t refine_fn, p4est_init_t init_fn)
static constexpr unsigned int max_level
static int(& quadrant_compare)(const void *v1, const void *v2)
static void(& connectivity_join_faces)(types< 2 >::connectivity *conn, types< 2 >::topidx tree_left, types< 2 >::topidx tree_right, int face_left, int face_right, int orientation)
static void(& quadrant_childrenv)(const types< 2 >::quadrant *q, types< 2 >::quadrant c[])
static std::size_t(& connectivity_memory_used)(types< 2 >::connectivity *p4est)
static void quadrant_init(types< 2 >::quadrant &q)
static int(& quadrant_ancestor_id)(const types< 2 >::quadrant *q, int level)
static void(& save)(const char *filename, types< 2 >::forest *p4est, int save_data)
static types< 2 >::connectivity *(& connectivity_new_copy)(types< 2 >::topidx num_vertices, types< 2 >::topidx num_trees, types< 2 >::topidx num_corners, const double *vertices, const types< 2 >::topidx *ttv, const types< 2 >::topidx *ttt, const int8_t *ttf, const types< 2 >::topidx *ttc, const types< 2 >::topidx *coff, const types< 2 >::topidx *ctt, const int8_t *ctc)
static int(& comm_find_owner)(types< 2 >::forest *p4est, const types< 2 >::locidx which_tree, const types< 2 >::quadrant *q, const int guess)
static unsigned int(& checksum)(types< 2 >::forest *p4est)
static types< 2 >::forest *(& new_forest)(MPI_Comm mpicomm, types< 2 >::connectivity *connectivity, types< 2 >::locidx min_quadrants, int min_level, int fill_uniform, std::size_t data_size, p4est_init_t init_fn, void *user_pointer)
static void(& destroy)(types< 2 >::forest *p4est)
static types< 2 >::transfer_context *(& transfer_custom_begin)(const types< 2 >::gloidx *dest_gfq, const types< 2 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const int *dest_sizes, const void *src_data, const int *src_sizes)
static void(& reset_data)(types< 2 >::forest *p4est, std::size_t data_size, p4est_init_t init_fn, void *user_pointer)
static void(& coarsen)(types< 2 >::forest *p4est, int coarsen_recursive, p4est_coarsen_t coarsen_fn, p4est_init_t init_fn)
static void iterate(::internal::p4est::types< 2 >::forest *parallel_forest, ::internal::p4est::types< 2 >::ghost *parallel_ghost, void *user_data)
static int(& quadrant_is_ancestor)(const types< 2 >::quadrant *q1, const types< 2 >::quadrant *q2)
static void(& transfer_fixed_end)(types< 2 >::transfer_context *tc)
static int(& quadrant_overlaps_tree)(types< 2 >::tree *tree, const types< 2 >::quadrant *q)
static types< 2 >::gloidx(& partition)(types< 2 >::forest *p4est, int partition_for_coarsening, p4est_weight_t weight_fn)
static int(& quadrant_is_equal)(const types< 2 >::quadrant *q1, const types< 2 >::quadrant *q2)
static types< 2 >::ghost *(& ghost_new)(types< 2 >::forest *p4est, types< 2 >::balance_type btype)
static void(& balance)(types< 2 >::forest *p4est, types< 2 >::balance_type btype, p4est_init_t init_fn)
static void(& transfer_fixed)(const types< 2 >::gloidx *dest_gfq, const types< 2 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const void *src_data, std::size_t data_size)
static types< 2 >::forest *(& copy_forest)(types< 2 >::forest *input, int copy_data)
static types< 2 >::forest *(& load_ext)(const char *filename, MPI_Comm mpicomm, std::size_t data_size, int load_data, int autopartition, int broadcasthead, void *user_pointer, types< 2 >::connectivity **p4est)
static void(& transfer_custom_end)(types< 2 >::transfer_context *tc)
static types< 2 >::transfer_context *(& transfer_fixed_begin)(const types< 2 >::gloidx *dest_gfq, const types< 2 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const void *src_data, std::size_t data_size)
static int(& connectivity_is_valid)(types< 2 >::connectivity *connectivity)
static int(& quadrant_ancestor_id)(const types< 3 >::quadrant *q, int level)
static void(& transfer_fixed_end)(types< 3 >::transfer_context *tc)
static int(& quadrant_is_sibling)(const types< 3 >::quadrant *q1, const types< 3 >::quadrant *q2)
static void(& reset_data)(types< 3 >::forest *p4est, std::size_t data_size, p8est_init_t init_fn, void *user_pointer)
static void(& search_partition)(types< 3 >::forest *forest, int call_post, types< 3 >::search_partition_callback quadrant_fn, types< 3 >::search_partition_callback point_fn, sc_array_t *points)
static types< 3 >::transfer_context *(& transfer_custom_begin)(const types< 3 >::gloidx *dest_gfq, const types< 3 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const int *dest_sizes, const void *src_data, const int *src_sizes)
static int(& connectivity_save)(const char *filename, types< 3 >::connectivity *connectivity)
static types< 3 >::forest *(& copy_forest)(types< 3 >::forest *input, int copy_data)
static void(& transfer_fixed)(const types< 3 >::gloidx *dest_gfq, const types< 3 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const void *src_data, std::size_t data_size)
static void(& quadrant_set_morton)(types< 3 >::quadrant *quadrant, int level, std::uint64_t id)
static int(& quadrant_is_equal)(const types< 3 >::quadrant *q1, const types< 3 >::quadrant *q2)
static void(& coarsen)(types< 3 >::forest *p8est, int coarsen_recursive, p8est_coarsen_t coarsen_fn, p8est_init_t init_fn)
static types< 3 >::connectivity *(& connectivity_new_copy)(types< 3 >::topidx num_vertices, types< 3 >::topidx num_trees, types< 3 >::topidx num_edges, types< 3 >::topidx num_corners, const double *vertices, const types< 3 >::topidx *ttv, const types< 3 >::topidx *ttt, const int8_t *ttf, const types< 3 >::topidx *tte, const types< 3 >::topidx *eoff, const types< 3 >::topidx *ett, const int8_t *ete, const types< 3 >::topidx *ttc, const types< 3 >::topidx *coff, const types< 3 >::topidx *ctt, const int8_t *ctc)
static types< 3 >::forest *(& new_forest)(MPI_Comm mpicomm, types< 3 >::connectivity *connectivity, types< 3 >::locidx min_quadrants, int min_level, int fill_uniform, std::size_t data_size, p8est_init_t init_fn, void *user_pointer)
static int(& comm_find_owner)(types< 3 >::forest *p4est, const types< 3 >::locidx which_tree, const types< 3 >::quadrant *q, const int guess)
static void(& refine)(types< 3 >::forest *p8est, int refine_recursive, p8est_refine_t refine_fn, p8est_init_t init_fn)
static std::size_t(& connectivity_memory_used)(types< 3 >::connectivity *p4est)
static int(& quadrant_is_ancestor)(const types< 3 >::quadrant *q1, const types< 3 >::quadrant *q2)
static void(& quadrant_coord_to_vertex)(types< 3 >::connectivity *connectivity, types< 3 >::topidx treeid, types< 3 >::quadrant_coord x, types< 3 >::quadrant_coord y, types< 3 >::quadrant_coord z, double vxyz[3])
static std::size_t(& forest_memory_used)(types< 3 >::forest *p4est)
static int(& quadrant_overlaps_tree)(types< 3 >::tree *tree, const types< 3 >::quadrant *q)
static constexpr unsigned int max_level
static void(& connectivity_join_faces)(types< 3 >::connectivity *conn, types< 3 >::topidx tree_left, types< 3 >::topidx tree_right, int face_left, int face_right, int orientation)
static int(& quadrant_compare)(const void *v1, const void *v2)
static void(& destroy)(types< 3 >::forest *p8est)
static types< 3 >::forest *(& load_ext)(const char *filename, MPI_Comm mpicomm, std::size_t data_size, int load_data, int autopartition, int broadcasthead, void *user_pointer, types< 3 >::connectivity **p4est)
static void(& transfer_custom_end)(types< 3 >::transfer_context *tc)
static void(& ghost_destroy)(types< 3 >::ghost *ghost)
static types< 3 >::connectivity *(& connectivity_load)(const char *filename, std::size_t *length)
static types< 3 >::gloidx(& partition)(types< 3 >::forest *p8est, int partition_for_coarsening, p8est_weight_t weight_fn)
static types< 3 >::ghost *(& ghost_new)(types< 3 >::forest *p4est, types< 3 >::balance_type btype)
static void(& vtk_write_file)(types< 3 >::forest *p8est, p8est_geometry_t *, const char *baseName)
static void(& transfer_custom)(const types< 3 >::gloidx *dest_gfq, const types< 3 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const int *dest_sizes, const void *src_data, const int *src_sizes)
static unsigned int(& checksum)(types< 3 >::forest *p8est)
static void(& balance)(types< 3 >::forest *p8est, types< 3 >::balance_type btype, p8est_init_t init_fn)
static void quadrant_init(types< 3 >::quadrant &q)
static types< 3 >::transfer_context *(& transfer_fixed_begin)(const types< 3 >::gloidx *dest_gfq, const types< 3 >::gloidx *src_gfq, MPI_Comm mpicomm, int tag, void *dest_data, const void *src_data, std::size_t data_size)
static void(& save)(const char *filename, types< 3 >::forest *p4est, int save_data)
static void(& connectivity_destroy)(p8est_connectivity_t *connectivity)
static void(& quadrant_childrenv)(const types< 3 >::quadrant *q, types< 3 >::quadrant c[])
static types< 3 >::connectivity *(& connectivity_new)(types< 3 >::topidx num_vertices, types< 3 >::topidx num_trees, types< 3 >::topidx num_edges, types< 3 >::topidx num_ett, types< 3 >::topidx num_corners, types< 3 >::topidx num_ctt)
static int(& connectivity_is_valid)(types< 3 >::connectivity *connectivity)
p4est_iter_corner_t corner_iter
p4est_iter_corner_info_t corner_info
p4est_iter_face_info_t face_info
p4est_iter_face_side_t face_side
p4est_iter_corner_side_t corner_side
p4est_iter_face_t face_iter
p8est_iter_corner_t corner_iter
p8est_iter_corner_info_t corner_info
p8est_iter_face_info_t face_info
p8est_iter_edge_side_t edge_side
p8est_iter_edge_t edge_iter
p8est_iter_edge_info_t edge_info
p8est_iter_face_side_t face_side
p8est_iter_face_t face_iter
p8est_iter_corner_side_t corner_side
static const int max_n_child_indices_bits
p4est_search_partition_t search_partition_callback
p4est_connectivity_t connectivity
p4est_connect_type_t balance_type
p4est_transfer_context_t transfer_context
p8est_connectivity_t connectivity
p8est_transfer_context_t transfer_context
p8est_search_partition_t search_partition_callback
p8est_connect_type_t balance_type