t8  1.2.0
t8code is a C library to manage a forest of adaptive space-trees of general element classes in parallel.
t8_dtri_bits.h
Go to the documentation of this file.
1 /*
2  This file is part of t8code.
3  t8code is a C library to manage a collection (a forest) of multiple
4  connected adaptive space-trees of general element classes in parallel.
5 
6  Copyright (C) 2015 the developers
7 
8  t8code is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12 
13  t8code is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with t8code; if not, write to the Free Software Foundation, Inc.,
20  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 */
22 
27 #ifndef T8_DTRI_BITS_H
28 #define T8_DTRI_BITS_H
29 
30 #include <t8_element.h>
32 
33 T8_EXTERN_C_BEGIN ();
34 
40 void t8_dtri_copy (const t8_dtri_t *t, t8_dtri_t *dest);
41 
47 int t8_dtri_compare (const t8_dtri_t *t1,
48  const t8_dtri_t *t2);
49 
56 void t8_dtri_parent (const t8_dtri_t *t, t8_dtri_t *parent);
57 
66 void t8_dtri_ancestor (const t8_dtri_t *t, int level,
67  t8_dtri_t *ancestor);
68 
76  const int vertex,
77  t8_dtri_coord_t coordinates[2]);
78 
87  const int vertex,
88  double coordinates[2]);
89 
96  t8_dtri_coord_t
97  coordinates[3][2]);
98 
105 void t8_dtri_child (const t8_dtri_t *t,
106  int childid, t8_dtri_t *child);
107 
113 void t8_dtri_childrenpv (const t8_dtri_t *t,
115 
120 int t8_dtri_is_familypv (const t8_dtri_t *f[]);
121 
128 void t8_dtri_sibling (const t8_dtri_t *elem,
129  int sibid, t8_dtri_t *sibling);
130 
137 int t8_dtri_face_neighbour (const t8_dtri_t *t, int face,
138  t8_dtri_t *n);
139 
147  const t8_dtri_t *t2,
148  t8_dtri_t *r);
149 
160 void t8_dtri_children_at_face (const t8_dtri_t *tri,
161  int face,
162  t8_dtri_t *children[],
163  int num_children,
164  int *child_indices);
165 
174 int t8_dtri_face_child_face (const t8_dtri_t *triangle,
175  int face, int face_child);
176 
186 int t8_dtri_face_parent_face (const t8_dtri_t *triangle,
187  int face);
188 
199 int t8_dtri_tree_face (t8_dtri_t *t, int face);
200 
211 int t8_dtri_root_face_to_face (t8_dtri_t *t, int root_face);
212 
234 void t8_dtri_transform_face (const t8_dtri_t *trianglein,
235  t8_dtri_t *triangle2,
236  int orientation, int sign,
237  int is_smaller_face);
238 
246 
252 int t8_dtri_is_root_boundary (const t8_dtri_t *t, int face);
253 
257 int t8_dtri_is_equal (const t8_dtri_t *t1,
258  const t8_dtri_t *t2);
259 
265 int t8_dtri_is_sibling (const t8_dtri_t *t1,
266  const t8_dtri_t *t2);
267 
273 int t8_dtri_is_parent (const t8_dtri_t *t,
274  const t8_dtri_t *c);
275 
281 int t8_dtri_is_ancestor (const t8_dtri_t *t,
282  const t8_dtri_t *c);
283 
290 t8_linearidx_t t8_dtri_linear_id (const t8_dtri_t *t, int level);
291 
302  t8_linearidx_t id,
303  const int start_level,
304  const int end_level,
305  t8_dtri_type_t
306  parenttype);
307 
315  int level);
316 
320 void t8_dtri_init_root (t8_dtri_t *t);
321 
328 void t8_dtri_successor (const t8_dtri_t *t, t8_dtri_t *s,
329  int level);
330 
338 void t8_dtri_first_descendant (const t8_dtri_t *t,
339  t8_dtri_t *s, int level);
340 
348 void t8_dtri_last_descendant (const t8_dtri_t *t,
349  t8_dtri_t *s, int level);
350 
359 void t8_dtri_corner_descendant (const t8_dtri_t *t,
360  t8_dtri_t *s, int corner,
361  int level);
362 
369 void t8_dtri_predecessor (const t8_dtri_t *t, t8_dtri_t *s,
370  int level);
371 
378 int t8_dtri_ancestor_id (const t8_dtri_t *t, int level);
379 
385 int t8_dtri_child_id (const t8_dtri_t *t);
386 
391 int t8_dtri_get_level (const t8_dtri_t *t);
392 
399 int t8_dtri_is_valid (const t8_dtri_t *t);
400 
404 void t8_dtri_debug_print (const t8_dtri_t *t);
405 
406 #ifdef T8_ENABLE_DEBUG
410 void t8_dtri_init (t8_dtri_t *t);
411 #endif
412 
413 T8_EXTERN_C_END ();
414 
415 #endif /* T8_DTRI_BITS_H */
Definition: t8_dtri.h:66
uint64_t t8_linearidx_t
A type for storing SFC indices.
Definition: t8.h:114
TODO: document this.
#define T8_DTRI_CHILDREN
The number of children that a triangle is refined into.
Definition: t8_dtri.h:35
int t8_dtri_compare(const t8_dtri_t *t1, const t8_dtri_t *t2)
Compare two triangle in their linear order.
Definition: t8_dtri_bits.c:113
int t8_dtri_face_child_face(const t8_dtri_t *triangle, int face, int face_child)
Given a face of a triangle and a child number of a child of that face, return the face number of the ...
Definition: t8_dtri_bits.c:848
void t8_dtri_ancestor(const t8_dtri_t *t, int level, t8_dtri_t *ancestor)
Compute the ancestor of a triangle at a given level.
Definition: t8_dtri_bits.c:161
void t8_dtri_init_linear_id_with_level(t8_dtri_t *t, t8_linearidx_t id, const int start_level, const int end_level, t8_dtri_type_t parenttype)
Same as init_linear_id, but we only consider the subtree.
Definition: t8_dtri_bits.c:1392
int t8_dtri_ancestor_id(const t8_dtri_t *t, int level)
Compute the position of the ancestor of this child at level level within its siblings.
Definition: t8_dtri_bits.c:1603
int t8_dtri_face_neighbour(const t8_dtri_t *t, int face, t8_dtri_t *n)
Compute the face neighbor of a triangle.
Definition: t8_dtri_bits.c:611
void t8_dtri_copy(const t8_dtri_t *t, t8_dtri_t *dest)
Copy the values of one triangle to another.
Definition: t8_dtri_bits.c:103
void t8_dtri_predecessor(const t8_dtri_t *t, t8_dtri_t *s, int level)
Computes the predecessor of a triangle in a uniform grid of level level.
Definition: t8_dtri_bits.c:1596
t8_linearidx_t t8_dtri_linear_id(const t8_dtri_t *t, int level)
Computes the linear position of a triangle in a uniform grid.
Definition: t8_dtri_bits.c:1358
void t8_dtri_init_linear_id(t8_dtri_t *t, t8_linearidx_t id, int level)
Initialize a triangle as the triangle with a given global id in a uniform refinement of a given level...
Definition: t8_dtri_bits.c:1429
int t8_dtri_child_id(const t8_dtri_t *t)
Compute the position of the ancestor of this child at level level within its siblings.
Definition: t8_dtri_bits.c:1617
int t8_dtri_face_parent_face(const t8_dtri_t *triangle, int face)
Given a face of an triangle return the face number of the parent of the triangle that matches the tri...
Definition: t8_dtri_bits.c:884
int t8_dtri_is_inside_root(t8_dtri_t *t)
Test if a triangle lies inside of the root triangle, that is the triangle of level 0,...
Definition: t8_dtri_bits.c:1038
int t8_dtri_is_sibling(const t8_dtri_t *t1, const t8_dtri_t *t2)
Test if two triangles are siblings.
Definition: t8_dtri_bits.c:1146
int t8_dtri_is_familypv(const t8_dtri_t *f[])
Check whether a collection of eight triangles is a family in Morton order.
Definition: t8_dtri_bits.c:564
void t8_dtri_nearest_common_ancestor(const t8_dtri_t *t1, const t8_dtri_t *t2, t8_dtri_t *r)
Computes the nearest common ancestor of two triangles in the same tree.
Definition: t8_dtri_bits.c:686
void t8_dtri_compute_vertex_ref_coords(const t8_dtri_t *elem, const int vertex, double coordinates[2])
Compute the reference coordinates of a vertex of a triangle when the tree (level 0 triangle) is embed...
void t8_dtri_init_root(t8_dtri_t *t)
Initialize a triangle as the root triangle (type 0 at level 0)
Definition: t8_dtri_bits.c:1466
void t8_dtri_last_descendant(const t8_dtri_t *t, t8_dtri_t *s, int level)
Compute the last descendant of a triangle at a given level.
Definition: t8_dtri_bits.c:1553
int t8_dtri_tree_face(t8_dtri_t *t, int face)
Given a triangle and a face of this triangle.
Definition: t8_dtri_bits.c:768
int t8_dtri_is_root_boundary(const t8_dtri_t *t, int face)
Compute whether a given triangle shares a given face with its root tree.
Definition: t8_dtri_bits.c:1076
void t8_dtri_first_descendant(const t8_dtri_t *t, t8_dtri_t *s, int level)
Compute the first descendant of a triangle at a given level.
Definition: t8_dtri_bits.c:1541
void t8_dtri_childrenpv(const t8_dtri_t *t, t8_dtri_t *c[T8_DTRI_CHILDREN])
Compute the 4 children of a triangle, array version.
Definition: t8_dtri_bits.c:507
void t8_dtri_successor(const t8_dtri_t *t, t8_dtri_t *s, int level)
Computes the successor of a triangle in a uniform grid of level level.
Definition: t8_dtri_bits.c:1534
void t8_dtri_compute_coords(const t8_dtri_t *elem, const int vertex, t8_dtri_coord_t coordinates[2])
Compute the coordinates of a vertex of a triangle.
void t8_dtri_compute_all_coords(const t8_dtri_t *elem, t8_dtri_coord_t coordinates[3][2])
Compute the coordinates of the four vertices of a triangle.
void t8_dtri_corner_descendant(const t8_dtri_t *t, t8_dtri_t *s, int corner, int level)
Compute the descendant of a triangle in a given corner.
Definition: t8_dtri_bits.c:1565
int t8_dtri_is_ancestor(const t8_dtri_t *t, const t8_dtri_t *c)
Test if a triangle is an ancestor of another triangle.
Definition: t8_dtri_bits.c:1199
void t8_dtri_child(const t8_dtri_t *t, int childid, t8_dtri_t *child)
Compute the childid-th child in Morton order of a triangle.
Definition: t8_dtri_bits.c:466
int t8_dtri_is_valid(const t8_dtri_t *t)
Query whether all entries of a triangle are in valid ranges.
Definition: t8_dtri_bits.c:1629
void t8_dtri_transform_face(const t8_dtri_t *trianglein, t8_dtri_t *triangle2, int orientation, int sign, int is_smaller_face)
Suppose we have two trees that share a common triangle f.
Definition: t8_dtri_bits.c:957
void t8_dtri_sibling(const t8_dtri_t *elem, int sibid, t8_dtri_t *sibling)
Compute a specific sibling of a triangle.
Definition: t8_dtri_bits.c:600
void t8_dtri_debug_print(const t8_dtri_t *t)
Print a triangle.
Definition: t8_dtri_bits.c:1663
int t8_dtri_is_parent(const t8_dtri_t *t, const t8_dtri_t *c)
Test if a triangle is the parent of another triangle.
Definition: t8_dtri_bits.c:1183
int t8_dtri_root_face_to_face(t8_dtri_t *t, int root_face)
Given a triangle and a face of the root triangle.
Definition: t8_dtri_bits.c:807
int t8_dtri_get_level(const t8_dtri_t *t)
Return the level of a triangle.
Definition: t8_dtri_bits.c:1623
void t8_dtri_parent(const t8_dtri_t *t, t8_dtri_t *parent)
Compute the parent of a triangle.
Definition: t8_dtri_bits.c:134
void t8_dtri_children_at_face(const t8_dtri_t *tri, int face, t8_dtri_t *children[], int num_children, int *child_indices)
Given a triangle and a face of the triangle, compute all children of the triangle that touch the face...
Definition: t8_dtri_bits.c:730
int t8_dtri_is_equal(const t8_dtri_t *t1, const t8_dtri_t *t2)
Test if two triangles have the same coordinates, type and level.
Definition: t8_dtri_bits.c:1133
This file defines basic operations on an element in a refinement tree.