p4est  2.8.7
p4est is a software library for parallel adaptive mesh refinement.
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
p8est_connectivity.h
Go to the documentation of this file.
1 /*
2  This file is part of p4est.
3  p4est is a C library to manage a collection (a forest) of multiple
4  connected adaptive quadtrees or octrees in parallel.
5 
6  Copyright (C) 2010 The University of Texas System
7  Additional copyright (C) 2011 individual authors
8  Written by Carsten Burstedde, Lucas C. Wilcox, and Tobin Isaac
9 
10  p4est is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 2 of the License, or
13  (at your option) any later version.
14 
15  p4est is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with p4est; if not, write to the Free Software Foundation, Inc.,
22  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 */
24 
61 #ifndef P8EST_CONNECTIVITY_H
62 #define P8EST_CONNECTIVITY_H
63 
64 #include <sc_io.h>
65 #include <p4est_base.h>
66 
67 SC_EXTERN_C_BEGIN;
68 
70 #define P8EST_DIM 3
75 #define P8EST_FACES (2 * P8EST_DIM)
79 #define P8EST_CHILDREN 8
81 #define P8EST_HALF (P8EST_CHILDREN / 2)
83 #define P8EST_EDGES 12
85 #define P8EST_INSUL 27
86 
88 #define P8EST_ONLY_P8_LAND(x) && (x)
89 
91 #define P8EST_ONLY_P8_COMMA(x) , (x)
92 
94 #define P8EST_DIM_POW(a) ((a) * (a) * (a))
95 
97 #define P8EST_FTRANSFORM 9
98 
100 #define P8EST_STRING "p8est"
101 
107 #define P8EST_ONDISK_FORMAT 0x3000009
108 
119 typedef enum
120 {
121  /* make sure to have different values 2D and 3D */
128 }
130 
131 #ifdef P4EST_BACKWARD_DEALII
132 typedef p8est_connect_type_t p8est_balance_type_t;
133 #endif
134 
136 typedef enum
137 {
138  P8EST_CONN_ENCODE_NONE = SC_IO_ENCODE_NONE,
140 }
142 
148 
154 
215 typedef struct p8est_connectivity
216 {
226  double *vertices;
233  char *tree_to_attr;
237  int8_t *tree_to_face;
244  int8_t *edge_to_edge;
253 }
255 
258 {
261 #ifdef P4EST_ENABLE_MPIWINSHARED
262  MPI_Win win_vertices;
263  MPI_Win win_tree_to_vertex;
264  MPI_Win win_tree_to_attr;
265  MPI_Win win_tree_to_tree;
266  MPI_Win win_tree_to_face;
267  MPI_Win win_tree_to_edge;
268  MPI_Win win_ett_offset;
269  MPI_Win win_edge_to_tree;
270  MPI_Win win_edge_to_edge;
271  MPI_Win win_tree_to_corner;
272  MPI_Win win_ctt_offset;
273  MPI_Win win_corner_to_tree;
274  MPI_Win win_corner_to_corner;
275 #endif
276 }
278 
284  conn);
285 
287 typedef struct
288 {
290  int8_t nedge;
291  int8_t naxis[3];
292  int8_t nflip;
293  int8_t corners;
294 }
296 
298 typedef struct
299 {
300  int8_t iedge;
301  sc_array_t edge_transforms;
303 }
305 
307 typedef struct
308 {
310  int8_t ncorner;
311 }
313 
315 typedef struct
316 {
318  sc_array_t corner_transforms;
320 }
322 
324 typedef struct
325 {
328  int8_t index_self;
330  int8_t index_neighbor;
332  int8_t perm[P8EST_DIM];
335  int8_t sign[P8EST_DIM];
337  p4est_qcoord_t origin_self[P8EST_DIM];
339  p4est_qcoord_t origin_neighbor[P8EST_DIM];
342 }
344 
345 /* *INDENT-OFF* */
346 
354  (const p8est_neighbor_transform_t * nt,
355  const p4est_qcoord_t self_coords[P8EST_DIM],
356  p4est_qcoord_t neigh_coords[P8EST_DIM]);
357 
365  (const p8est_neighbor_transform_t * nt,
366  const p4est_qcoord_t neigh_coords[P8EST_DIM],
367  p4est_qcoord_t self_coords[P8EST_DIM]);
368 
379  (p8est_connectivity_t *conn,
380  p4est_topidx_t tree_id,
381  p8est_connect_type_t boundary_type,
382  int boundary_index,
383  sc_array_t *neighbor_transform_array);
384 
385 /* *INDENT-ON* */
386 
407  (p8est_connectivity_t *conn,
408  p4est_topidx_t treeid, const p4est_qcoord_t coords[],
409  p4est_topidx_t *treeid_out, p4est_qcoord_t coords_out[]);
410 
412 extern const int p8est_volume_point;
413 
415 extern const int p8est_face_corners[6][4];
416 
418 extern const int p8est_face_edges[6][4];
419 
421 extern const int p8est_face_points[6];
422 
424 extern const int p8est_face_dual[6];
425 
426 /* face corners */
427 
429 extern const int p8est_face_permutations[8][4];
430 
432 extern const int p8est_face_permutation_sets[3][4];
433 
436 extern const int p8est_face_permutation_refs[6][6];
437 
438 /* face edges */
439 
441 extern const int p8est_face_edge_permutations[8][4];
442 
444 extern const int p8est_face_edge_permutation_sets[3][4];
445 
447 extern const int p8est_edge_faces[12][2];
448 
450 extern const int p8est_edge_corners[12][2];
451 
453 extern const int p8est_edge_points[12];
454 
457 extern const int p8est_edge_edge_corners[12][8];
458 
461 extern const int p8est_edge_face_corners[12][6][2];
462 
465 extern const int p8est_edge_face_edges[12][6];
466 
468 extern const int p8est_corner_faces[8][3];
469 
471 extern const int p8est_corner_edges[8][3];
472 
474 extern const int p8est_corner_points[8];
475 
478 extern const int p8est_corner_face_corners[8][6];
479 
482 extern const int p8est_corner_edge_corners[8][12];
483 
485 extern const int p8est_child_edge_faces[8][12];
486 
488 extern const int p8est_child_corner_faces[8][8];
489 
491 extern const int p8est_child_corner_edges[8][8];
492 
505  (int c, int f, int nf, int set);
506 
516  (int fc, int f, int nf, int o);
517 
527  (int c, int f, int nf, int o);
528 
538  (int fe, int f, int nf, int o);
539 
549  (int e, int f, int nf, int o);
550 
557  (int ec, int o);
558 
568  (int c, int e, int ne, int o);
569 
581  p4est_topidx_t num_trees,
582  p4est_topidx_t num_edges,
583  p4est_topidx_t num_ett,
584  p4est_topidx_t num_corners,
585  p4est_topidx_t num_ctt);
586 
612  num_vertices,
613  p4est_topidx_t num_trees,
614  p4est_topidx_t num_edges,
615  p4est_topidx_t num_corners,
616  const double *vertices,
617  const p4est_topidx_t * ttv,
618  const p4est_topidx_t * ttt,
619  const int8_t * ttf,
620  const p4est_topidx_t * tte,
621  const p4est_topidx_t *
622  eoff,
623  const p4est_topidx_t * ett,
624  const int8_t * ete,
625  const p4est_topidx_t * ttc,
626  const p4est_topidx_t *
627  coff,
628  const p4est_topidx_t * ctt,
629  const int8_t * ctc);
630 
639  int copy_attr);
640 
659  conn_in, int root,
660  sc_MPI_Comm comm);
661 
665  connectivity);
666 
690  (p8est_connectivity_t * conn_in, int root, sc_MPI_Comm comm);
691 
712  int split_type, sc_MPI_Comm world_comm);
713 
721  (p8est_connectivity_shared_t *cshare);
722 
730  size_t bytes_per_tree);
731 
736  connectivity);
737 
743  conn2);
744 
751  sc_io_sink_t * sink);
752 
760  code);
761 
767 int p8est_connectivity_save (const char *filename,
769  connectivity);
770 
776 
784 
791  size_t *bytes);
792 
796 
800 
806 
812 
816 
824  int r_face,
825  int orientation);
826 
831 
836 
842 
847  int periodic_a,
848  int periodic_b,
849  int periodic_c);
850 
857 
864 
880 
895 
907  int num_per_dim);
908 
927 void p8est_expand_face_transform (int iface, int nface,
928  int ftransform[]);
929 
942  connectivity,
943  p4est_topidx_t itree,
944  int iface, int ftransform[]);
945 
953  connectivity,
954  p4est_topidx_t itree,
955  int iedge,
956  p8est_edge_info_t * ei);
957 
965  connectivity,
966  p4est_topidx_t itree,
967  int icorner,
968  p8est_corner_info_t * ci);
969 
980 
987 
1003  sc_array_t * perm,
1004  int is_current_to_new);
1005 
1006 #ifdef P4EST_WITH_METIS
1007 
1030 void p8est_connectivity_reorder (sc_MPI_Comm comm, int k,
1031  p8est_connectivity_t * conn,
1032  p8est_connect_type_t ctype);
1033 
1054 sc_array_t *p8est_connectivity_reorder_newid (sc_MPI_Comm comm, int k,
1056  conn,
1058  ctype,
1059  sc_array_t * newid);
1060 
1061 #endif /* P4EST_WITH_METIS */
1062 
1079  conn,
1080  p4est_topidx_t tree_left,
1081  p4est_topidx_t tree_right,
1082  int face_left,
1083  int face_right,
1084  int orientation);
1085 
1097  conn1,
1099  conn2);
1100 
1102 /*@unused@*/
1103 static inline p8est_edge_transform_t *
1104 p8est_edge_array_index (sc_array_t *array, size_t it)
1105 {
1106  P4EST_ASSERT (array->elem_size == sizeof (p8est_edge_transform_t));
1107  P4EST_ASSERT (it < array->elem_count);
1108 
1109  return (p8est_edge_transform_t *) (array->array +
1110  sizeof (p8est_edge_transform_t) * it);
1111 }
1112 
1114 /*@unused@*/
1115 static inline p8est_corner_transform_t *
1116 p8est_corner_array_index (sc_array_t *array, size_t it)
1117 {
1118  P4EST_ASSERT (array->elem_size == sizeof (p8est_corner_transform_t));
1119  P4EST_ASSERT (it < array->elem_count);
1120 
1121  return
1122  (p8est_corner_transform_t *) (array->array +
1123  sizeof (p8est_corner_transform_t) * it);
1124 }
1125 
1226  p4est_topidx_t *
1227  num_vertices,
1228  p4est_topidx_t *
1229  num_trees,
1230  double *vertices,
1231  p4est_topidx_t *
1232  tree_to_vertex);
1233 
1324 
1325 SC_EXTERN_C_END;
1326 
1327 #endif /* !P8EST_CONNECTIVITY_H */
General support types and functions.
int32_t p4est_qcoord_t
Typedef for quadrant coordinates.
Definition: p4est_base.h:81
int32_t p4est_topidx_t
Typedef for counting topological entities (trees, tree vertices).
Definition: p4est_base.h:93
const int p8est_face_edge_permutation_sets[3][4]
Store the 3 occurring sets of 4 permutations per face.
void p8est_connectivity_permute(p8est_connectivity_t *conn, sc_array_t *perm, int is_current_to_new)
p8est_connectivity_permute Given a permutation perm of the trees in a connectivity conn,...
const char * p8est_connect_type_string(p8est_connect_type_t btype)
Convert the p8est_connect_type_t into a const string.
const int p8est_edge_face_edges[12][6]
Store the face edge numbers 0..3 for the faces touching a tree edge.
void p8est_connectivity_set_attr(p8est_connectivity_t *conn, size_t bytes_per_tree)
Allocate or free the attribute fields in a connectivity.
p8est_connectivity_t * p8est_connectivity_new_periodic(void)
Create a connectivity structure for an all-periodic unit cube.
const int p8est_face_corners[6][4]
Store the corner numbers 0..7 for each tree face.
sc_array_t * p8est_connectivity_deflate(p8est_connectivity_t *conn, p8est_connectivity_encode_t code)
Allocate memory and store the connectivity information there.
p8est_connectivity_shared_t * p8est_connectivity_mission(p8est_connectivity_t *conn_in, int split_type, sc_MPI_Comm world_comm)
Take a connectivity on the world rank zero and share it globally.
const int p8est_face_permutation_sets[3][4]
Store the 3 occurring sets of 4 permutations per face.
const int p8est_face_points[6]
For each face number, its boundary point in [0, P8EST_INSUL).
void p8est_neighbor_transform_coordinates(const p8est_neighbor_transform_t *nt, const p4est_qcoord_t self_coords[P8EST_DIM], p4est_qcoord_t neigh_coords[P8EST_DIM])
Transform from self's coordinate system to neighbor's coordinate system.
p8est_connectivity_t * p8est_connectivity_new_pillow(void)
Create a connectivity structure for two trees on top of each other.
void p8est_neighbor_transform_coordinates_reverse(const p8est_neighbor_transform_t *nt, const p4est_qcoord_t neigh_coords[P8EST_DIM], p4est_qcoord_t self_coords[P8EST_DIM])
Transform from neighbor's coordinate system to self's coordinate system.
const int p8est_face_dual[6]
Store the face numbers in the face neighbor's system.
p8est_connectivity_t * p8est_connectivity_new_twowrap(void)
Create a connectivity structure that contains two cubes where the two far ends are identified periodi...
void p8est_connectivity_reorder(sc_MPI_Comm comm, int k, p8est_connectivity_t *conn, p8est_connect_type_t ctype)
Reorder a connectivity using METIS.
p8est_connectivity_t * p8est_connectivity_new(p4est_topidx_t num_vertices, p4est_topidx_t num_trees, p4est_topidx_t num_edges, p4est_topidx_t num_ett, p4est_topidx_t num_corners, p4est_topidx_t num_ctt)
Allocate a connectivity structure.
void p8est_connectivity_get_neighbor_transforms(p8est_connectivity_t *conn, p4est_topidx_t tree_id, p8est_connect_type_t boundary_type, int boundary_index, sc_array_t *neighbor_transform_array)
Fill an array with the neighbor transforms based on a specific boundary type.
p8est_connectivity_t * p8est_connectivity_read_inp(const char *filename)
Create a p4est connectivity from an ABAQUS input file.
sc_array_t * p8est_connectivity_reorder_newid(sc_MPI_Comm comm, int k, p8est_connectivity_t *conn, p8est_connect_type_t ctype, sc_array_t *newid)
Reorder a connectivity using METIS.
p8est_connectivity_t * p8est_connectivity_new_copy(p4est_topidx_t num_vertices, p4est_topidx_t num_trees, p4est_topidx_t num_edges, p4est_topidx_t num_corners, const double *vertices, const p4est_topidx_t *ttv, const p4est_topidx_t *ttt, const int8_t *ttf, const p4est_topidx_t *tte, const p4est_topidx_t *eoff, const p4est_topidx_t *ett, const int8_t *ete, const p4est_topidx_t *ttc, const p4est_topidx_t *coff, const p4est_topidx_t *ctt, const int8_t *ctc)
Allocate a connectivity structure and populate from constants.
void p8est_connectivity_coordinates_canonicalize(p8est_connectivity_t *conn, p4est_topidx_t treeid, const p4est_qcoord_t coords[], p4est_topidx_t *treeid_out, p4est_qcoord_t coords_out[])
Determine the owning tree for a coordinate and transform it there.
p4est_topidx_t p8est_find_face_transform(p8est_connectivity_t *connectivity, p4est_topidx_t itree, int iface, int ftransform[])
Fill an array with the axis combination of a face neighbor transform.
p8est_connectivity_t * p8est_connectivity_new_twotrees(int l_face, int r_face, int orientation)
Create a connectivity structure for two trees being rotated w.r.t.
int p8est_connectivity_edge_neighbor_corner(int c, int e, int ne, int o)
Transform a corner across one of the adjacent edges into a neighbor tree.
const int p8est_corner_faces[8][3]
Store the face numbers 0..5 for each tree corner.
const int p8est_face_edges[6][4]
Store the edge numbers 0..12 for each tree face.
p8est_connectivity_t * p8est_connectivity_new_drop(void)
Create a connectivity structure for a five-trees geometry with a hole.
p8est_connectivity_t * p8est_connectivity_new_unitcube(void)
Create a connectivity structure for the unit cube.
p8est_connectivity_t * p8est_connectivity_new_byname(const char *name)
Create connectivity structure from predefined catalogue.
p8est_connectivity_t * p8est_connectivity_bcast(p8est_connectivity_t *conn_in, int root, sc_MPI_Comm comm)
Broadcast a connectivity structure that exists only on one process to all.
int p8est_connectivity_is_equal(p8est_connectivity_t *conn1, p8est_connectivity_t *conn2)
Check two connectivity structures for equality.
int p8est_connect_type_int(p8est_connect_type_t btype)
Convert the p8est_connect_type_t into a number.
p8est_connectivity_t * p8est_connectivity_inflate(sc_array_t *buffer)
Create new connectivity from a memory buffer.
size_t p8est_connectivity_memory_used(p8est_connectivity_t *conn)
Calculate memory usage of a connectivity structure.
void p8est_find_corner_transform(p8est_connectivity_t *connectivity, p4est_topidx_t itree, int icorner, p8est_corner_info_t *ci)
Fills an array with information about corner neighbors.
int p8est_connectivity_face_neighbor_corner(int c, int f, int nf, int o)
Transform a corner across one of the adjacent faces into a neighbor tree.
#define P8EST_DIM
The spatial dimension.
Definition: p8est_connectivity.h:70
p8est_connectivity_t * p8est_connectivity_new_twocubes(void)
Create a connectivity structure that contains two cubes.
const int p8est_edge_corners[12][2]
Store the corner numbers 0..8 for each tree edge.
const int p8est_edge_edge_corners[12][8]
Store the edge corner numbers 0..1 for the corners touching a tree edge or -1 if combination is inval...
int p8est_connectivity_read_inp_stream(FILE *stream, p4est_topidx_t *num_vertices, p4est_topidx_t *num_trees, double *vertices, p4est_topidx_t *tree_to_vertex)
Read an ABAQUS input file from a file stream.
struct p8est_connectivity_shared p8est_connectivity_shared_t
Management information for a connectivity shared by MPI3.
const int p8est_child_edge_faces[8][12]
Store the faces for each child and edge, can be -1.
void p8est_expand_face_transform(int iface, int nface, int ftransform[])
Fill an array with the axis combination of a face neighbor transform.
p8est_connectivity_t * p8est_connectivity_source(sc_io_source_t *source)
Read connectivity from a source object.
void p8est_connectivity_destroy(p8est_connectivity_t *connectivity)
Destroy a connectivity structure.
p8est_connectivity_shared_t * p8est_connectivity_share(p8est_connectivity_t *conn_in, int root, sc_MPI_Comm comm)
Take a connectivity on a single rank and share it with MPI3.
p8est_connectivity_t * p8est_connectivity_new_shell(void)
Create a connectivity structure that builds a spherical shell.
const int p8est_child_corner_faces[8][8]
Store the faces for each child and corner, can be -1.
const int p8est_corner_face_corners[8][6]
Store the face corner numbers for the faces touching a tree corner.
const int p8est_corner_edges[8][3]
Store the edge numbers 0..11 for each tree corner.
p8est_connectivity_t * p8est_connectivity_new_rotwrap(void)
Create a connectivity structure for a mostly periodic unit cube.
void p8est_connectivity_join_faces(p8est_connectivity_t *conn, p4est_topidx_t tree_left, p4est_topidx_t tree_right, int face_left, int face_right, int orientation)
p8est_connectivity_join_faces This function takes an existing valid connectivity conn and modifies it...
int p8est_connectivity_face_neighbor_face_edge(int fe, int f, int nf, int o)
Transform a face-edge across one of the adjacent faces into a neighbor tree.
void p8est_connectivity_reduce(p8est_connectivity_t *conn)
Removes corner and edge information of a connectivity such that enough information is left to run p8e...
const int p8est_child_corner_edges[8][8]
Store the edges for each child and corner, can be -1.
p8est_connectivity_t * p8est_connectivity_new_torus(int nSegments)
Create a connectivity structure that builds a revolution torus.
p8est_connect_type_t
Characterize a type of adjacency.
Definition: p8est_connectivity.h:120
@ P8EST_CONNECT_CORNER
Balance faces, edges, corners.
Definition: p8est_connectivity.h:126
@ P8EST_CONNECT_FULL
= CORNER.
Definition: p8est_connectivity.h:127
@ P8EST_CONNECT_ALMOST
= CORNER - 1.
Definition: p8est_connectivity.h:125
@ P8EST_CONNECT_SELF
No balance whatsoever.
Definition: p8est_connectivity.h:122
@ P8EST_CONNECT_FACE
Balance across faces only.
Definition: p8est_connectivity.h:123
@ P8EST_CONNECT_EDGE
Balance across faces and edges.
Definition: p8est_connectivity.h:124
int p8est_connectivity_is_equivalent(p8est_connectivity_t *conn1, p8est_connectivity_t *conn2)
p8est_connectivity_is_equivalent This function compares two connectivities for equivalence: it return...
const int p8est_edge_faces[12][2]
Store the face numbers 0..5 adjacent to each tree edge.
const int p8est_face_permutations[8][4]
Store only the 8 out of 24 possible permutations that occur.
const int p8est_face_edge_permutations[8][4]
Store only the 8 out of 24 possible permutations that occur.
void p8est_connectivity_complete(p8est_connectivity_t *conn)
Internally connect a connectivity based on tree_to_vertex information.
const int p8est_edge_points[12]
For each edge number, its boundary point in [0, P8EST_INSUL).
const int p8est_edge_face_corners[12][6][2]
Store the face corner numbers 0..3 for the faces touching a tree edge.
p8est_connectivity_t * p8est_connectivity_new_rotcubes(void)
Create a connectivity structure that contains a few cubes.
int p8est_connectivity_face_neighbor_corner_set(int c, int f, int nf, int set)
Transform a corner across one of the adjacent faces into a neighbor tree.
int p8est_connectivity_is_valid(p8est_connectivity_t *connectivity)
Examine a connectivity structure.
int p8est_connectivity_face_neighbor_edge(int e, int f, int nf, int o)
Transform an edge across one of the adjacent faces into a neighbor tree.
int p8est_connectivity_sink(p8est_connectivity_t *conn, sc_io_sink_t *sink)
Write connectivity to a sink object.
p8est_connectivity_t * p8est_connectivity_new_brick(int m, int n, int p, int periodic_a, int periodic_b, int periodic_c)
An m by n by p array with periodicity in x, y, and z if periodic_a, periodic_b, and periodic_c are tr...
struct p8est_connectivity p8est_connectivity_t
This structure holds the 3D inter-tree connectivity information.
p8est_connectivity_encode_t
Typedef for serialization method.
Definition: p8est_connectivity.h:137
@ P8EST_CONN_ENCODE_LAST
Invalid entry to close the list.
Definition: p8est_connectivity.h:139
p8est_connectivity_t * p8est_connectivity_new_sphere(void)
Create a connectivity structure that builds a solid sphere.
int p8est_connectivity_face_neighbor_face_corner(int fc, int f, int nf, int o)
Transform a face corner across one of the adjacent faces into a neighbor tree.
p8est_connectivity_t * p8est_connectivity_refine(p8est_connectivity_t *conn, int num_per_dim)
Uniformly refine a connectivity.
void p8est_find_edge_transform(p8est_connectivity_t *connectivity, p4est_topidx_t itree, int iedge, p8est_edge_info_t *ei)
Fills an array with information about edge neighbors.
const int p8est_face_permutation_refs[6][6]
For each face combination store the permutation set.
const int p8est_corner_edge_corners[8][12]
Store the edge corner numbers for the edges touching a tree corner.
void p8est_connectivity_shared_destroy(p8est_connectivity_shared_t *cshare)
Destroy a shared connectivity structure.
p8est_connectivity_t * p8est_connectivity_copy(p8est_connectivity_t *input, int copy_attr)
Deep copy a connectivity structure.
int p8est_connectivity_edge_neighbor_edge_corner(int ec, int o)
Transform an edge corner across one of the adjacent edges into a neighbor tree.
const int p8est_corner_points[8]
For each corner number, its boundary point in [0, P8EST_INSUL).
p8est_connectivity_t * p8est_connectivity_load(const char *filename, size_t *bytes)
Load a connectivity structure from disk.
const int p8est_volume_point
Store the boundary point of the volume in [0, P8EST_INSUL).
int p8est_connectivity_save(const char *filename, p8est_connectivity_t *connectivity)
Save a connectivity structure to disk.
Management information for a connectivity shared by MPI3.
Definition: p8est_connectivity.h:258
p8est_connectivity_t * conn
The members of this connectivity are MPI3 shared windows.
Definition: p8est_connectivity.h:260
This structure holds the 3D inter-tree connectivity information.
Definition: p8est_connectivity.h:216
double * vertices
an array of size (3 * num_vertices)
Definition: p8est_connectivity.h:226
p4est_topidx_t num_corners
the number of corners that help define the topology
Definition: p8est_connectivity.h:223
p4est_topidx_t * tree_to_vertex
embed each tree into for e.g.
Definition: p8est_connectivity.h:228
int8_t * corner_to_corner
list of tree-corners that meet at a corner
Definition: p8est_connectivity.h:251
int8_t * edge_to_edge
list of tree-edges+orientations that meet at an edge (see description)
Definition: p8est_connectivity.h:244
p4est_topidx_t * tree_to_corner
(8 * num_trees) or NULL (see description)
Definition: p8est_connectivity.h:246
p4est_topidx_t * tree_to_edge
(12 * num_trees) or NULL (see description)
Definition: p8est_connectivity.h:239
char * tree_to_attr
not touched by p4est
Definition: p8est_connectivity.h:233
p4est_topidx_t * edge_to_tree
list of trees that meet at an edge
Definition: p8est_connectivity.h:243
p4est_topidx_t * ett_offset
edge to offset in edge_to_tree and edge_to_edge
Definition: p8est_connectivity.h:241
p4est_topidx_t num_vertices
the number of vertices that define the embedding of the forest (not the topology)
Definition: p8est_connectivity.h:217
size_t tree_attr_bytes
bytes per tree in tree_to_attr
Definition: p8est_connectivity.h:232
p4est_topidx_t * corner_to_tree
list of trees that meet at a corner
Definition: p8est_connectivity.h:250
p4est_topidx_t * ctt_offset
corner to offset in corner_to_tree and corner_to_corner
Definition: p8est_connectivity.h:248
int8_t * tree_to_face
(6 * num_trees) face to face+orientation (see description)
Definition: p8est_connectivity.h:237
p4est_topidx_t num_edges
the number of edges that help define the topology
Definition: p8est_connectivity.h:221
p4est_topidx_t * tree_to_tree
(6 * num_trees) neighbors across faces
Definition: p8est_connectivity.h:235
p4est_topidx_t num_trees
the number of trees
Definition: p8est_connectivity.h:220
Information about the neighbors of a corner.
Definition: p8est_connectivity.h:316
p4est_topidx_t icorner
The number of the originating corner.
Definition: p8est_connectivity.h:317
sc_array_t corner_transforms
The array of neighbors of the originating corner.
Definition: p8est_connectivity.h:318
Generic interface for transformations between a tree and any of its corner.
Definition: p8est_connectivity.h:308
int8_t ncorner
The number of the corner.
Definition: p8est_connectivity.h:310
p4est_topidx_t ntree
The number of the tree.
Definition: p8est_connectivity.h:309
Information about the neighbors of an edge.
Definition: p8est_connectivity.h:299
int8_t iedge
The information of the edge.
Definition: p8est_connectivity.h:300
sc_array_t edge_transforms
The array of neighbors of the originating edge.
Definition: p8est_connectivity.h:301
Generic interface for transformations between a tree and any of its edge.
Definition: p8est_connectivity.h:288
int8_t corners
The corners connected to the edge.
Definition: p8est_connectivity.h:293
int8_t nedge
The number of the edge.
Definition: p8est_connectivity.h:290
p4est_topidx_t ntree
The number of the tree.
Definition: p8est_connectivity.h:289
int8_t nflip
The orientation of the edge.
Definition: p8est_connectivity.h:292
Generic interface for transformations between a tree and any of its neighbors.
Definition: p8est_connectivity.h:325
p4est_topidx_t neighbor
neighbor tree index
Definition: p8est_connectivity.h:327
int8_t index_self
index of interface from self's perspective
Definition: p8est_connectivity.h:328
p8est_connect_type_t neighbor_type
type of connection to neighbor
Definition: p8est_connectivity.h:326
int8_t index_neighbor
index of interface from neighbor's perspective
Definition: p8est_connectivity.h:330