p4est 2.8.6
p4est is a software library for parallel adaptive mesh refinement.
p8est_communication.h
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
25#ifndef P8EST_COMMUNICATION_H
26#define P8EST_COMMUNICATION_H
27
28#include <p8est.h>
29
30SC_EXTERN_C_BEGIN;
31
45int p8est_bsearch_partition (p4est_gloidx_t target,
46 const p4est_gloidx_t * gfq,
47 int nmemb);
48
55void p8est_comm_parallel_env_assign (p8est_t * p8est,
56 sc_MPI_Comm mpicomm);
57
62void p8est_comm_parallel_env_duplicate (p8est_t * p8est);
63
66void p8est_comm_parallel_env_release (p8est_t * p8est);
67
74void p8est_comm_parallel_env_replace (p8est_t * p8est,
75 sc_MPI_Comm mpicomm);
76
79void p8est_comm_parallel_env_get_info (p8est_t * p8est);
80
85int p8est_comm_parallel_env_is_null (p8est_t * p8est);
86
95int p8est_comm_parallel_env_reduce (p8est_t **
96 p8est_supercomm);
97
115int p8est_comm_parallel_env_reduce_ext (p8est_t **
116 p8est_supercomm,
117 sc_MPI_Group
118 group_add,
119 int add_to_beginning,
120 int **ranks_subcomm);
121
126void p8est_comm_count_quadrants (p8est_t * p8est);
127
136void p8est_comm_global_partition (p8est_t * p8est,
138 first_quad);
139
150void p8est_comm_global_first_quadrant (p4est_gloidx_t
151 global_num_quadrants,
152 int mpisize,
153 p4est_gloidx_t * gfq);
154
161void p8est_comm_count_pertree (p8est_t * p8est,
162 p4est_gloidx_t * pertree);
163
169int p8est_comm_is_empty (p8est_t *p8est, int p);
170
178int p8est_comm_is_empty_gfq (const p4est_gloidx_t *gfq,
179 int num_procs, int p);
180
188int p8est_comm_is_empty_gfp (const p8est_quadrant_t *gfp,
189 int num_procs, int p);
190
197int p8est_comm_is_contained (p8est_t * p8est,
198 p4est_locidx_t which_tree,
199 const p8est_quadrant_t * q,
200 int rank);
201
212int p8est_comm_is_owner (p8est_t *p8est,
213 p4est_locidx_t which_tree,
214 const p8est_quadrant_t *q,
215 int rank);
216
230int p8est_comm_is_owner_gfp
231 (const p8est_quadrant_t *gfp, int num_procs, p4est_topidx_t num_trees,
232 p4est_locidx_t which_tree, const p8est_quadrant_t *q, int rank);
233
239int p8est_comm_find_owner (p8est_t * p8est,
240 p4est_locidx_t which_tree,
241 const p8est_quadrant_t * q,
242 int guess);
243
254void p8est_comm_tree_info (p8est_t * p8est,
255 p4est_locidx_t which_tree,
256 int full_tree[],
257 int tree_contact[],
258 const p8est_quadrant_t ** firstq,
259 const p8est_quadrant_t ** nextq);
260
269int p8est_comm_neighborhood_owned (p8est_t * p8est,
270 p4est_locidx_t which_tree,
271 int full_tree[],
272 int tree_contact[],
273 p8est_quadrant_t * q);
274
281int p8est_comm_sync_flag (p8est_t * p8est,
282 int flag, sc_MPI_Op operation);
283
293unsigned p8est_comm_checksum (p8est_t * p8est,
294 unsigned local_crc,
295 size_t local_bytes);
296
299{
300 int variable;
301 int num_senders;
302 int num_receivers;
303 sc_MPI_Request *recv_req;
304 sc_MPI_Request *send_req;
305}
307
332void p8est_transfer_fixed (const p4est_gloidx_t * dest_gfq,
333 const p4est_gloidx_t * src_gfq,
334 sc_MPI_Comm mpicomm, int tag,
335 void *dest_data,
336 const void *src_data,
337 size_t data_size);
338
365p8est_transfer_context_t *p8est_transfer_fixed_begin (const p4est_gloidx_t *
366 dest_gfq,
367 const p4est_gloidx_t *
368 src_gfq,
369 sc_MPI_Comm mpicomm,
370 int tag,
371 void *dest_data,
372 const void *src_data,
373 size_t data_size);
374
380void p8est_transfer_fixed_end (p8est_transfer_context_t * tc);
381
419void p8est_transfer_custom (const p4est_gloidx_t * dest_gfq,
420 const p4est_gloidx_t * src_gfq,
421 sc_MPI_Comm mpicomm, int tag,
422 void *dest_data,
423 const int *dest_sizes,
424 const void *src_data,
425 const int *src_sizes);
426
468p8est_transfer_context_t *p8est_transfer_custom_begin (const p4est_gloidx_t *
469 dest_gfq,
470 const p4est_gloidx_t *
471 src_gfq,
472 sc_MPI_Comm mpicomm,
473 int tag,
474 void *dest_data,
475 const int *dest_sizes,
476 const void *src_data,
477 const int *src_sizes);
478
484void p8est_transfer_custom_end (p8est_transfer_context_t * tc);
485
530void p8est_transfer_items
531 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
532 sc_MPI_Comm mpicomm, int tag,
533 void *dest_data, const int *dest_counts,
534 const void *src_data, const int *src_counts, size_t item_size);
535
543p8est_transfer_context_t *p8est_transfer_items_begin
544 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
545 sc_MPI_Comm mpicomm, int tag,
546 void *dest_data, const int *dest_counts,
547 const void *src_data, const int *src_counts, size_t item_size);
548
554void p8est_transfer_items_end (p8est_transfer_context_t * tc);
555
565void p8est_transfer_end (p8est_transfer_context_t * tc);
566
567SC_EXTERN_C_END;
568
569#endif /* !P8EST_COMMUNICATION_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
int64_t p4est_gloidx_t
Typedef for globally unique indexing of quadrants.
Definition: p4est_base.h:118
The top-level 3D p8est interface.
The 3D quadrant (i.e., octant) datatype.
Definition: p8est.h:68
Context data to allow for split begin/end data transfer.
Definition: p8est_communication.h:299
The p8est forest datatype.
Definition: p8est.h:132