t8  1.2.0
t8code is a C library to manage a forest of adaptive space-trees of general element classes in parallel.
t8_default_vertex_cxx.hxx
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 
29 #ifndef T8_DEFAULT_VERTEX_CXX_H
30 #define T8_DEFAULT_VERTEX_CXX_H
31 
32 #include <t8_element.h>
33 #include <t8_element_cxx.hxx>
34 #include <t8_schemes/t8_default/t8_default_tri/t8_default_tri_cxx.hxx>
36 
38 {
39 public:
40 
43 
62  virtual void t8_element_new (int length, t8_element_t **elem) const;
63 
81  virtual void t8_element_init (int length, t8_element_t *elem,
82  int called_new) const;
83 
88  virtual int t8_element_level (const t8_element_t *elem) const;
89 
93  virtual int t8_element_maxlevel (void) const;
94 
102  virtual void t8_element_copy (const t8_element_t *source,
103  t8_element_t *dest) const;
104 
112  virtual int t8_element_compare (const t8_element_t *elem1,
113  const t8_element_t *elem2) const;
114 
127  virtual void t8_element_parent (const t8_element_t *elem,
128  t8_element_t *parent) const;
129 
141  virtual void t8_element_sibling (const t8_element_t *elem,
142  int sibid,
143  t8_element_t *sibling) const;
144 
149  virtual int t8_element_num_faces (const t8_element_t *elem) const;
150 
156  virtual int t8_element_max_num_faces (const t8_element_t *elem)
157  const;
158 
163  virtual int t8_element_num_children (const t8_element_t *elem)
164  const;
165 
171  virtual int t8_element_num_face_children (const t8_element_t *elem,
172  int face) const;
179  virtual int t8_element_get_face_corner (const t8_element_t *element,
180  int face, int corner) const
181  {
182  SC_ABORT_NOT_REACHED (); /* it is impossible to have a face of a vertex */
183  return 0; /* prevents compiler warning */
184  }
185 
192  virtual int t8_element_get_corner_face (const t8_element_t *element,
193  int corner, int face) const
194  {
195  SC_ABORT ("Not implemented.\n");
196  return 0; /* prevents compiler warning */
197  }
198 
204  virtual t8_eclass_t t8_element_child_eclass (int childid) const;
205 
215  virtual void t8_element_child (const t8_element_t *elem,
216  int childid,
217  t8_element_t *child) const;
218 
230  virtual void t8_element_children (const t8_element_t *elem,
231  int length,
232  t8_element_t *c[]) const;
233 
238  virtual int t8_element_child_id (const t8_element_t *elem) const;
239 
246  virtual int t8_element_ancestor_id (const t8_element_t *elem,
247  int level) const;
248 
255  virtual int t8_element_is_family (t8_element_t **fam) const;
256 
267  virtual void t8_element_nca (const t8_element_t *elem1,
268  const t8_element_t *elem2,
269  t8_element_t *nca) const;
270 
277  int face) const
278  {
279  SC_ABORT ("Not implemented.\n");
280  return T8_ECLASS_ZERO; /* prevents compiler warning */
281  }
282 
297  virtual void t8_element_children_at_face (const t8_element_t *elem,
298  int face,
299  t8_element_t *children[],
300  int num_children,
301  int *child_indices) const
302  {
303  SC_ABORT ("Not implemented.\n");
304  return; /* prevents compiler warning */
305  }
306 
327  virtual int t8_element_face_child_face (const t8_element_t *elem,
328  int face,
329  int face_child) const
330  {
331  SC_ABORT ("Not implemented.\n");
332  return 0; /* prevents compiler warning */
333  }
334 
345  virtual int t8_element_face_parent_face (const t8_element_t *elem,
346  int face) const
347  {
348  SC_ABORT ("Not implemented.\n");
349  return 0; /* prevents compiler warning */
350  }
351 
361  virtual int t8_element_tree_face (const t8_element_t *elem,
362  int face) const
363  {
364  SC_ABORT ("Not implemented.\n");
365  return 0; /* prevents compiler warning */
366  }
367 
389  virtual void t8_element_transform_face (const t8_element_t *elem1,
390  t8_element_t *elem2,
391  int orientation, int sign,
392  int is_smaller_face) const;
393 
407  virtual int t8_element_extrude_face (const t8_element_t *face,
408  const t8_eclass_scheme_c
409  *face_scheme,
410  t8_element_t *elem,
411  int root_face) const
412  {
413  SC_ABORT ("Not implemented.\n");
414  return 0; /* prevents compiler warning */
415  }
416 
426  *elem, int face,
428  *first_desc,
429  int level) const
430  {
431  SC_ABORT ("Not implemented.\n");
432  return; /* prevents compiler warning */
433  }
434 
444  *elem, int face,
446  *last_desc,
447  int level) const
448  {
449  SC_ABORT ("Not implemented.\n");
450  return; /* prevents compiler warning */
451  }
452 
462  virtual void t8_element_boundary_face (const t8_element_t *elem,
463  int face,
464  t8_element_t *boundary,
465  const t8_eclass_scheme_c
466  *boundary_scheme) const
467  {
468  SC_ABORT ("Not implemented.\n");
469  return; /* prevents compiler warning */
470  }
471 
477  virtual void t8_element_boundary (const t8_element_t *elem,
478  int min_dim, int length,
479  t8_element_t **boundary) const
480  {
481  SC_ABORT ("Not implemented.\n");
482  return; /* prevents compiler warning */
483  }
484 
490  virtual int t8_element_is_root_boundary (const t8_element_t *elem,
491  int face) const;
492 
509  *elem,
510  t8_element_t *neigh,
511  int face,
512  int *neigh_face) const
513  {
514  SC_ABORT ("Not implemented.\n");
515  return 0; /* prevents compiler warning */
516  }
517 
525  virtual void t8_element_set_linear_id (t8_element_t *elem,
526  int level,
527  t8_linearidx_t id) const;
528 
536  t8_element_t *elem,
537  int level) const;
538 
545  virtual void t8_element_first_descendant (const t8_element_t *elem,
546  t8_element_t *desc,
547  int level) const;
548 
555  virtual void t8_element_last_descendant (const t8_element_t *elem,
556  t8_element_t *desc,
557  int level) const;
558 
564  virtual void t8_element_successor (const t8_element_t *t,
565  t8_element_t *s, int level) const
566  {
567  SC_ABORT ("Not implemented.\n");
568  return; /* prevents compiler warning */
569  }
570 
581  virtual void t8_element_anchor (const t8_element_t *elem,
582  int anchor[3]) const;
583 
589  virtual int t8_element_root_len (const t8_element_t *elem) const;
590 
601  virtual void t8_element_vertex_coords (const t8_element_t *elem,
602  int vertex,
603  int coords[]) const;
604 
613  *elem,
614  const int vertex,
615  double coords[])
616  const;
617 
626  virtual void t8_element_reference_coords (const t8_element_t *elem,
627  const double *ref_coords,
628  const void *user_data,
629  double *out_coords)
630  const;
631 
636  virtual int t8_element_refines_irregular (void) const;
637 
638 #ifdef T8_ENABLE_DEBUG
653  virtual int t8_element_is_valid (const t8_element_t *t) const;
654 
662  virtual void t8_element_debug_print (const t8_element_t *elem) const;
663 #endif
664 };
665 
666 #endif /* !T8_DEFAULT_VERTEX_H */
Definition: t8_default_common_cxx.hxx:38
Definition: t8_default_vertex_cxx.hxx:38
virtual int t8_element_is_family(t8_element_t **fam) const
Query whether a given set of elements is a family or not.
Definition: t8_default_vertex_cxx.cxx:170
virtual void t8_element_child(const t8_element_t *elem, int childid, t8_element_t *child) const
Construct the child element of a given number.
Definition: t8_default_vertex_cxx.cxx:126
virtual void t8_element_sibling(const t8_element_t *elem, int sibid, t8_element_t *sibling) const
Compute a specific sibling of a given vertex element elem and store it in sibling.
Definition: t8_default_vertex_cxx.cxx:83
virtual int t8_element_num_faces(const t8_element_t *elem) const
Compute the number of faces of a given element.
Definition: t8_default_vertex_cxx.cxx:96
virtual void t8_element_vertex_reference_coords(const t8_element_t *elem, const int vertex, double coords[]) const
Compute the coordinates of a given element vertex inside a reference tree that is embedded into [0,...
Definition: t8_default_vertex_cxx.cxx:308
virtual void t8_element_last_descendant(const t8_element_t *elem, t8_element_t *desc, int level) const
Compute the last descendant of a given element.
Definition: t8_default_vertex_cxx.cxx:261
virtual int t8_element_root_len(const t8_element_t *elem) const
Compute the root length of a given element, that is the length of its level 0 ancestor.
Definition: t8_default_vertex_cxx.cxx:285
virtual void t8_element_parent(const t8_element_t *elem, t8_element_t *parent) const
Compute the parent of a given element elem and store it in parent.
Definition: t8_default_vertex_cxx.cxx:71
virtual int t8_element_level(const t8_element_t *elem) const
Return the refinement level of an element.
Definition: t8_default_vertex_cxx.cxx:37
virtual void t8_element_nca(const t8_element_t *elem1, const t8_element_t *elem2, t8_element_t *nca) const
Compute the nearest common ancestor of two elements.
Definition: t8_default_vertex_cxx.cxx:182
virtual void t8_element_children(const t8_element_t *elem, int length, t8_element_t *c[]) const
Construct all children of a given element.
Definition: t8_default_vertex_cxx.cxx:140
virtual t8_eclass_t t8_element_child_eclass(int childid) const
Return the type of each child in the ordering of the implementation.
Definition: t8_default_vertex_cxx.cxx:45
virtual int t8_element_ancestor_id(const t8_element_t *elem, int level) const
Compute the ancestor id of an element, that is the child id at a given level.
Definition: t8_default_vertex_cxx.cxx:163
virtual void t8_element_last_descendant_face(const t8_element_t *elem, int face, t8_element_t *last_desc, int level) const
Construct the last descendant of an element at a given level that touches a given face.
Definition: t8_default_vertex_cxx.hxx:443
virtual int t8_element_face_neighbor_inside(const t8_element_t *elem, t8_element_t *neigh, int face, int *neigh_face) const
Construct the face neighbor of a given element if this face neighbor is inside the root tree.
Definition: t8_default_vertex_cxx.hxx:508
virtual int t8_element_tree_face(const t8_element_t *elem, int face) const
Given an element and a face of this element.
Definition: t8_default_vertex_cxx.hxx:361
virtual void t8_element_boundary_face(const t8_element_t *elem, int face, t8_element_t *boundary, const t8_eclass_scheme_c *boundary_scheme) const
Construct the boundary element at a specific face.
Definition: t8_default_vertex_cxx.hxx:462
virtual void t8_element_first_descendant(const t8_element_t *elem, t8_element_t *desc, int level) const
Compute the first descendant of a given element.
Definition: t8_default_vertex_cxx.cxx:248
virtual void t8_element_vertex_coords(const t8_element_t *elem, int vertex, int coords[]) const
Compute the integer coordinates of a given element vertex.
Definition: t8_default_vertex_cxx.cxx:292
virtual int t8_element_compare(const t8_element_t *elem1, const t8_element_t *elem2) const
Compare two elements.
Definition: t8_default_vertex_cxx.cxx:62
virtual void t8_element_anchor(const t8_element_t *elem, int anchor[3]) const
Get the integer coordinates of the anchor node of an element.
Definition: t8_default_vertex_cxx.cxx:274
virtual t8_element_shape_t t8_element_face_shape(const t8_element_t *elem, int face) const
Compute the shape of the face of an element.
Definition: t8_default_vertex_cxx.hxx:276
virtual int t8_element_get_corner_face(const t8_element_t *element, int corner, int face) const
Return the face numbers of the faces sharing an element's corner.
Definition: t8_default_vertex_cxx.hxx:192
virtual void t8_element_reference_coords(const t8_element_t *elem, const double *ref_coords, const void *user_data, double *out_coords) const
Convert a point in the reference space of an element to a point in the reference space of the tree.
Definition: t8_default_vertex_cxx.cxx:324
virtual t8_linearidx_t t8_element_get_linear_id(const t8_element_t *elem, int level) const
Compute the linear id of a given element in a hypothetical uniform refinement of a given level.
Definition: t8_default_vertex_cxx.cxx:237
virtual void t8_element_successor(const t8_element_t *t, t8_element_t *s, int level) const
Construct the successor in a uniform refinement of a given element.
Definition: t8_default_vertex_cxx.hxx:564
virtual int t8_element_face_child_face(const t8_element_t *elem, int face, int face_child) const
Given a face of an element and a child number of a child of that face, return the face number of the ...
Definition: t8_default_vertex_cxx.hxx:327
virtual void t8_element_copy(const t8_element_t *source, t8_element_t *dest) const
Copy all entries of source to dest.
Definition: t8_default_vertex_cxx.cxx:53
virtual void t8_element_new(int length, t8_element_t **elem) const
Allocate memory for an array of vertices and initialize them.
Definition: t8_default_vertex_cxx.cxx:363
virtual void t8_element_set_linear_id(t8_element_t *elem, int level, t8_linearidx_t id) const
Initialize the entries of an allocated element according to a given linear id in a uniform refinement...
Definition: t8_default_vertex_cxx.cxx:225
virtual int t8_element_is_root_boundary(const t8_element_t *elem, int face) const
Compute whether a given element shares a given face with its root tree.
Definition: t8_default_vertex_cxx.cxx:214
virtual int t8_element_get_face_corner(const t8_element_t *element, int face, int corner) const
Return the corner number of an element's face corner.
Definition: t8_default_vertex_cxx.hxx:179
virtual void t8_element_children_at_face(const t8_element_t *elem, int face, t8_element_t *children[], int num_children, int *child_indices) const
Given an element and a face of the element, compute all children of the element that touch the face.
Definition: t8_default_vertex_cxx.hxx:297
virtual void t8_element_boundary(const t8_element_t *elem, int min_dim, int length, t8_element_t **boundary) const
Construct all codimension-one boundary elements of a given element.
Definition: t8_default_vertex_cxx.hxx:477
virtual void t8_element_first_descendant_face(const t8_element_t *elem, int face, t8_element_t *first_desc, int level) const
Construct the first descendant of an element at a given level that touches a given face.
Definition: t8_default_vertex_cxx.hxx:425
virtual int t8_element_child_id(const t8_element_t *elem) const
Compute the child id of an element.
Definition: t8_default_vertex_cxx.cxx:156
virtual int t8_element_maxlevel(void) const
Return the maximum allowed level for this element class.
Definition: t8_default_vertex_cxx.cxx:31
virtual int t8_element_num_children(const t8_element_t *elem) const
Return the number of children of an element when it is refined.
Definition: t8_default_vertex_cxx.cxx:110
virtual void t8_element_init(int length, t8_element_t *elem, int called_new) const
Initialize an array of allocated vertex elements.
Definition: t8_default_vertex_cxx.cxx:380
virtual int t8_element_refines_irregular(void) const
Returns true, if there is one element in the tree, that does not refine into 2^dim children.
Definition: t8_default_vertex_cxx.cxx:356
virtual int t8_element_num_face_children(const t8_element_t *elem, int face) const
Return the number of children of an element's face when the element is refined.
Definition: t8_default_vertex_cxx.cxx:117
virtual int t8_element_max_num_faces(const t8_element_t *elem) const
Compute the maximum number of faces of a given element and all of its descendants.
Definition: t8_default_vertex_cxx.cxx:103
t8_default_scheme_vertex_c()
Constructor.
Definition: t8_default_vertex_cxx.cxx:395
virtual int t8_element_extrude_face(const t8_element_t *face, const t8_eclass_scheme_c *face_scheme, t8_element_t *elem, int root_face) const
Given a boundary face inside a root tree's face construct the element inside the root tree that has t...
Definition: t8_default_vertex_cxx.hxx:407
virtual int t8_element_face_parent_face(const t8_element_t *elem, int face) const
Given a face of an element return the face number of the parent of the element that matches the eleme...
Definition: t8_default_vertex_cxx.hxx:345
virtual void t8_element_transform_face(const t8_element_t *elem1, t8_element_t *elem2, int orientation, int sign, int is_smaller_face) const
Suppose we have two trees that share a common face f.
Definition: t8_default_vertex_cxx.cxx:198
This struct holds virtual functions for a particular element class.
Definition: t8_element_cxx.hxx:47
uint64_t t8_linearidx_t
A type for storing SFC indices.
Definition: t8.h:114
We provide some functions that are useful across element classes.
enum t8_eclass t8_eclass_t
This enumeration contains all possible element classes.
This file defines basic operations on an element in a refinement tree.
struct t8_element t8_element_t
Opaque structure for a generic element, only used as pointer.
Definition: t8_element.h:42
This file defines basic operations on an element in a refinement tree.
t8_eclass_t t8_element_shape_t
Type definition for the geometric shape of an element.
Definition: t8_element_shape.h:38