p4est 2.8.6
p4est is a software library for parallel adaptive mesh refinement.
p8est_wrap.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
25#ifndef P8EST_WRAP_H
26#define P8EST_WRAP_H
27
35#include <p8est_extended.h>
36#include <sc_refcount.h>
37
38SC_EXTERN_C_BEGIN;
39
40/*** COMPLETE INTERNAL STATE OF P8EST ***/
41
42typedef enum p8est_wrap_flags
43{
44 P8EST_WRAP_NONE = 0,
45 P8EST_WRAP_REFINE = 0x01,
46 P8EST_WRAP_COARSEN = 0x02
47}
48p8est_wrap_flags_t;
49
53typedef struct
54{
55 int hollow;
81}
83
84typedef struct p8est_wrap
85{
86 /* collection of wrap-related parameters */
88
94 sc_refcount_t conn_rc;
96 struct p8est_wrap *conn_owner;
97
98 /* these members are considered public and read-only */
99 int p4est_dim;
100 int p4est_half;
101 int p4est_faces;
102 int p4est_children;
105 /* anything below here is considered private und should not be touched */
106 int weight_exponent;
107 uint8_t *flags, *temp_flags;
108 p4est_locidx_t num_refine_flags, inside_counter, num_replaced;
109
110 /* for ghost and mesh use p8est_wrap_get_ghost, _mesh declared below */
111 p8est_ghost_t *ghost;
112 p8est_mesh_t *mesh;
113 p8est_ghost_t *ghost_aux;
114 p8est_mesh_t *mesh_aux;
115 int match_aux;
116}
118
122
133p8est_wrap_t *p8est_wrap_new_conn (sc_MPI_Comm mpicomm,
135 int initial_level);
136
154 p8est_replace_t replace_fn,
155 void *user_pointer);
156
171 p8est_wrap_params_t * params);
172
190p8est_wrap_t *p8est_wrap_new_ext (sc_MPI_Comm mpicomm,
192 int initial_level, int hollow,
194 p8est_replace_t replace_fn,
195 void *user_pointer);
196
211 int initial_level,
212 p8est_wrap_params_t * params);
213
227 size_t data_size,
228 p8est_replace_t replace_fn,
229 void *user_pointer);
230
235 int initial_level);
236p8est_wrap_t *p8est_wrap_new_rotwrap (sc_MPI_Comm mpicomm,
237 int initial_level);
238p8est_wrap_t *p8est_wrap_new_brick (sc_MPI_Comm mpicomm,
239 int bx, int by, int bz,
240 int px, int py, int pz,
241 int initial_level);
242
245void p8est_wrap_destroy (p8est_wrap_t * pp);
246
252void p8est_wrap_set_hollow (p8est_wrap_t * pp, int hollow);
253
270 int coarsen_delay,
271 int coarsen_affect);
272
286 int partition_for_coarsening);
287
294
301
309 p4est_topidx_t which_tree,
310 p4est_locidx_t which_quad);
311
319 p4est_topidx_t which_tree,
320 p4est_locidx_t which_quad);
321
335
364 int weight_exponent,
365 p4est_locidx_t * unchanged_first,
366 p4est_locidx_t * unchanged_length,
368 unchanged_old_first);
369
377
378/*** ITERATOR OVER THE FOREST LEAVES ***/
379
380typedef struct p8est_wrap_leaf
381{
384 /* Information about the current quadrant */
389 sc_array_t *tquadrants;
391#if 0 /* DEPRECATED -- anyone using them? */
392 int level;
393 double lowerleft[3];
394 double upperright[3];
395#endif
396
397 /* Information about parallel neighbors */
399 sc_array_t *mirrors;
402}
404
406#define P8EST_LEAF_IS_FIRST_IN_TREE(wleaf) ((wleaf)->which_quad == 0)
407
408/* Create an iterator over the local leaves in the forest.
409 * Returns a newly allocated state containing the first leaf,
410 * or NULL if the local partition of the tree is empty.
411 * \param [in] pp Legal p8est_wrap structure, hollow or not.
412 * \param [in] track_mirrors If true, \a pp must not be hollow and mirror
413 * information from the ghost layer is stored.
414 * \return NULL if processor is empty, otherwise a leaf iterator for
415 * subsequent use with \a p8est_wrap_leaf_next.
416 */
417p8est_wrap_leaf_t *p8est_wrap_leaf_first (p8est_wrap_t * pp,
418 int track_mirrors);
419
420/* Move the forest leaf iterator forward.
421 * \param [in,out] leaf A non-NULL leaf iterator created by
422 * \ref p8est_wrap_leaf_first.
423 * \return The state that was input with updated information for the
424 * next leaf, or NULL and deallocates the input if called with
425 * the last leaf on this processor.
426 */
427p8est_wrap_leaf_t *p8est_wrap_leaf_next (p8est_wrap_leaf_t * leaf);
428
429SC_EXTERN_C_END;
430
431#endif /* !P8EST_WRAP_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
p8est_connect_type_t
Characterize a type of adjacency.
Definition: p8est_connectivity.h:119
Interface routines with extended capabilities.
void(* p8est_replace_t)(p8est_t *p8est, p4est_topidx_t which_tree, int num_outgoing, p8est_quadrant_t *outgoing[], int num_incoming, p8est_quadrant_t *incoming[])
Callback function prototype to replace one set of quadrants with another.
Definition: p8est_extended.h:114
p8est_wrap_t * p8est_wrap_new_conn(sc_MPI_Comm mpicomm, p8est_connectivity_t *conn, int initial_level)
Create a p8est wrapper from a given connectivity structure.
p8est_wrap_t * p8est_wrap_new_params(sc_MPI_Comm mpicomm, p8est_connectivity_t *conn, int initial_level, p8est_wrap_params_t *params)
Create a p8est wrapper from a given connectivity structure.
p8est_wrap_t * p8est_wrap_new_ext(sc_MPI_Comm mpicomm, p8est_connectivity_t *conn, int initial_level, int hollow, p8est_connect_type_t btype, p8est_replace_t replace_fn, void *user_pointer)
Create a p8est wrapper from a given connectivity structure.
void p8est_wrap_complete(p8est_wrap_t *pp)
Free memory for the intermediate mesh.
void p8est_wrap_set_hollow(p8est_wrap_t *pp, int hollow)
Change hollow status of the wrap.
void p8est_wrap_set_partitioning(p8est_wrap_t *pp, int partition_for_coarsening)
Set a parameter that ensures future partitions allow one level of coarsening.
int p8est_wrap_adapt(p8est_wrap_t *pp)
Call p8est_refine, coarsen, and balance to update pp->p8est.
p8est_mesh_t * p8est_wrap_get_mesh(p8est_wrap_t *pp)
Return the appropriate mesh structure.
void p8est_wrap_mark_coarsen(p8est_wrap_t *pp, p4est_topidx_t which_tree, p4est_locidx_t which_quad)
Mark a local element for coarsening.
void p8est_wrap_mark_refine(p8est_wrap_t *pp, p4est_topidx_t which_tree, p4est_locidx_t which_quad)
Mark a local element for refinement.
p8est_wrap_t * p8est_wrap_new_world(int initial_level)
Passes sc_MPI_COMM_WORLD to p8est_wrap_new_unitcube.
p8est_wrap_t * p8est_wrap_new_p8est(p8est_t *p8est, int hollow, p8est_connect_type_t btype, p8est_replace_t replace_fn, void *user_pointer)
Create a wrapper for a given p8est structure.
p8est_wrap_t * p8est_wrap_new_p8est_params(p8est_t *p8est, p8est_wrap_params_t *params)
Create a wrapper for a given p8est structure.
p8est_wrap_t * p8est_wrap_new_copy(p8est_wrap_t *source, size_t data_size, p8est_replace_t replace_fn, void *user_pointer)
Create a p8est wrapper from an existing one.
int p8est_wrap_partition(p8est_wrap_t *pp, int weight_exponent, p4est_locidx_t *unchanged_first, p4est_locidx_t *unchanged_length, p4est_locidx_t *unchanged_old_first)
Call p8est_partition for equal leaf distribution.
void p8est_wrap_params_init(p8est_wrap_params_t *params)
Initialize a default p8est_wrap_params_t structure.
p8est_ghost_t * p8est_wrap_get_ghost(p8est_wrap_t *pp)
Return the appropriate ghost layer.
void p8est_wrap_set_coarsen_delay(p8est_wrap_t *pp, int coarsen_delay, int coarsen_affect)
Set a parameter that delays coarsening after adaptation.
p8est_wrap_t * p8est_wrap_new_unitcube(sc_MPI_Comm mpicomm, int initial_level)
Create p8est and auxiliary data structures.
This structure holds the 3D inter-tree connectivity information.
Definition: p8est_connectivity.h:215
quadrants that neighbor the local domain
Definition: p8est_ghost.h:41
This structure contains the different parameters of mesh creation.
Definition: p8est_mesh.h:55
This structure contains complete mesh information on a 2:1 balanced forest.
Definition: p8est_mesh.h:170
The 3D quadrant (i.e., octant) datatype.
Definition: p8est.h:68
The p8est tree datatype.
Definition: p8est.h:111
Definition: p8est_wrap.h:381
p8est_quadrant_t * quad
Current quadrant.
Definition: p8est_wrap.h:390
p8est_wrap_t * pp
Must contain a valid ghost.
Definition: p8est_wrap.h:382
p4est_locidx_t nm
Internal: mirror counter.
Definition: p8est_wrap.h:400
p4est_locidx_t local_quad
Quadrant number relative to proc.
Definition: p8est_wrap.h:387
p4est_locidx_t next_mirror_quadrant
Internal: next.
Definition: p8est_wrap.h:401
p4est_topidx_t which_tree
Current tree number.
Definition: p8est_wrap.h:385
sc_array_t * tquadrants
Current tree's quadrants.
Definition: p8est_wrap.h:389
p4est_locidx_t which_quad
Quadrant number relative to tree.
Definition: p8est_wrap.h:386
p8est_tree_t * tree
Current tree.
Definition: p8est_wrap.h:388
sc_array_t * mirrors
If not NULL, from pp's ghost.
Definition: p8est_wrap.h:399
int is_mirror
Quadrant at parallel boundary?
Definition: p8est_wrap.h:398
This structure contains the different parameters of wrap creation.
Definition: p8est_wrap.h:54
int partition_for_coarsening
If true, the partition is modified to allow one level of coarsening when calling p8est_wrap_partition...
Definition: p8est_wrap.h:74
int coarsen_affect
Boolean: If true, we delay coarsening not only after refinement, but also between subsequent coarseni...
Definition: p8est_wrap.h:70
p8est_mesh_params_t mesh_params
Parameters for mesh creation.
Definition: p8est_wrap.h:57
int hollow
Do not allocate flags, ghost, and mesh members.
Definition: p8est_wrap.h:55
p8est_replace_t replace_fn
This member may be removed soon.
Definition: p8est_wrap.h:60
void * user_pointer
Set the user pointer in p8est_wrap_t.
Definition: p8est_wrap.h:78
int coarsen_delay
Non-negative integer telling how many adaptations to wait before any given quadrant may be coarsened ...
Definition: p8est_wrap.h:66
Definition: p8est_wrap.h:85
p8est_t * p4est
p4est->user_pointer is used internally
Definition: p8est_wrap.h:103
sc_refcount_t conn_rc
This reference counter is a workaround for internal use only.
Definition: p8est_wrap.h:94
The p8est forest datatype.
Definition: p8est.h:132