t8  UNKNOWN
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:
42 
61  virtual void
62  t8_element_new (int length, t8_element_t **elem) const;
63 
81  virtual void
82  t8_element_init (int length, t8_element_t *elem) const;
83 
88  virtual int
89  t8_element_level (const t8_element_t *elem) const;
90 
94  virtual int
95  t8_element_maxlevel (void) const;
96 
104  virtual void
105  t8_element_copy (const t8_element_t *source, t8_element_t *dest) const;
106 
114  virtual int
115  t8_element_compare (const t8_element_t *elem1, const t8_element_t *elem2) const;
116 
123  virtual int
124  t8_element_equal (const t8_element_t *elem1, const t8_element_t *elem2) const;
125 
138  virtual void
139  t8_element_parent (const t8_element_t *elem, t8_element_t *parent) const;
140 
152  virtual void
153  t8_element_sibling (const t8_element_t *elem, int sibid, t8_element_t *sibling) const;
154 
159  virtual int
160  t8_element_num_faces (const t8_element_t *elem) const;
161 
167  virtual int
168  t8_element_max_num_faces (const t8_element_t *elem) const;
169 
174  virtual int
175  t8_element_num_children (const t8_element_t *elem) const;
176 
182  virtual int
183  t8_element_num_face_children (const t8_element_t *elem, int face) const;
190  virtual int
191  t8_element_get_face_corner (const t8_element_t *element, int face, int corner) const
192  {
193  SC_ABORT_NOT_REACHED (); /* it is impossible to have a face of a vertex */
194  return 0; /* prevents compiler warning */
195  }
196 
203  virtual int
204  t8_element_get_corner_face (const t8_element_t *element, int corner, int face) const
205  {
206  SC_ABORT ("Not implemented.\n");
207  return 0; /* prevents compiler warning */
208  }
209 
218  virtual void
219  t8_element_child (const t8_element_t *elem, int childid, t8_element_t *child) const;
220 
231  virtual void
232  t8_element_children (const t8_element_t *elem, int length, t8_element_t *c[]) const;
233 
238  virtual int
239  t8_element_child_id (const t8_element_t *elem) const;
240 
247  virtual int
248  t8_element_ancestor_id (const t8_element_t *elem, int level) const;
249 
256  virtual int
257  t8_element_is_family (t8_element_t *const *fam) const;
258 
269  virtual void
270  t8_element_nca (const t8_element_t *elem1, const t8_element_t *elem2, t8_element_t *nca) const;
271 
277  virtual t8_element_shape_t
278  t8_element_face_shape (const t8_element_t *elem, int face) const
279  {
280  SC_ABORT ("Not implemented.\n");
281  return T8_ECLASS_ZERO; /* prevents compiler warning */
282  }
283 
298  virtual void
299  t8_element_children_at_face (const t8_element_t *elem, int face, t8_element_t *children[], int num_children,
300  int *child_indices) const
301  {
302  SC_ABORT ("Not implemented.\n");
303  return; /* prevents compiler warning */
304  }
305 
326  virtual int
327  t8_element_face_child_face (const t8_element_t *elem, int face, int face_child) const
328  {
329  SC_ABORT ("Not implemented.\n");
330  return 0; /* prevents compiler warning */
331  }
332 
343  virtual int
344  t8_element_face_parent_face (const t8_element_t *elem, int face) const
345  {
346  SC_ABORT ("Not implemented.\n");
347  return 0; /* prevents compiler warning */
348  }
349 
359  virtual int
360  t8_element_tree_face (const t8_element_t *elem, int face) const
361  {
362  SC_ABORT ("Not implemented.\n");
363  return 0; /* prevents compiler warning */
364  }
365 
387  virtual void
388  t8_element_transform_face (const t8_element_t *elem1, t8_element_t *elem2, int orientation, int sign,
389  int is_smaller_face) const;
390 
404  virtual int
405  t8_element_extrude_face (const t8_element_t *face, const t8_eclass_scheme_c *face_scheme, t8_element_t *elem,
406  int root_face) const
407  {
408  SC_ABORT ("Not implemented.\n");
409  return 0; /* prevents compiler warning */
410  }
411 
420  virtual void
421  t8_element_first_descendant_face (const t8_element_t *elem, int face, t8_element_t *first_desc, int level) const
422  {
423  SC_ABORT ("Not implemented.\n");
424  return; /* prevents compiler warning */
425  }
426 
435  virtual void
436  t8_element_last_descendant_face (const t8_element_t *elem, int face, t8_element_t *last_desc, int level) const
437  {
438  SC_ABORT ("Not implemented.\n");
439  return; /* prevents compiler warning */
440  }
441 
451  virtual void
452  t8_element_boundary_face (const t8_element_t *elem, int face, t8_element_t *boundary,
453  const t8_eclass_scheme_c *boundary_scheme) const
454  {
455  SC_ABORT ("Not implemented.\n");
456  return; /* prevents compiler warning */
457  }
458 
464  virtual int
465  t8_element_is_root_boundary (const t8_element_t *elem, int face) const;
466 
482  virtual int
483  t8_element_face_neighbor_inside (const t8_element_t *elem, t8_element_t *neigh, int face, int *neigh_face) const
484  {
485  SC_ABORT ("Not implemented.\n");
486  return 0; /* prevents compiler warning */
487  }
488 
496  virtual void
497  t8_element_set_linear_id (t8_element_t *elem, int level, t8_linearidx_t id) const;
498 
505  virtual t8_linearidx_t
506  t8_element_get_linear_id (const t8_element_t *elem, int level) const;
507 
514  virtual void
515  t8_element_first_descendant (const t8_element_t *elem, t8_element_t *desc, int level) const;
516 
523  virtual void
524  t8_element_last_descendant (const t8_element_t *elem, t8_element_t *desc, int level) const;
525 
531  virtual void
532  t8_element_successor (const t8_element_t *elem, t8_element_t *succ) const
533  {
534  SC_ABORT ("Not implemented.\n");
535  return; /* prevents compiler warning */
536  }
537 
548  virtual void
549  t8_element_anchor (const t8_element_t *elem, int anchor[3]) const;
550 
560  virtual void
561  t8_element_vertex_reference_coords (const t8_element_t *elem, const int vertex, double coords[]) const;
562 
573  virtual void
574  t8_element_reference_coords (const t8_element_t *elem, const double *ref_coords, const size_t num_coords,
575  double *out_coords) const;
576 
581  virtual int
582  t8_element_refines_irregular (void) const;
583 
584 #ifdef T8_ENABLE_DEBUG
599  virtual int
600  t8_element_is_valid (const t8_element_t *t) const;
601 
609  virtual void
610  t8_element_to_string (const t8_element_t *elem, char *debug_string, const int string_size) const;
611 #endif
612 
616  void
617  t8_element_root (t8_element_t *elem) const;
618 
627  virtual void
628  t8_element_MPI_Pack (t8_element_t **const elements, const unsigned int count, void *send_buffer, int buffer_size,
629  int *position, sc_MPI_Comm comm) const;
630 
636  virtual void
637  t8_element_MPI_Pack_size (const unsigned int count, sc_MPI_Comm comm, int *pack_size) const;
638 
647  virtual void
648  t8_element_MPI_Unpack (void *recvbuf, const int buffer_size, int *position, t8_element_t **elements,
649  const unsigned int count, sc_MPI_Comm comm) const;
650 };
651 
652 #endif /* !T8_DEFAULT_VERTEX_H */
Definition: t8_default_common_cxx.hxx:36
Definition: t8_default_vertex_cxx.hxx:38
virtual int t8_element_is_family(t8_element_t *const *fam) const
Query whether a given set of elements is a family or not.
Definition: t8_default_vertex_cxx.cxx:152
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:113
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:75
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:86
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:245
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:226
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:64
virtual void t8_element_init(int length, t8_element_t *elem) const
Initialize an array of allocated vertex elements.
Definition: t8_default_vertex_cxx.cxx:306
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:164
virtual void t8_element_successor(const t8_element_t *elem, t8_element_t *succ) const
Construct the successor in a uniform refinement of a given element.
Definition: t8_default_vertex_cxx.hxx:532
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:125
virtual int t8_element_equal(const t8_element_t *elem1, const t8_element_t *elem2) const
Check if two elements are equal.
Definition: t8_default_vertex_cxx.cxx:58
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:146
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:436
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:483
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:360
virtual void t8_element_to_string(const t8_element_t *elem, char *debug_string, const int string_size) const
Print a given element.
Definition: t8_default_vertex_cxx.cxx:271
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:452
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:217
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:52
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:235
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:278
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:204
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:208
virtual void t8_element_MPI_Pack(t8_element_t **const elements, const unsigned int count, void *send_buffer, int buffer_size, int *position, sc_MPI_Comm comm) const
Pack multiple elements into contiguous memory, so they can be sent via MPI.
Definition: t8_default_vertex_cxx.cxx:341
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:44
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:289
void t8_element_root(t8_element_t *elem) const
Fills an element with the root element.
Definition: t8_default_vertex_cxx.cxx:334
virtual void t8_element_reference_coords(const t8_element_t *elem, const double *ref_coords, const size_t num_coords, double *out_coords) const
Convert points in the reference space of an element to points in the reference space of the tree.
Definition: t8_default_vertex_cxx.cxx:255
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:198
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:189
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:191
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:299
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:421
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:139
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:99
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:282
virtual void t8_element_MPI_Unpack(void *recvbuf, const int buffer_size, int *position, t8_element_t **elements, const unsigned int count, sc_MPI_Comm comm) const
Unpack multiple elements from contiguous memory that was received via MPI.
Definition: t8_default_vertex_cxx.cxx:370
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:106
virtual int t8_element_is_valid(const t8_element_t *t) const
Query whether a given element can be considered as 'valid' and it is safe to perform any of the above...
Definition: t8_default_vertex_cxx.cxx:264
virtual void t8_element_MPI_Pack_size(const unsigned int count, sc_MPI_Comm comm, int *pack_size) const
Determine an upper bound for the size of the packed message of count elements.
Definition: t8_default_vertex_cxx.cxx:355
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:93
t8_default_scheme_vertex_c()
Constructor.
Definition: t8_default_vertex_cxx.cxx:317
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:405
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:344
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:179
This struct holds virtual functions for a particular element class.
Definition: t8_element_cxx.hxx:41
uint64_t t8_linearidx_t
A type for storing SFC indices.
Definition: t8.h:109
We provide some functions that are useful across 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