p4est 2.8.6
p4est is a software library for parallel adaptive mesh refinement.
p4est_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 P4EST_COMMUNICATION_H
26#define P4EST_COMMUNICATION_H
27
28#include <p4est.h>
29
30SC_EXTERN_C_BEGIN;
31
45int p4est_bsearch_partition (p4est_gloidx_t target,
46 const p4est_gloidx_t * gfq,
47 int nmemb);
48
55void p4est_comm_parallel_env_assign (p4est_t * p4est,
56 sc_MPI_Comm mpicomm);
57
62void p4est_comm_parallel_env_duplicate (p4est_t * p4est);
63
66void p4est_comm_parallel_env_release (p4est_t * p4est);
67
74void p4est_comm_parallel_env_replace (p4est_t * p4est,
75 sc_MPI_Comm mpicomm);
76
79void p4est_comm_parallel_env_get_info (p4est_t * p4est);
80
85int p4est_comm_parallel_env_is_null (p4est_t * p4est);
86
95int p4est_comm_parallel_env_reduce (p4est_t **
96 p4est_supercomm);
97
115int p4est_comm_parallel_env_reduce_ext (p4est_t **
116 p4est_supercomm,
117 sc_MPI_Group
118 group_add,
119 int add_to_beginning,
120 int **ranks_subcomm);
121
126void p4est_comm_count_quadrants (p4est_t * p4est);
127
136void p4est_comm_global_partition (p4est_t * p4est,
138 first_quad);
139
150void p4est_comm_global_first_quadrant (p4est_gloidx_t
151 global_num_quadrants,
152 int mpisize,
153 p4est_gloidx_t * gfq);
154
161void p4est_comm_count_pertree (p4est_t * p4est,
162 p4est_gloidx_t * pertree);
163
169int p4est_comm_is_empty (p4est_t *p4est, int p);
170
178int p4est_comm_is_empty_gfq (const p4est_gloidx_t *gfq,
179 int num_procs, int p);
180
188int p4est_comm_is_empty_gfp (const p4est_quadrant_t *gfp,
189 int num_procs, int p);
190
197int p4est_comm_is_contained (p4est_t * p4est,
198 p4est_locidx_t which_tree,
199 const p4est_quadrant_t * q,
200 int rank);
201
212int p4est_comm_is_owner (p4est_t *p4est,
213 p4est_locidx_t which_tree,
214 const p4est_quadrant_t *q,
215 int rank);
216
230int p4est_comm_is_owner_gfp
231 (const p4est_quadrant_t *gfp, int num_procs, p4est_topidx_t num_trees,
232 p4est_locidx_t which_tree, const p4est_quadrant_t *q, int rank);
233
239int p4est_comm_find_owner (p4est_t * p4est,
240 p4est_locidx_t which_tree,
241 const p4est_quadrant_t * q,
242 int guess);
243
254void p4est_comm_tree_info (p4est_t * p4est,
255 p4est_locidx_t which_tree,
256 int full_tree[],
257 int tree_contact[],
258 const p4est_quadrant_t ** firstq,
259 const p4est_quadrant_t ** nextq);
260
269int p4est_comm_neighborhood_owned (p4est_t * p4est,
270 p4est_locidx_t which_tree,
271 int full_tree[],
272 int tree_contact[],
273 p4est_quadrant_t * q);
274
281int p4est_comm_sync_flag (p4est_t * p4est,
282 int flag, sc_MPI_Op operation);
283
293unsigned p4est_comm_checksum (p4est_t * p4est,
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
335void p4est_transfer_fixed (const p4est_gloidx_t * dest_gfq,
336 const p4est_gloidx_t * src_gfq,
337 sc_MPI_Comm mpicomm, int tag,
338 void *dest_data,
339 const void *src_data,
340 size_t data_size);
341
370p4est_transfer_context_t *p4est_transfer_fixed_begin (const p4est_gloidx_t *
371 dest_gfq,
372 const p4est_gloidx_t *
373 src_gfq,
374 sc_MPI_Comm mpicomm,
375 int tag,
376 void *dest_data,
377 const void *src_data,
378 size_t data_size);
379
385void p4est_transfer_fixed_end (p4est_transfer_context_t * tc);
386
428void p4est_transfer_custom (const p4est_gloidx_t * dest_gfq,
429 const p4est_gloidx_t * src_gfq,
430 sc_MPI_Comm mpicomm, int tag,
431 void *dest_data,
432 const int *dest_sizes,
433 const void *src_data,
434 const int *src_sizes);
435
479p4est_transfer_context_t *p4est_transfer_custom_begin (const p4est_gloidx_t *
480 dest_gfq,
481 const p4est_gloidx_t *
482 src_gfq,
483 sc_MPI_Comm mpicomm,
484 int tag,
485 void *dest_data,
486 const int *dest_sizes,
487 const void *src_data,
488 const int *src_sizes);
489
495void p4est_transfer_custom_end (p4est_transfer_context_t * tc);
496
541void p4est_transfer_items
542 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
543 sc_MPI_Comm mpicomm, int tag,
544 void *dest_data, const int *dest_counts,
545 const void *src_data, const int *src_counts, size_t item_size);
546
554p4est_transfer_context_t *p4est_transfer_items_begin
555 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
556 sc_MPI_Comm mpicomm, int tag,
557 void *dest_data, const int *dest_counts,
558 const void *src_data, const int *src_counts, size_t item_size);
559
565void p4est_transfer_items_end (p4est_transfer_context_t * tc);
566
576void p4est_transfer_end (p4est_transfer_context_t * tc);
577
578SC_EXTERN_C_END;
579
580#endif /* !P4EST_COMMUNICATION_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
int64_t p4est_gloidx_t
Typedef for globally unique indexing of quadrants.
Definition: p4est_base.h:118
The 2D quadrant datatype.
Definition: p4est.h:72
Context data to allow for split begin/end data transfer.
Definition: p4est_communication.h:299
The p4est forest datatype.
Definition: p4est.h:136