Skip to main content

IBM Research


Discrete Manifolds

Discrete Manifolds capture (at a very abstract level), the notion of a grid. I think that it is safe to say that all grids are what topologists call "cellular complexes". That is, they consist of a set of "cells" (or elements), and the boundary between two cells is a cell of one lower dimension. Thus a regular grid in 3-space is made up of a set of cubes, and the interfaces between adjacent cubes are squares, which are made up of edges, whose ends are points.


This figure shows a 2 dimensional cellular complex in a Target space of dimension 2. The complex consists of: eight vertices (0-cells), labeled in blue, 18 edges (1-cells), labeled in white, and 11 faces (2-cells), labeled in red. In this example face 10 represents the exterior of the polygonal region.

Each cell of dimension greater than 0, has a list of faces. For example, 2-cell number 0 has three faces, which are 1-cells 6, 16, and 17. 1-cell 16 has two "faces", which are vertices 6 and 7.

Each cell of dimension less than the base space dimension has a list of adjacent cells, of which it is a face. For example, 1-cell 8 is the face of 2-cells 6 and 7. 0-cell 5 is a face of 1-cells 5, 6, 8, 10 and 17.

One way of representing the discrete manifold in the figure above is as several lists of cells. Each cell may have a list of cells of one greater dimension to which it is a face, and a list of faces. For the figure:

0-Cells

  Cell      Face of Cells 

  0           0,4,14
  1           0,2,3
  2           1,9,12
  3           8,7,11,12
  4           10,11,13
  5           5,6,8,10,17
  6           2,7,9,16,17
  7           3,4,6,14,15,16

1-Cells

 Cell      Face of Cells            Faces

  0           4,10                   0,1
  1           2,10                   1,2
  2           1,2                    1,6
  3           1,4                    1,7
  4           4,5                    0,7
  5           3,9                    5,8
  6           0,9                    5,7
  7           6,8                    3,6
  8           6,7                    3,5
  9           2,8                    2,6
 10           3,7                    4,5
 11           7,10                   3,4
 12           8,10                   2,3
 13           3,10                   4,8
 14           5,10                   0,8
 15           5,9                    7,8
 16           0,1                    6,7
 17           0,6                    5,6

2-Cells

  Cell                                Faces

  0                                  6,16,17
  1                                  2,3,16
  2                                  1,2,9
  3                                  5,10,13
  4                                  0,3,4
  5                                  4,14,15
  6                                  7,8,17
  7                                  8,10,11
  8                                  7,9,12
  9                                  5,6,15
 10                                  0,1,11,12,13,14

Not all grids actually store all of this information, it may be implicit. For example, a regular grid need only store mesh spacings and counts. The cells of any dimension and their faces can be recovered from the index.

Cells are represented as a list of faces (returned as an array of longs), each of which is a cell of one lower dimension. Each cell is the face of some number of cells of one higher dimension. The following figure illustrates the faces of a 3-cell in three dimensions, which are 2-cells.

Each cell is also potentially the face of another cell. The cells of which a given cell is a face we've called FaceCells (not the best name). The following figure illustrates the face cells of a 2-cell in three dimensions, which are 3-cells.

Manifolds have a member function isitDiscrete() which reports whether a cellular complex exists for the manifold. If it does, the manifold supplies the following member functions

Note: The 1 and n-1 cells of a mesh are somewhat special. A 1-cell has two endpoints (faces), and each n-1 cell has two n-cells that it is a face of. There is therefore an orientation associated with the edges and n-1 cells. For edges, we speak of an origin and destination, and in three dimensions faces have left and right volume cells. In two dimensions n-1=1, and edges have left and right faces.

Orientation becomes important when you try to generate a list of the vertices around a face, or all the neighbors of an n-cell. If the 1 and n-1 cells are not oriented, each vertex or n-cell is generated twice. If they are oriented, the first endpoint of each edge, and the first face cell of each n-1 cell will generate the required list.

We therefore strongly recommend that the following convention be observed: that routines which return 1-cells return a number that is between zero and twice the number of 1-cells. Each 1-cell has a mirror twin, with opposite orientation, which is refered to by the number that is greater than the total number of 1-cells. Similarly with the n-1 cells. (This must be implemented in the getCellFace() routines.)

For example, mesh with 200 1-cell's and 300 n-1 cells

1-cell #105 has endpoints 1 and 400

1-cell #305=(105+200) has endpoints 400 and 1

n-1-cell #49 has face cells 55 and 69

n-1-cell #349=(49+300) has face cells 69 and 55


[Comments | NAO Home Page] [Research home page]

[ IBM home page | Order | Privacy | ContactIBM | Legal ]