p4est
1.0
|
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 */