Unstructured Grids within Cactus

It is assumed that the reader is familiar with the Cactus Configuration Language (CCL).

Currently Cactus can only deal with structured grids. These are grids in which the connectivity between points can be implicitly determined. Unstructured grids require explicit connectivity information.

To add unstructured grids to Cactus the following is suggested.

Variable Groups:

Add a new option GRID-TYPE=<type> which defaults to CARTESIAN. Unstructured grids would specify UNSTRUCTURED as the type. (This keyword will also allow us to specify different topology structured grids such as spherical or cylindrical.)

Add a new option DOMAIN=<domain-name> which names the domain (to be defined below) within which the data for this group resides.

New entities in interface.ccl:

DOMAIN <domain-name>

RELATION <relation-name> FROM <domain1> TO <domain2>

In the context of unstructured grids a DOMAIN is something like "edges", "vertices", "cells" or wherever in a cell data may reside. A RELATION names a relation between two domains. E.g in most applications one needs a relation between cells and vertices.

Interface to thorns:

Each unstructured Grid Function (GF) will be passed into the application thorns as a 1-dimensional array of data values, plus a number specifying the number of data points.

Each relation will be passed in as two 1-dimensional arrays (and their sizes), relation-positions and relation-data. The relation position details how far into the relation-data the data for each part of a relation starts - e.g. for the relation from cells to vertices, the index to relation-positions is the cell-index, and the number read out from that array is the first index in relation-data corresponding to that cell. These arrays will be called <relation>_pos and <relation>_data for each relation.

Concrete example:

Please refer to Figure 1, where vertices are numbered in black, cells in red, and edges in blue.

The relation from cells to vertices is:

relation-positions:

1,4,7,10,13,16

relation-data:

6,7,1, 1,7,2, 2,7,3, 3,7,4, 4,7,5, 5,7,6

Similar arrays can be constructed for the other possible relations.

Notes:

We should probably define a set of standard names for the most common relations so that application developers and driver developers can develop thorns which are interchangeable and interoperable.