static int refine_fn (p4est_t * p4est, p4est_topidx_t which_tree, p4est_quadrant_t * quadrant) { int cid; if ((int) quadrant->level >= refine_level) return 0; if (which_tree == 2 || which_tree == 5) return 0; cid = p4est_quadrant_child_id (quadrant); if (cid == 0 || cid == 1 || cid == 6) return 1; if (quadrant->x >= P4EST_LAST_OFFSET (2) #ifdef P4_TO_P8 && quadrant->z >= P4EST_LAST_OFFSET (2) #endif ) { return 1; } return 0; }
static int refine_normal (p4est_t * p4est, p4est_topidx_t which_tree, p4est_quadrant_t * quadrant) { if ((int) quadrant->level >= (refine_level - (int) (which_tree % 3))) { return 0; } if (quadrant->level == 1 && p4est_quadrant_child_id (quadrant) == 3) { return 1; } if (quadrant->x == P4EST_LAST_OFFSET (2) && quadrant->y == P4EST_LAST_OFFSET (2)) { return 1; } #ifndef P4_TO_P8 if (quadrant->x >= P4EST_QUADRANT_LEN (2)) { return 0; } #else if (quadrant->z >= P8EST_QUADRANT_LEN (2)) { return 0; } #endif return 1; }
/** For a quadrant that touches a tree face with a corner inside the face, * get the number of the touching face. */ static int tree_face_quadrant_corner_face (const p4est_quadrant_t * q, int corner) { int which; p4est_qcoord_t end = P4EST_LAST_OFFSET (q->level); P4EST_ASSERT (p4est_quadrant_is_valid (q)); P4EST_ASSERT (0 <= corner && corner < P4EST_CHILDREN); which = corner & 1; if (q->x == (which ? end : 0)) { return which; } which = corner & 2; if (q->y == (which ? end : 0)) { return 2 + (which >> 1); } #ifdef P4_TO_P8 which = corner & 4; if (q->z == (which ? end : 0)) { return 4 + (which >> 2); } #endif SC_ABORT_NOT_REACHED (); }
static int refine_fn (p4est_t * p4est, p4est_topidx_t which_tree, p4est_quadrant_t * quadrant) { if (quadrant->level >= (refine_level - (which_tree % 3))) { return 0; } if (quadrant->level == 1 && p4est_quadrant_child_id (quadrant) == 3) { return 1; } if (quadrant->x == P4EST_LAST_OFFSET (2) && quadrant->y == P4EST_LAST_OFFSET (2)) { return 1; } if (quadrant->x >= P4EST_QUADRANT_LEN (2)) { return 0; } return 1; }
static int refine_fn (p4est_t * p4est, p4est_topidx_t which_tree, p4est_quadrant_t * quadrant) { if (quadrant->level >= 6) { return 0; } #ifdef P4_TO_P8 if (quadrant->level >= 5 && quadrant->z <= P4EST_QUADRANT_LEN (3)) { return 0; } #endif if (quadrant->x == P4EST_LAST_OFFSET (2) && quadrant->y == P4EST_LAST_OFFSET (2)) { return 1; } if (quadrant->x >= P4EST_QUADRANT_LEN (2)) { return 0; } return 1; }
static int refine_fn (p4est_t * p4est, p4est_topidx_t which_tree, p4est_quadrant_t * quadrant) { int cid; if (which_tree == 2 || which_tree == 3) { return 0; } cid = p4est_quadrant_child_id (quadrant); if (cid == P4EST_CHILDREN - 1 || (quadrant->x >= P4EST_LAST_OFFSET (P4EST_MAXLEVEL - 2) && quadrant->y >= P4EST_LAST_OFFSET (P4EST_MAXLEVEL - 2) #ifdef P4_TO_P8 && quadrant->z >= P4EST_LAST_OFFSET (P4EST_MAXLEVEL - 2) #endif )) { return 1; } if ((int) quadrant->level >= (refine_level - (int) (which_tree % 3))) { return 0; } if (quadrant->level == 1 && cid == 2) { return 1; } if (quadrant->x == P4EST_QUADRANT_LEN (2) && quadrant->y == P4EST_LAST_OFFSET (2)) { return 1; } if (quadrant->y >= P4EST_QUADRANT_LEN (2)) { return 0; } return 1; }
int p8est_quadrant_touches_edge (const p4est_quadrant_t * q, int edge, int inside) { int quad_contact[P4EST_FACES]; int axis, side, incount; p4est_qcoord_t lower, upper; P4EST_ASSERT (0 <= edge && edge < 12); axis = edge / 4; if (q->level == P4EST_MAXLEVEL) { P4EST_ASSERT (p4est_quadrant_is_node (q, inside)); lower = 0; upper = P4EST_ROOT_LEN - (int) inside; } else { if (!inside) { P4EST_ASSERT (p4est_quadrant_is_extended (q)); lower = -P4EST_QUADRANT_LEN (q->level); upper = P4EST_ROOT_LEN; } else { P4EST_ASSERT (p4est_quadrant_is_valid (q)); lower = 0; upper = P4EST_LAST_OFFSET (q->level); } } quad_contact[0] = (q->x == lower); quad_contact[1] = (q->x == upper); quad_contact[2] = (q->y == lower); quad_contact[3] = (q->y == upper); quad_contact[4] = (q->z == lower); quad_contact[5] = (q->z == upper); incount = 0; if (axis != 0) { side = edge & 1; incount += quad_contact[side]; } if (axis != 1) { side = (axis == 0) ? (edge & 1) : ((edge >> 1) & 1); incount += quad_contact[2 + side]; }