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_ghost.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 
34 #ifndef P8EST_GHOST_H
35 #define P8EST_GHOST_H
36 
37 #include <p8est.h>
38 
39 SC_EXTERN_C_BEGIN;
40 
45 typedef struct p8est_ghost
46 {
47  int mpisize;
59  sc_array_t ghosts;
67  sc_array_t mirrors;
83 }
85 
99  p8est_ghost_t * ghost);
100 
106 
121  p4est_topidx_t treeid,
122  int face,
123  const p8est_quadrant_t * q);
124 
137  p8est_connect_type_t btype);
138 
148  p8est_connect_type_t ctype);
149 
152 
161  int which_proc,
162  p4est_topidx_t which_tree,
163  const p8est_quadrant_t * q);
164 
173  int which_proc,
174  p4est_topidx_t which_tree,
175  const p8est_quadrant_t * q);
176 
202  p8est_ghost_t * ghost,
203  p4est_topidx_t treeid,
204  const p8est_quadrant_t * q,
205  int *face, int *hang,
206  int *owner_rank);
207 
230  p8est_ghost_t * ghost,
231  p4est_topidx_t treeid,
232  const p8est_quadrant_t * q,
233  sc_array_t * exists_arr,
234  sc_array_t * rproc_arr,
235  sc_array_t * rquad_arr);
236 
246  p8est_connect_type_t btype);
247 
254  p8est_ghost_t * ghost);
255 
268  p8est_ghost_t * ghost,
269  void *ghost_data);
270 
272 typedef struct p8est_ghost_exchange
273 {
274  int is_custom;
275  int is_levels;
278  int minlevel;
279  int maxlevel;
280  size_t data_size;
281  void *ghost_data;
282  int *qactive;
283  int *qbuffer;
284  sc_array_t requests;
285  sc_array_t sbuffers;
286  sc_array_t rrequests;
287  sc_array_t rbuffers;
288 }
290 
302  (p8est_t * p8est, p8est_ghost_t * ghost, void *ghost_data);
303 
310  (p8est_ghost_exchange_t * exc);
311 
323  p8est_ghost_t * ghost,
324  size_t data_size,
325  void **mirror_data,
326  void *ghost_data);
327 
343  (p8est_t * p8est, p8est_ghost_t * ghost,
344  size_t data_size, void **mirror_data, void *ghost_data);
345 
352  (p8est_ghost_exchange_t * exc);
353 
371  p8est_ghost_t * ghost,
372  int minlevel,
373  int maxlevel,
374  size_t data_size,
375  void **mirror_data,
376  void *ghost_data);
377 
397  (p8est_t * p8est, p8est_ghost_t * ghost, int minlevel, int maxlevel,
398  size_t data_size, void **mirror_data, void *ghost_data);
399 
406  (p8est_ghost_exchange_t * exc);
407 
415  p8est_ghost_t * ghost);
416 
417 SC_EXTERN_C_END;
418 
419 #endif /* !P8EST_GHOST_H */
int32_t p4est_topidx_t
Typedef for counting topological entities (trees, tree vertices).
Definition: p4est_base.h:93
int32_t p4est_locidx_t
Typedef for processor-local indexing of quadrants and nodes.
Definition: p4est_base.h:106
The top-level 3D p8est interface.
p8est_connect_type_t
Characterize a type of adjacency.
Definition: p8est_connectivity.h:120
struct p8est_ghost p8est_ghost_t
Quadrants that neighbor the local domain.
void p8est_ghost_exchange_data_end(p8est_ghost_exchange_t *exc)
Complete an asynchronous ghost data exchange.
void p8est_ghost_destroy(p8est_ghost_t *ghost)
Frees all memory used for the ghost layer.
p8est_ghost_exchange_t * p8est_ghost_exchange_data_begin(p8est_t *p8est, p8est_ghost_t *ghost, void *ghost_data)
Begin an asynchronous ghost data exchange by posting messages.
p8est_ghost_exchange_t * p8est_ghost_exchange_custom_begin(p8est_t *p8est, p8est_ghost_t *ghost, size_t data_size, void **mirror_data, void *ghost_data)
Begin an asynchronous ghost data exchange by posting messages.
int p8est_quadrant_exists(p8est_t *p8est, p8est_ghost_t *ghost, p4est_topidx_t treeid, const p8est_quadrant_t *q, sc_array_t *exists_arr, sc_array_t *rproc_arr, sc_array_t *rquad_arr)
Checks if quadrant exists in the local forest or the ghost layer.
unsigned p8est_ghost_checksum(p8est_t *p8est, p8est_ghost_t *ghost)
Compute the parallel checksum of a ghost layer.
int p8est_ghost_is_valid(p8est_t *p8est, p8est_ghost_t *ghost)
Examine if a ghost structure is valid as described above.
void p8est_ghost_exchange_custom_levels(p8est_t *p8est, p8est_ghost_t *ghost, int minlevel, int maxlevel, size_t data_size, void **mirror_data, void *ghost_data)
Transfer data for local quadrants that are ghosts to other processors.
p8est_ghost_exchange_t * p8est_ghost_exchange_custom_levels_begin(p8est_t *p8est, p8est_ghost_t *ghost, int minlevel, int maxlevel, size_t data_size, void **mirror_data, void *ghost_data)
Begin an asynchronous ghost data exchange by posting messages.
p8est_ghost_t * p8est_ghost_new_local(p8est_t *p8est, p8est_connect_type_t ctype)
Generate an empty ghost layer.
void p8est_ghost_exchange_custom_levels_end(p8est_ghost_exchange_t *exc)
Complete an asynchronous ghost data exchange.
p8est_ghost_t * p8est_ghost_new(p8est_t *p8est, p8est_connect_type_t btype)
Builds the ghost layer.
ssize_t p8est_ghost_tree_contains(p8est_ghost_t *ghost, int which_proc, p4est_topidx_t which_tree, const p8est_quadrant_t *q)
Conduct binary search for ancestor on range of the ghost layer.
int p8est_quadrant_find_owner(p8est_t *p8est, p4est_topidx_t treeid, int face, const p8est_quadrant_t *q)
Gets the processor id of a quadrant's owner.
struct p8est_ghost_exchange p8est_ghost_exchange_t
Transient storage for asynchronous ghost exchange.
void p8est_ghost_exchange_custom_end(p8est_ghost_exchange_t *exc)
Complete an asynchronous ghost data exchange.
void p8est_ghost_exchange_custom(p8est_t *p8est, p8est_ghost_t *ghost, size_t data_size, void **mirror_data, void *ghost_data)
Transfer data for local quadrants that are ghosts to other processors.
int p8est_is_balanced(p8est_t *p8est, p8est_connect_type_t btype)
Check a forest to see if it is balanced.
p4est_locidx_t p8est_face_quadrant_exists(p8est_t *p8est, p8est_ghost_t *ghost, p4est_topidx_t treeid, const p8est_quadrant_t *q, int *face, int *hang, int *owner_rank)
Checks if quadrant exists in the local forest or the ghost layer.
size_t p8est_ghost_memory_used(p8est_ghost_t *ghost)
Calculate the memory usage of the ghost layer.
ssize_t p8est_ghost_bsearch(p8est_ghost_t *ghost, int which_proc, p4est_topidx_t which_tree, const p8est_quadrant_t *q)
Conduct binary search for exact match on a range of the ghost layer.
void p8est_ghost_expand(p8est_t *p8est, p8est_ghost_t *ghost)
Expand the size of the ghost layer and mirrors by one additional layer of adjacency.
void p8est_ghost_exchange_data(p8est_t *p8est, p8est_ghost_t *ghost, void *ghost_data)
Transfer data for local quadrants that are ghosts to other processors.
Transient storage for asynchronous ghost exchange.
Definition: p8est_ghost.h:273
int minlevel
Meaningful with is_levels.
Definition: p8est_ghost.h:278
int * qactive
p4est->mpisize many integers
Definition: p8est_ghost.h:282
sc_array_t sbuffers
Array of send buffers.
Definition: p8est_ghost.h:285
size_t data_size
The data size to transfer per quadrant.
Definition: p8est_ghost.h:280
sc_array_t rrequests
Array of receive requests.
Definition: p8est_ghost.h:286
int is_custom
False for p8est_ghost_exchange_data.
Definition: p8est_ghost.h:274
p8est_t * p4est
The forest used for reference.
Definition: p8est_ghost.h:276
sc_array_t rbuffers
Array of receive buffers.
Definition: p8est_ghost.h:287
int maxlevel
Meaningful with is_levels.
Definition: p8est_ghost.h:279
sc_array_t requests
Array of send requests.
Definition: p8est_ghost.h:284
void * ghost_data
Allocated contiguous array for ghost data.
Definition: p8est_ghost.h:281
int * qbuffer
p4est->mpisize many integers
Definition: p8est_ghost.h:283
int is_levels
Are we restricted to levels or not.
Definition: p8est_ghost.h:275
p8est_ghost_t * ghost
The ghost layer used for reference.
Definition: p8est_ghost.h:277
Quadrants that neighbor the local domain.
Definition: p8est_ghost.h:46
sc_array_t mirrors
An array of local quadrants that touch the parallel boundary from the inside, i.e....
Definition: p8est_ghost.h:67
p4est_topidx_t num_trees
number of trees of the ghost
Definition: p8est_ghost.h:48
p4est_locidx_t * mirror_proc_front_offsets
NULL until p8est_ghost_expand is called.
Definition: p8est_ghost.h:80
p4est_locidx_t * tree_offsets
num_trees + 1 ghost indices
Definition: p8est_ghost.h:60
int mpisize
MPI size of the ghost.
Definition: p8est_ghost.h:47
p8est_connect_type_t btype
which neighbors are in the ghost layer
Definition: p8est_ghost.h:49
p4est_locidx_t * mirror_proc_fronts
like mirror_proc_mirrors, but limited to the outermost octants.
Definition: p8est_ghost.h:74
p4est_locidx_t * mirror_tree_offsets
num_trees + 1 mirror indices
Definition: p8est_ghost.h:68
p4est_locidx_t * mirror_proc_mirrors
indices into mirrors grouped by outside processor rank and ascending within each rank
Definition: p8est_ghost.h:69
sc_array_t ghosts
An array of p8est_quadrant_t quadrants which make up the ghost layer around p8est.
Definition: p8est_ghost.h:59
p4est_locidx_t * mirror_proc_offsets
mpisize + 1 indices into mirror_proc_mirrors
Definition: p8est_ghost.h:72
p4est_locidx_t * proc_offsets
mpisize + 1 ghost indices
Definition: p8est_ghost.h:61
The 3D quadrant (i.e., octant) datatype.
Definition: p8est.h:72
The p8est forest datatype.
Definition: p8est.h:146