p4est 2.8.5.190-3fcf-dirty
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
38void p8est_comm_parallel_env_assign (p8est_t * p8est,
39 sc_MPI_Comm mpicomm);
40
45void p8est_comm_parallel_env_duplicate (p8est_t * p8est);
46
49void p8est_comm_parallel_env_release (p8est_t * p8est);
50
57void p8est_comm_parallel_env_replace (p8est_t * p8est,
58 sc_MPI_Comm mpicomm);
59
62void p8est_comm_parallel_env_get_info (p8est_t * p8est);
63
68int p8est_comm_parallel_env_is_null (p8est_t * p8est);
69
78int p8est_comm_parallel_env_reduce (p8est_t **
79 p8est_supercomm);
80
98int p8est_comm_parallel_env_reduce_ext (p8est_t **
99 p8est_supercomm,
100 sc_MPI_Group
101 group_add,
102 int add_to_beginning,
103 int **ranks_subcomm);
104
109void p8est_comm_count_quadrants (p8est_t * p8est);
110
119void p8est_comm_global_partition (p8est_t * p8est,
121 first_quad);
122
133void p8est_comm_global_first_quadrant (p4est_gloidx_t
134 global_num_quadrants,
135 int mpisize,
136 p4est_gloidx_t * gfq);
137
144void p8est_comm_count_pertree (p8est_t * p8est,
145 p4est_gloidx_t * pertree);
146
152int p8est_comm_is_empty (p8est_t *p8est, int p);
153
161int p8est_comm_is_empty_gfq (const p4est_gloidx_t *gfq,
162 int num_procs, int p);
163
170int p8est_comm_is_contained (p8est_t * p8est,
171 p4est_locidx_t which_tree,
172 const p8est_quadrant_t * q,
173 int rank);
174
185int p8est_comm_is_owner (p8est_t *p8est,
186 p4est_locidx_t which_tree,
187 const p8est_quadrant_t *q,
188 int rank);
189
203int p8est_comm_is_owner_gfp
204 (const p8est_quadrant_t *gfp, int num_procs, p4est_topidx_t num_trees,
205 p4est_locidx_t which_tree, const p8est_quadrant_t *q, int rank);
206
212int p8est_comm_find_owner (p8est_t * p8est,
213 p4est_locidx_t which_tree,
214 const p8est_quadrant_t * q,
215 int guess);
216
227void p8est_comm_tree_info (p8est_t * p8est,
228 p4est_locidx_t which_tree,
229 int full_tree[],
230 int tree_contact[],
231 const p8est_quadrant_t ** firstq,
232 const p8est_quadrant_t ** nextq);
233
242int p8est_comm_neighborhood_owned (p8est_t * p8est,
243 p4est_locidx_t which_tree,
244 int full_tree[],
245 int tree_contact[],
246 p8est_quadrant_t * q);
247
254int p8est_comm_sync_flag (p8est_t * p8est,
255 int flag, sc_MPI_Op operation);
256
266unsigned p8est_comm_checksum (p8est_t * p8est,
267 unsigned local_crc,
268 size_t local_bytes);
269
277unsigned p8est_comm_checksum_partition (p8est_t * p8est,
278 unsigned local_crc,
279 size_t local_bytes);
280
283{
284 int variable;
285 int num_senders;
286 int num_receivers;
287 sc_MPI_Request *recv_req;
288 sc_MPI_Request *send_req;
289}
291
316void p8est_transfer_fixed (const p4est_gloidx_t * dest_gfq,
317 const p4est_gloidx_t * src_gfq,
318 sc_MPI_Comm mpicomm, int tag,
319 void *dest_data,
320 const void *src_data,
321 size_t data_size);
322
336int p8est_bsearch_partition (p4est_gloidx_t target,
337 const p4est_gloidx_t * gfq,
338 int nmemb);
339
366p8est_transfer_context_t *p8est_transfer_fixed_begin (const p4est_gloidx_t *
367 dest_gfq,
368 const p4est_gloidx_t *
369 src_gfq,
370 sc_MPI_Comm mpicomm,
371 int tag,
372 void *dest_data,
373 const void *src_data,
374 size_t data_size);
375
381void p8est_transfer_fixed_end (p8est_transfer_context_t * tc);
382
420void p8est_transfer_custom (const p4est_gloidx_t * dest_gfq,
421 const p4est_gloidx_t * src_gfq,
422 sc_MPI_Comm mpicomm, int tag,
423 void *dest_data,
424 const int *dest_sizes,
425 const void *src_data,
426 const int *src_sizes);
427
469p8est_transfer_context_t *p8est_transfer_custom_begin (const p4est_gloidx_t *
470 dest_gfq,
471 const p4est_gloidx_t *
472 src_gfq,
473 sc_MPI_Comm mpicomm,
474 int tag,
475 void *dest_data,
476 const int *dest_sizes,
477 const void *src_data,
478 const int *src_sizes);
479
485void p8est_transfer_custom_end (p8est_transfer_context_t * tc);
486
531void p8est_transfer_items
532 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
533 sc_MPI_Comm mpicomm, int tag,
534 void *dest_data, const int *dest_counts,
535 const void *src_data, const int *src_counts, size_t item_size);
536
544p8est_transfer_context_t *p8est_transfer_items_begin
545 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
546 sc_MPI_Comm mpicomm, int tag,
547 void *dest_data, const int *dest_counts,
548 const void *src_data, const int *src_counts, size_t item_size);
549
555void p8est_transfer_items_end (p8est_transfer_context_t * tc);
556
566void p8est_transfer_end (p8est_transfer_context_t * tc);
567
568SC_EXTERN_C_END;
569
570#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:283
The p8est forest datatype.
Definition: p8est.h:132