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 P4EST_BITS_H 00032 #define P4EST_BITS_H 00033 00034 #include <p4est.h> 00035 00036 SC_EXTERN_C_BEGIN; 00037 00043 void p4est_quadrant_print (int log_priority, 00044 const p4est_quadrant_t * q); 00045 00049 int p4est_quadrant_is_equal (const p4est_quadrant_t * q1, 00050 const p4est_quadrant_t * q2); 00051 00056 int p4est_quadrant_overlaps (const p4est_quadrant_t * q1, 00057 const p4est_quadrant_t * q2); 00058 00063 int p4est_quadrant_is_equal_piggy (const p4est_quadrant_t * 00064 q1, 00065 const p4est_quadrant_t * 00066 q2); 00067 00074 int p4est_quadrant_compare (const void *v1, const void *v2); 00075 00082 int p4est_quadrant_disjoint (const void *v1, const void *v2); 00083 00090 int p4est_quadrant_compare_piggy (const void *v1, 00091 const void *v2); 00092 00098 int p4est_quadrant_compare_local_num (const void *v1, 00099 const void *v2); 00100 00104 int p4est_quadrant_equal_fn (const void *v1, const void *v2, 00105 const void *u); 00106 00109 unsigned p4est_quadrant_hash_fn (const void *v, const void *u); 00110 00116 int p4est_node_equal_piggy_fn (const void *v1, 00117 const void *v2, const void *u); 00118 00123 unsigned p4est_node_hash_piggy_fn (const void *v, const void *u); 00124 00129 void p4est_node_clamp_inside (const p4est_quadrant_t * n, 00130 p4est_quadrant_t * r); 00131 00135 void p4est_node_unclamp (p4est_quadrant_t * n); 00136 00142 void p4est_node_to_quadrant (const p4est_quadrant_t * n, 00143 int level, p4est_quadrant_t * q); 00144 00149 int p4est_quadrant_contains_node (const p4est_quadrant_t * q, 00150 const p4est_quadrant_t * n); 00151 00156 int p4est_quadrant_ancestor_id (const p4est_quadrant_t * q, 00157 int level); 00158 00162 int p4est_quadrant_child_id (const p4est_quadrant_t * q); 00163 00168 int p4est_quadrant_is_inside_root (const p4est_quadrant_t * 00169 q); 00170 00175 int p4est_quadrant_is_inside_3x3 (const p4est_quadrant_t * q); 00176 00181 int p4est_quadrant_is_outside_face (const p4est_quadrant_t * 00182 q); 00183 00188 int p4est_quadrant_is_outside_corner (const p4est_quadrant_t * 00189 q); 00190 00197 int p4est_quadrant_is_node (const p4est_quadrant_t * q, 00198 int inside); 00199 00204 int p4est_quadrant_is_valid (const p4est_quadrant_t * q); 00205 00210 int p4est_quadrant_is_extended (const p4est_quadrant_t * q); 00211 00217 int p4est_quadrant_is_sibling (const p4est_quadrant_t * q1, 00218 const p4est_quadrant_t * q2); 00219 00224 int p4est_quadrant_is_sibling_D (const p4est_quadrant_t * q1, 00225 const p4est_quadrant_t * q2); 00226 00229 int p4est_quadrant_is_family (const p4est_quadrant_t * q0, 00230 const p4est_quadrant_t * q1, 00231 const p4est_quadrant_t * q2, 00232 const p4est_quadrant_t * q3); 00233 00237 int p4est_quadrant_is_familyv (const p4est_quadrant_t q[]); 00238 00242 int p4est_quadrant_is_familypv (p4est_quadrant_t * q[]); 00243 00249 int p4est_quadrant_is_parent (const p4est_quadrant_t * q, 00250 const p4est_quadrant_t * r); 00251 00256 int p4est_quadrant_is_parent_D (const p4est_quadrant_t * q, 00257 const p4est_quadrant_t * r); 00258 00264 int p4est_quadrant_is_ancestor (const p4est_quadrant_t * q, 00265 const p4est_quadrant_t * r); 00266 00272 int p4est_quadrant_is_ancestor_D (const p4est_quadrant_t * q, 00273 const p4est_quadrant_t * r); 00274 00281 int p4est_quadrant_is_next (const p4est_quadrant_t * q, 00282 const p4est_quadrant_t * r); 00283 00288 int p4est_quadrant_is_next_D (const p4est_quadrant_t * q, 00289 const p4est_quadrant_t * r); 00290 00293 int p4est_quadrant_overlaps_tree (p4est_tree_t * tree, 00294 const p4est_quadrant_t * q); 00295 00298 int p4est_quadrant_is_inside_tree (p4est_tree_t * tree, 00299 const p4est_quadrant_t * 00300 q); 00301 00310 void p4est_quadrant_ancestor (const p4est_quadrant_t * q, 00311 int level, p4est_quadrant_t * r); 00312 00321 void p4est_quadrant_parent (const p4est_quadrant_t * q, 00322 p4est_quadrant_t * r); 00323 00330 void p4est_quadrant_sibling (const p4est_quadrant_t * q, 00331 p4est_quadrant_t * r, 00332 int sibling_id); 00333 00340 void p4est_quadrant_face_neighbor (const p4est_quadrant_t * q, 00341 int face, 00342 p4est_quadrant_t * r); 00343 00360 p4est_topidx_t p4est_quadrant_face_neighbor_extra (const p4est_quadrant_t 00361 * q, p4est_topidx_t t, 00362 int face, 00363 p4est_quadrant_t * r, 00364 int *nface, 00365 p4est_connectivity_t * 00366 conn); 00367 00381 void p4est_quadrant_half_face_neighbors (const p4est_quadrant_t 00382 * q, int face, 00383 p4est_quadrant_t n[], 00384 p4est_quadrant_t 00385 nur[]); 00386 00404 void p4est_quadrant_all_face_neighbors (const p4est_quadrant_t 00405 * q, int face, 00406 p4est_quadrant_t n[]); 00407 00414 void p4est_quadrant_corner_neighbor (const p4est_quadrant_t * 00415 q, int corner, 00416 p4est_quadrant_t * r); 00417 00432 void p4est_quadrant_corner_neighbor_extra (const 00433 p4est_quadrant_t * 00434 q, p4est_locidx_t t, 00435 int corner, 00436 sc_array_t * quads, 00437 sc_array_t * 00438 treeids, 00439 sc_array_t * 00440 ncorners, 00441 p4est_connectivity_t 00442 * conn); 00443 00450 void p4est_quadrant_half_corner_neighbor (const 00451 p4est_quadrant_t * q, 00452 int corner, 00453 p4est_quadrant_t * 00454 r); 00455 00462 void p4est_quadrant_corner_node (const p4est_quadrant_t * q, 00463 int corner, 00464 p4est_quadrant_t * r); 00465 00472 void p4est_quadrant_children (const p4est_quadrant_t * q, 00473 p4est_quadrant_t * c0, 00474 p4est_quadrant_t * c1, 00475 p4est_quadrant_t * c2, 00476 p4est_quadrant_t * c3); 00477 00484 void p4est_quadrant_childrenv (const p4est_quadrant_t * q, 00485 p4est_quadrant_t c[]); 00486 00493 void p4est_quadrant_childrenpv (const p4est_quadrant_t * q, 00494 p4est_quadrant_t * c[]); 00495 00501 void p4est_quadrant_first_descendant (const p4est_quadrant_t * 00502 q, p4est_quadrant_t * fd, 00503 int level); 00504 00510 void p4est_quadrant_last_descendant (const p4est_quadrant_t * 00511 q, p4est_quadrant_t * ld, 00512 int level); 00513 00521 void p4est_quadrant_corner_descendant (const p4est_quadrant_t * 00522 q, p4est_quadrant_t * r, 00523 int c, int level); 00524 00533 void p4est_nearest_common_ancestor (const p4est_quadrant_t * 00534 q1, 00535 const p4est_quadrant_t * 00536 q2, p4est_quadrant_t * r); 00537 00542 void p4est_nearest_common_ancestor_D (const p4est_quadrant_t * 00543 q1, 00544 const p4est_quadrant_t * 00545 q2, 00546 p4est_quadrant_t * r); 00547 00558 void p4est_quadrant_transform_face (const p4est_quadrant_t * q, 00559 p4est_quadrant_t * r, 00560 const int ftransform[]); 00561 00564 int p4est_quadrant_touches_corner (const p4est_quadrant_t * q, 00565 int corner, int inside); 00566 00572 void p4est_quadrant_transform_corner (p4est_quadrant_t * q, 00573 int icorner, int inside); 00574 00580 void p4est_quadrant_shift_corner (const p4est_quadrant_t * q, 00581 p4est_quadrant_t * r, 00582 int corner); 00583 00590 uint64_t p4est_quadrant_linear_id (const p4est_quadrant_t * 00591 quadrant, int level); 00592 00599 void p4est_quadrant_set_morton (p4est_quadrant_t * quadrant, 00600 int level, uint64_t id); 00601 00602 SC_EXTERN_C_END; 00603 00604 #endif /* !P4EST_BITS_H */