p4est 2.8.5.190-3fcf-dirty
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
38void p4est_comm_parallel_env_assign (p4est_t * p4est,
39 sc_MPI_Comm mpicomm);
40
45void p4est_comm_parallel_env_duplicate (p4est_t * p4est);
46
49void p4est_comm_parallel_env_release (p4est_t * p4est);
50
57void p4est_comm_parallel_env_replace (p4est_t * p4est,
58 sc_MPI_Comm mpicomm);
59
62void p4est_comm_parallel_env_get_info (p4est_t * p4est);
63
68int p4est_comm_parallel_env_is_null (p4est_t * p4est);
69
78int p4est_comm_parallel_env_reduce (p4est_t **
79 p4est_supercomm);
80
98int p4est_comm_parallel_env_reduce_ext (p4est_t **
99 p4est_supercomm,
100 sc_MPI_Group
101 group_add,
102 int add_to_beginning,
103 int **ranks_subcomm);
104
109void p4est_comm_count_quadrants (p4est_t * p4est);
110
119void p4est_comm_global_partition (p4est_t * p4est,
121 first_quad);
122
133void p4est_comm_global_first_quadrant (p4est_gloidx_t
134 global_num_quadrants,
135 int mpisize,
136 p4est_gloidx_t * gfq);
137
144void p4est_comm_count_pertree (p4est_t * p4est,
145 p4est_gloidx_t * pertree);
146
152int p4est_comm_is_empty (p4est_t *p4est, int p);
153
161int p4est_comm_is_empty_gfq (const p4est_gloidx_t *gfq,
162 int num_procs, int p);
163
170int p4est_comm_is_contained (p4est_t * p4est,
171 p4est_locidx_t which_tree,
172 const p4est_quadrant_t * q,
173 int rank);
174
185int p4est_comm_is_owner (p4est_t *p4est,
186 p4est_locidx_t which_tree,
187 const p4est_quadrant_t *q,
188 int rank);
189
203int p4est_comm_is_owner_gfp
204 (const p4est_quadrant_t *gfp, int num_procs, p4est_topidx_t num_trees,
205 p4est_locidx_t which_tree, const p4est_quadrant_t *q, int rank);
206
212int p4est_comm_find_owner (p4est_t * p4est,
213 p4est_locidx_t which_tree,
214 const p4est_quadrant_t * q,
215 int guess);
216
227void p4est_comm_tree_info (p4est_t * p4est,
228 p4est_locidx_t which_tree,
229 int full_tree[],
230 int tree_contact[],
231 const p4est_quadrant_t ** firstq,
232 const p4est_quadrant_t ** nextq);
233
242int p4est_comm_neighborhood_owned (p4est_t * p4est,
243 p4est_locidx_t which_tree,
244 int full_tree[],
245 int tree_contact[],
246 p4est_quadrant_t * q);
247
254int p4est_comm_sync_flag (p4est_t * p4est,
255 int flag, sc_MPI_Op operation);
256
266unsigned p4est_comm_checksum (p4est_t * p4est,
267 unsigned local_crc,
268 size_t local_bytes);
269
277unsigned p4est_comm_checksum_partition (p4est_t * p4est,
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
319void p4est_transfer_fixed (const p4est_gloidx_t * dest_gfq,
320 const p4est_gloidx_t * src_gfq,
321 sc_MPI_Comm mpicomm, int tag,
322 void *dest_data,
323 const void *src_data,
324 size_t data_size);
325
339int p4est_bsearch_partition (p4est_gloidx_t target,
340 const p4est_gloidx_t * gfq,
341 int nmemb);
342
371p4est_transfer_context_t *p4est_transfer_fixed_begin (const p4est_gloidx_t *
372 dest_gfq,
373 const p4est_gloidx_t *
374 src_gfq,
375 sc_MPI_Comm mpicomm,
376 int tag,
377 void *dest_data,
378 const void *src_data,
379 size_t data_size);
380
386void p4est_transfer_fixed_end (p4est_transfer_context_t * tc);
387
429void p4est_transfer_custom (const p4est_gloidx_t * dest_gfq,
430 const p4est_gloidx_t * src_gfq,
431 sc_MPI_Comm mpicomm, int tag,
432 void *dest_data,
433 const int *dest_sizes,
434 const void *src_data,
435 const int *src_sizes);
436
480p4est_transfer_context_t *p4est_transfer_custom_begin (const p4est_gloidx_t *
481 dest_gfq,
482 const p4est_gloidx_t *
483 src_gfq,
484 sc_MPI_Comm mpicomm,
485 int tag,
486 void *dest_data,
487 const int *dest_sizes,
488 const void *src_data,
489 const int *src_sizes);
490
496void p4est_transfer_custom_end (p4est_transfer_context_t * tc);
497
542void p4est_transfer_items
543 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
544 sc_MPI_Comm mpicomm, int tag,
545 void *dest_data, const int *dest_counts,
546 const void *src_data, const int *src_counts, size_t item_size);
547
555p4est_transfer_context_t *p4est_transfer_items_begin
556 (const p4est_gloidx_t * dest_gfq, const p4est_gloidx_t * src_gfq,
557 sc_MPI_Comm mpicomm, int tag,
558 void *dest_data, const int *dest_counts,
559 const void *src_data, const int *src_counts, size_t item_size);
560
566void p4est_transfer_items_end (p4est_transfer_context_t * tc);
567
577void p4est_transfer_end (p4est_transfer_context_t * tc);
578
579SC_EXTERN_C_END;
580
581#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:283
The p4est forest datatype.
Definition: p4est.h:136