Exemplo n.º 1
0
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];
  }
Exemplo n.º 2
0
static void
p4est_points_init (p4est_t * p4est, p4est_topidx_t which_tree,
                   p4est_quadrant_t * quadrant)
{
  p4est_points_state_t *s = (p4est_points_state_t *) p4est->user_pointer;
  p4est_locidx_t     *qdata = (p4est_locidx_t *) quadrant->p.user_data;
  p4est_quadrant_t   *p;

  qdata[0] = s->current;
  while (s->current < s->num_points) {
    p = s->points + s->current;
    P4EST_ASSERT (p->p.which_tree >= which_tree);
    if (p->p.which_tree > which_tree) {
      break;
    }
    P4EST_ASSERT (p4est_quadrant_is_node (p, 1));
    P4EST_ASSERT (p4est_quadrant_compare (quadrant, p) < 0);
    if (!p4est_quadrant_contains_node (quadrant, p)) {
      break;
    }
    ++s->current;
  }
  qdata[1] = s->current;
}