p4est 2.8.6
p4est is a software library for parallel adaptive mesh refinement.
p4est_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
32#ifndef P4EST_GHOST_H
33#define P4EST_GHOST_H
34
35#include <p4est.h>
36
37SC_EXTERN_C_BEGIN;
38
40typedef struct
41{
42 int mpisize;
43 p4est_topidx_t num_trees;
53 sc_array_t ghosts;
61 sc_array_t mirrors;
78}
80
94 p4est_ghost_t * ghost);
95
101
116 p4est_topidx_t treeid,
117 int face,
118 const p4est_quadrant_t * q);
119
133
144
147
156 int which_proc,
157 p4est_topidx_t which_tree,
158 const p4est_quadrant_t * q);
159
168 int which_proc,
169 p4est_topidx_t which_tree,
170 const p4est_quadrant_t * q);
171
197 p4est_ghost_t * ghost,
198 p4est_topidx_t treeid,
199 const p4est_quadrant_t * q,
200 int *face, int *hang,
201 int *owner_rank);
202
225 p4est_ghost_t * ghost,
226 p4est_topidx_t treeid,
227 const p4est_quadrant_t * q,
228 sc_array_t * exists_arr,
229 sc_array_t * rproc_arr,
230 sc_array_t * rquad_arr);
231
242
249 p4est_ghost_t * ghost);
250
263 p4est_ghost_t * ghost,
264 void *ghost_data);
265
268{
271 p4est_t *p4est;
272 p4est_ghost_t *ghost;
273 int minlevel, maxlevel;
274 size_t data_size;
275 void *ghost_data;
276 int *qactive, *qbuffer;
277 sc_array_t requests, sbuffers;
278 sc_array_t rrequests, rbuffers;
279}
281
291 (p4est_t * p4est, p4est_ghost_t * ghost, void *ghost_data);
292
300
312 p4est_ghost_t * ghost,
313 size_t data_size,
314 void **mirror_data,
315 void *ghost_data);
316
329 (p4est_t * p4est, p4est_ghost_t * ghost,
330 size_t data_size, void **mirror_data, void *ghost_data);
331
339
357 p4est_ghost_t * ghost,
358 int minlevel,
359 int maxlevel,
360 size_t data_size,
361 void **mirror_data,
362 void *ghost_data);
363
376 (p4est_t * p4est, p4est_ghost_t * ghost, int minlevel, int maxlevel,
377 size_t data_size, void **mirror_data, void *ghost_data);
378
386
394 p4est_ghost_t * ghost);
395
396SC_EXTERN_C_END;
397
398#endif /* !P4EST_GHOST_H */
The top-level 2D p4est interface.
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
p4est_connect_type_t
Characterize a type of adjacency.
Definition: p4est_connectivity.h:113
p4est_ghost_exchange_t * p4est_ghost_exchange_data_begin(p4est_t *p4est, p4est_ghost_t *ghost, void *ghost_data)
Begin an asynchronous ghost data exchange by posting messages.
ssize_t p4est_ghost_bsearch(p4est_ghost_t *ghost, int which_proc, p4est_topidx_t which_tree, const p4est_quadrant_t *q)
Conduct binary search for exact match on a range of the ghost layer.
void p4est_ghost_exchange_custom(p4est_t *p4est, p4est_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 p4est_ghost_is_valid(p4est_t *p4est, p4est_ghost_t *ghost)
Examine if a ghost structure is valid.
void p4est_ghost_destroy(p4est_ghost_t *ghost)
Frees all memory used for the ghost layer.
p4est_ghost_t * p4est_ghost_new(p4est_t *p4est, p4est_connect_type_t btype)
Builds the ghost layer.
int p4est_quadrant_find_owner(p4est_t *p4est, p4est_topidx_t treeid, int face, const p4est_quadrant_t *q)
Gets the processor id of a quadrant's owner.
void p4est_ghost_exchange_data(p4est_t *p4est, p4est_ghost_t *ghost, void *ghost_data)
Transfer data for local quadrants that are ghosts to other processors.
p4est_ghost_exchange_t * p4est_ghost_exchange_custom_begin(p4est_t *p4est, p4est_ghost_t *ghost, size_t data_size, void **mirror_data, void *ghost_data)
Begin an asynchronous ghost data exchange by posting messages.
void p4est_ghost_exchange_custom_end(p4est_ghost_exchange_t *exc)
Complete an asynchronous ghost data exchange.
struct p4est_ghost_exchange p4est_ghost_exchange_t
Transient storage for asynchronous ghost exchange.
int p4est_quadrant_exists(p4est_t *p4est, p4est_ghost_t *ghost, p4est_topidx_t treeid, const p4est_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.
p4est_locidx_t p4est_face_quadrant_exists(p4est_t *p4est, p4est_ghost_t *ghost, p4est_topidx_t treeid, const p4est_quadrant_t *q, int *face, int *hang, int *owner_rank)
Checks if quadrant exists in the local forest or the ghost layer.
p4est_ghost_t * p4est_ghost_new_local(p4est_t *p4est, p4est_connect_type_t ctype)
Generate an empty ghost layer.
ssize_t p4est_ghost_contains(p4est_ghost_t *ghost, int which_proc, p4est_topidx_t which_tree, const p4est_quadrant_t *q)
Conduct binary search for ancestor on range of the ghost layer.
p4est_ghost_exchange_t * p4est_ghost_exchange_custom_levels_begin(p4est_t *p4est, p4est_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.
void p4est_ghost_exchange_custom_levels_end(p4est_ghost_exchange_t *exc)
Complete an asynchronous ghost data exchange.
unsigned p4est_ghost_checksum(p4est_t *p4est, p4est_ghost_t *ghost)
Compute the parallel checksum of a ghost layer.
void p4est_ghost_expand(p4est_t *p4est, p4est_ghost_t *ghost)
Expand the size of the ghost layer and mirrors by one additional layer of adjacency.
void p4est_ghost_exchange_data_end(p4est_ghost_exchange_t *exc)
Complete an asynchronous ghost data exchange.
void p4est_ghost_exchange_custom_levels(p4est_t *p4est, p4est_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.
int p4est_is_balanced(p4est_t *p4est, p4est_connect_type_t btype)
Check a forest to see if it is balanced.
size_t p4est_ghost_memory_used(p4est_ghost_t *ghost)
Calculate the memory usage of the ghost layer.
Transient storage for asynchronous ghost exchange.
Definition: p4est_ghost.h:268
int is_levels
Are we restricted to levels or not.
Definition: p4est_ghost.h:270
int maxlevel
Meaningful with is_levels.
Definition: p4est_ghost.h:273
int is_custom
False for p4est_ghost_exchange_data.
Definition: p4est_ghost.h:269
quadrants that neighbor the local domain
Definition: p4est_ghost.h:41
p4est_connect_type_t btype
which neighbors are in the ghost layer
Definition: p4est_ghost.h:44
p4est_locidx_t * mirror_proc_front_offsets
NULL until p4est_ghost_expand is called.
Definition: p4est_ghost.h:75
p4est_locidx_t * proc_offsets
mpisize + 1 ghost indices
Definition: p4est_ghost.h:55
p4est_locidx_t * mirror_proc_mirrors
indices into mirrors grouped by outside processor rank and ascending within each rank
Definition: p4est_ghost.h:63
sc_array_t mirrors
An array of local quadrants that touch the parallel boundary from the inside, i.e....
Definition: p4est_ghost.h:61
p4est_locidx_t * mirror_proc_fronts
like mirror_proc_mirrors, but limited to the outermost octants.
Definition: p4est_ghost.h:69
p4est_locidx_t * mirror_tree_offsets
num_trees + 1 mirror indices
Definition: p4est_ghost.h:62
sc_array_t ghosts
An array of quadrants which make up the ghost layer around p4est.
Definition: p4est_ghost.h:53
p4est_locidx_t * mirror_proc_offsets
mpisize + 1 indices into mirror_proc_mirrors
Definition: p4est_ghost.h:66
p4est_locidx_t * tree_offsets
num_trees + 1 ghost indices
Definition: p4est_ghost.h:54
The 2D quadrant datatype.
Definition: p4est.h:72
The p4est forest datatype.
Definition: p4est.h:136