p4est  1.0
src/p8est_bits.h
Go to the documentation of this file.
00001 /*
00002   This file is part of p4est.
00003   p4est is a C library to manage a collection (a forest) of multiple
00004   connected adaptive quadtrees or octrees in parallel.
00005 
00006   Copyright (C) 2010 The University of Texas System
00007   Written by Carsten Burstedde, Lucas C. Wilcox, and Tobin Isaac
00008 
00009   p4est is free software; you can redistribute it and/or modify
00010   it under the terms of the GNU General Public License as published by
00011   the Free Software Foundation; either version 2 of the License, or
00012   (at your option) any later version.
00013 
00014   p4est is distributed in the hope that it will be useful,
00015   but WITHOUT ANY WARRANTY; without even the implied warranty of
00016   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017   GNU General Public License for more details.
00018 
00019   You should have received a copy of the GNU General Public License
00020   along with p4est; if not, write to the Free Software Foundation, Inc.,
00021   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00022 */
00023 
00031 #ifndef P8EST_BITS_H
00032 #define P8EST_BITS_H
00033 
00034 #include <p8est.h>
00035 
00036 SC_EXTERN_C_BEGIN;
00037 
00043 void                p8est_quadrant_print (int log_priority,
00044                                           const p8est_quadrant_t * q);
00045 
00049 int                 p8est_quadrant_is_equal (const p8est_quadrant_t * q1,
00050                                              const p8est_quadrant_t * q2);
00051 
00056 int                 p8est_quadrant_overlaps (const p8est_quadrant_t * q1,
00057                                              const p8est_quadrant_t * q2);
00058 
00063 int                 p8est_quadrant_is_equal_piggy (const p8est_quadrant_t *
00064                                                    q1,
00065                                                    const p8est_quadrant_t *
00066                                                    q2);
00067 
00074 int                 p8est_quadrant_compare (const void *v1, const void *v2);
00075 
00082 int                 p8est_quadrant_disjoint (const void *v1, const void *v2);
00083 
00090 int                 p8est_quadrant_compare_piggy (const void *v1,
00091                                                   const void *v2);
00092 
00098 int                 p8est_quadrant_compare_local_num (const void *v1,
00099                                                       const void *v2);
00100 
00104 int                 p8est_quadrant_equal_fn (const void *v1, const void *v2,
00105                                              const void *u);
00106 
00109 unsigned            p8est_quadrant_hash_fn (const void *v, const void *u);
00110 
00116 int                 p8est_node_equal_piggy_fn (const void *v1,
00117                                                const void *v2, const void *u);
00118 
00123 unsigned            p8est_node_hash_piggy_fn (const void *v, const void *u);
00124 
00129 void                p8est_node_clamp_inside (const p8est_quadrant_t * n,
00130                                              p8est_quadrant_t * r);
00131 
00135 void                p8est_node_unclamp (p8est_quadrant_t * n);
00136 
00142 void                p8est_node_to_quadrant (const p8est_quadrant_t * n,
00143                                             int level, p8est_quadrant_t * q);
00144 
00149 int                 p8est_quadrant_contains_node (const p8est_quadrant_t * q,
00150                                                   const p8est_quadrant_t * n);
00151 
00156 int                 p8est_quadrant_ancestor_id (const p8est_quadrant_t * q,
00157                                                 int level);
00158 
00162 int                 p8est_quadrant_child_id (const p8est_quadrant_t * q);
00163 
00168 int                 p8est_quadrant_is_inside_root (const p8est_quadrant_t *
00169                                                    q);
00170 
00175 int                 p8est_quadrant_is_inside_3x3 (const p8est_quadrant_t * q);
00176 
00181 int                 p8est_quadrant_is_outside_face (const p8est_quadrant_t *
00182                                                     q);
00183 
00188 int                 p8est_quadrant_is_outside_edge (const p8est_quadrant_t *
00189                                                     q);
00190 
00197 int                 p8est_quadrant_is_outside_edge_extra (const
00198                                                           p8est_quadrant_t *
00199                                                           q, int *edge);
00200 
00205 int                 p8est_quadrant_is_outside_corner (const p8est_quadrant_t *
00206                                                       q);
00207 
00214 int                 p8est_quadrant_is_node (const p8est_quadrant_t * q,
00215                                             int inside);
00216 
00221 int                 p8est_quadrant_is_valid (const p8est_quadrant_t * q);
00222 
00227 int                 p8est_quadrant_is_extended (const p8est_quadrant_t * q);
00228 
00234 int                 p8est_quadrant_is_sibling (const p8est_quadrant_t * q1,
00235                                                const p8est_quadrant_t * q2);
00236 
00241 int                 p8est_quadrant_is_sibling_D (const p8est_quadrant_t * q1,
00242                                                  const p8est_quadrant_t * q2);
00243 
00246 int                 p8est_quadrant_is_family (const p8est_quadrant_t * q0,
00247                                               const p8est_quadrant_t * q1,
00248                                               const p8est_quadrant_t * q2,
00249                                               const p8est_quadrant_t * q3,
00250                                               const p8est_quadrant_t * q4,
00251                                               const p8est_quadrant_t * q5,
00252                                               const p8est_quadrant_t * q6,
00253                                               const p8est_quadrant_t * q7);
00254 
00258 int                 p8est_quadrant_is_familyv (const p8est_quadrant_t q[]);
00259 
00263 int                 p8est_quadrant_is_familypv (p8est_quadrant_t * q[]);
00264 
00270 int                 p8est_quadrant_is_parent (const p8est_quadrant_t * q,
00271                                               const p8est_quadrant_t * r);
00272 
00277 int                 p8est_quadrant_is_parent_D (const p8est_quadrant_t * q,
00278                                                 const p8est_quadrant_t * r);
00279 
00285 int                 p8est_quadrant_is_ancestor (const p8est_quadrant_t * q,
00286                                                 const p8est_quadrant_t * r);
00287 
00293 int                 p8est_quadrant_is_ancestor_D (const p8est_quadrant_t * q,
00294                                                   const p8est_quadrant_t * r);
00295 
00302 int                 p8est_quadrant_is_next (const p8est_quadrant_t * q,
00303                                             const p8est_quadrant_t * r);
00304 
00309 int                 p8est_quadrant_is_next_D (const p8est_quadrant_t * q,
00310                                               const p8est_quadrant_t * r);
00311 
00314 int                 p8est_quadrant_overlaps_tree (p8est_tree_t * tree,
00315                                                   const p8est_quadrant_t * q);
00316 
00319 int                 p8est_quadrant_is_inside_tree (p8est_tree_t * tree,
00320                                                    const p8est_quadrant_t *
00321                                                    q);
00322 
00331 void                p8est_quadrant_ancestor (const p8est_quadrant_t * q,
00332                                              int level, p8est_quadrant_t * r);
00333 
00342 void                p8est_quadrant_parent (const p8est_quadrant_t * q,
00343                                            p8est_quadrant_t * r);
00344 
00351 void                p8est_quadrant_sibling (const p8est_quadrant_t * q,
00352                                             p8est_quadrant_t * r,
00353                                             int sibling_id);
00354 
00361 void                p8est_quadrant_face_neighbor (const p8est_quadrant_t * q,
00362                                                   int face,
00363                                                   p8est_quadrant_t * r);
00364 
00381 p4est_locidx_t      p8est_quadrant_face_neighbor_extra (const p8est_quadrant_t
00382                                                         * q, p4est_topidx_t t,
00383                                                         int face,
00384                                                         p8est_quadrant_t * r,
00385                                                         int *nface,
00386                                                         p8est_connectivity_t *
00387                                                         conn);
00388 
00402 void                p8est_quadrant_half_face_neighbors (const p8est_quadrant_t
00403                                                         * q, int face,
00404                                                         p8est_quadrant_t n[],
00405                                                         p8est_quadrant_t
00406                                                         nur[]);
00407 
00425 void                p8est_quadrant_all_face_neighbors (const p8est_quadrant_t
00426                                                        * q, int face,
00427                                                        p8est_quadrant_t n[]);
00428 
00435 void                p8est_quadrant_edge_neighbor (const p8est_quadrant_t * q,
00436                                                   int edge,
00437                                                   p8est_quadrant_t * r);
00438 
00455 void                p8est_quadrant_edge_neighbor_extra (const p8est_quadrant_t
00456                                                         * q, p4est_locidx_t t,
00457                                                         int edge, sc_array_t *
00458                                                         quads, sc_array_t *
00459                                                         treeids,
00460                                                         sc_array_t * nedges,
00461                                                         p8est_connectivity_t *
00462                                                         conn);
00463 
00470 void                p8est_quadrant_corner_neighbor (const p8est_quadrant_t *
00471                                                     q, int corner,
00472                                                     p8est_quadrant_t * r);
00473 
00488 void                p8est_quadrant_corner_neighbor_extra (const
00489                                                           p8est_quadrant_t *
00490                                                           q, p4est_locidx_t t,
00491                                                           int corner,
00492                                                           sc_array_t * quads,
00493                                                           sc_array_t *
00494                                                           treeids,
00495                                                           sc_array_t *
00496                                                           ncorners,
00497                                                           p8est_connectivity_t
00498                                                           * conn);
00499 
00506 void                p8est_quadrant_half_corner_neighbor (const
00507                                                          p8est_quadrant_t * q,
00508                                                          int corner,
00509                                                          p8est_quadrant_t *
00510                                                          r);
00511 
00518 void                p8est_quadrant_corner_node (const p8est_quadrant_t * q,
00519                                                 int corner,
00520                                                 p8est_quadrant_t * r);
00521 
00528 void                p8est_quadrant_children (const p8est_quadrant_t * q,
00529                                              p8est_quadrant_t * c0,
00530                                              p8est_quadrant_t * c1,
00531                                              p8est_quadrant_t * c2,
00532                                              p8est_quadrant_t * c3,
00533                                              p8est_quadrant_t * c4,
00534                                              p8est_quadrant_t * c5,
00535                                              p8est_quadrant_t * c6,
00536                                              p8est_quadrant_t * c7);
00537 
00544 void                p8est_quadrant_childrenv (const p8est_quadrant_t * q,
00545                                               p8est_quadrant_t c[]);
00546 
00553 void                p8est_quadrant_childrenpv (const p8est_quadrant_t * q,
00554                                                p8est_quadrant_t * c[]);
00555 
00561 void                p8est_quadrant_first_descendant (const p8est_quadrant_t *
00562                                                      q, p8est_quadrant_t * fd,
00563                                                      int level);
00564 
00570 void                p8est_quadrant_last_descendant (const p8est_quadrant_t *
00571                                                     q, p8est_quadrant_t * ld,
00572                                                     int level);
00573 
00581 void                p8est_quadrant_corner_descendant (const p8est_quadrant_t *
00582                                                       q, p8est_quadrant_t * r,
00583                                                       int c, int level);
00584 
00593 void                p8est_nearest_common_ancestor (const p8est_quadrant_t *
00594                                                    q1,
00595                                                    const p8est_quadrant_t *
00596                                                    q2, p8est_quadrant_t * r);
00597 
00602 void                p8est_nearest_common_ancestor_D (const p8est_quadrant_t *
00603                                                      q1,
00604                                                      const p8est_quadrant_t *
00605                                                      q2,
00606                                                      p8est_quadrant_t * r);
00607 
00617 void                p8est_quadrant_transform_face (const p8est_quadrant_t * q,
00618                                                    p8est_quadrant_t * r,
00619                                                    const int ftransform[]);
00620 
00623 int                 p8est_quadrant_touches_edge (const p8est_quadrant_t * q,
00624                                                  int edge, int inside);
00625 
00633 void                p8est_quadrant_transform_edge (const p8est_quadrant_t * q,
00634                                                    p8est_quadrant_t * r,
00635                                                    const p8est_edge_info_t *
00636                                                    ei,
00637                                                    const
00638                                                    p8est_edge_transform_t *
00639                                                    et, int inside);
00640 
00658 void                p8est_quadrant_shift_edge (const p8est_quadrant_t * q,
00659                                                p8est_quadrant_t * r,
00660                                                p8est_quadrant_t * rup,
00661                                                p8est_quadrant_t * rdown,
00662                                                int edge);
00663 
00666 int                 p8est_quadrant_touches_corner (const p8est_quadrant_t * q,
00667                                                    int corner, int inside);
00668 
00674 void                p8est_quadrant_transform_corner (p8est_quadrant_t * r,
00675                                                      int corner, int inside);
00676 
00682 void                p8est_quadrant_shift_corner (const p8est_quadrant_t * q,
00683                                                  p8est_quadrant_t * r,
00684                                                  int corner);
00685 
00692 uint64_t            p8est_quadrant_linear_id (const p8est_quadrant_t *
00693                                               quadrant, int level);
00694 
00701 void                p8est_quadrant_set_morton (p8est_quadrant_t * quadrant,
00702                                                int level, uint64_t id);
00703 
00704 SC_EXTERN_C_END;
00705 
00706 #endif /* !P8EST_BITS_H */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines