Our sample data structure will describe a triangulation of a given domain that is refined by bisection starting from a macro triangulation. Each element is represented in the following data structure called BELEMENT:
typedef struct belement{ struct belement* neighbour[3]; struct belement* child[2]; struct belement* parent; int newnode; int flag; } BELEMENT;Here
newnode
contains the global index of the node that is created
while the element is being bisected. The flag
is used to decide which
element has to be refined. Elements of the macro triangulation called BELEMENT_MACRO
are basically the same as the BELEMENTs
.
They only have some additional information included:
typedef struct belement_macro{ BELEMENT* neighbour[3]; BELEMENT* child[2]; BELEMENT* parent; int newnode; int flag; int node[3]; struct belement_macro* next; } BELEMENT_MACRO;The
BELEMENT_MACRO
s are chain linked via the next
pointer while
the node
array contains the global indices of the vertices.
BISMESH
:
typedef struct bismesh{ int number_macro_points; int number_macro_elements; int number_points; int number_elements; int max_level; BELEMENT_MACRO* first; VEC3* macro_coord; double* geo_estimates; } BISMESH;The pointer
first
enables us to access the chain of the macro elements
while the coordinates of the macro nodes are stored in the array
macro_coord
. The error estimators concerning the geometry are stored
in the array geo_estimates
.
Copyright © by the Sonderforschungsbereich 256 at the Institut für Angewandte Mathematik, Universität Bonn.