static void test_coarsen_delay (p4est_wrap_t * wrap) { p4est_locidx_t jl; p4est_wrap_leaf_t *leaf; p4est_wrap_t *copy1, *copy2; p4est_wrap_set_coarsen_delay (wrap, 2, 0); for (jl = 0, leaf = p4est_wrap_leaf_first (wrap, 1); leaf != NULL; jl++, leaf = p4est_wrap_leaf_next (leaf)) { if (leaf->which_quad % 4 == 0) { p4est_wrap_mark_refine (wrap, leaf->which_tree, leaf->which_quad); } } copy1 = p4est_wrap_new_copy (wrap, 17, NULL, NULL); copy2 = p4est_wrap_new_copy (copy1, 0, NULL, NULL); wrap_adapt_partition (wrap, 1); /* copies must be destroyed before the original is destroyed, in any order */ p4est_wrap_destroy (copy1); for (jl = 0, leaf = p4est_wrap_leaf_first (wrap, 1); leaf != NULL; jl++, leaf = p4est_wrap_leaf_next (leaf)) { p4est_wrap_mark_coarsen (wrap, leaf->which_tree, leaf->which_quad); } wrap_adapt_partition (wrap, 1); /* copies must be destroyed before the original is destroyed, anywhere */ p4est_wrap_destroy (copy2); }
int main (int argc, char **argv) { int mpiret; int changed; int loop; #ifdef P4EST_ENABLE_DEBUG int lp = SC_LP_DEFAULT; #else int lp = SC_LP_PRODUCTION; #endif p4est_locidx_t jl; p4est_wrap_leaf_t *leaf; p4est_ghost_t *ghost; p4est_mesh_t *mesh; sc_MPI_Comm mpicomm; p4est_wrap_t *wrap; mpiret = sc_MPI_Init (&argc, &argv); SC_CHECK_MPI (mpiret); mpicomm = sc_MPI_COMM_WORLD; sc_init (mpicomm, 0, 0, NULL, lp); p4est_init (NULL, lp); #ifndef P4_TO_P8 wrap = p4est_wrap_new_rotwrap (mpicomm, 0); #else wrap = p8est_wrap_new_rotwrap (mpicomm, 0); #endif ghost = p4est_wrap_get_ghost (wrap); SC_CHECK_ABORT (ghost != NULL, "Get ghost"); ghost = NULL; mesh = p4est_wrap_get_mesh (wrap); SC_CHECK_ABORT (mesh != NULL, "Get mesh"); mesh = NULL; for (loop = 0; loop < 3; ++loop) { /* mark for refinement */ for (jl = 0, leaf = p4est_wrap_leaf_first (wrap); leaf != NULL; jl++, leaf = p4est_wrap_leaf_next (leaf)) { if (leaf->which_quad % 3 == 0) { p4est_wrap_mark_refine (wrap, leaf->which_tree, leaf->which_quad); } } SC_CHECK_ABORT (jl == wrap->p4est->local_num_quadrants, "Iterator"); changed = wrap_adapt_partition (wrap, 1); SC_CHECK_ABORT (changed, "Wrap refine"); } for (loop = 0; loop < 2; ++loop) { /* mark some elements for coarsening that does not effect anything */ for (jl = 0, leaf = p4est_wrap_leaf_first (wrap); leaf != NULL; jl++, leaf = p4est_wrap_leaf_next (leaf)) { if (leaf->which_quad % 5 == 0) { p4est_wrap_mark_refine (wrap, leaf->which_tree, leaf->which_quad); p4est_wrap_mark_coarsen (wrap, leaf->which_tree, leaf->which_quad); } } SC_CHECK_ABORT (jl == wrap->p4est->local_num_quadrants, "Iterator"); changed = wrap_adapt_partition (wrap, 0); SC_CHECK_ABORT (!changed, "Wrap noop"); } for (loop = 0; loop < 2; ++loop) { /* mark for coarsening */ for (jl = 0, leaf = p4est_wrap_leaf_first (wrap); leaf != NULL; jl++, leaf = p4est_wrap_leaf_next (leaf)) { if ((leaf->which_quad / 13) % 17 != 3) { p4est_wrap_mark_coarsen (wrap, leaf->which_tree, leaf->which_quad); } } SC_CHECK_ABORT (jl == wrap->p4est->local_num_quadrants, "Iterator"); (void) wrap_adapt_partition (wrap, 0); } p4est_wrap_destroy (wrap); sc_finalize (); mpiret = sc_MPI_Finalize (); SC_CHECK_MPI (mpiret); return 0; }