next up previous contents
Next: Data Structures of the Up: An Interface Recipe Previous: Introduction

The Bismesh Structure

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_MACROs are chain linked via the next pointer while the node array contains the global indices of the vertices.

Global information regarding the bisection mesh is grouped in the structure 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.
next up previous contents
Next: Data Structures of the Up: An Interface Recipe Previous: Introduction

SFB 256 Universität Bonn and IAM Universität Freiburg

Copyright © by the Sonderforschungsbereich 256 at the Institut für Angewandte Mathematik, Universität Bonn.