Tensors are elements of a vector space themselves and form the tensor algebra. They are represented relative to a coordinate system by a set of
-dimensional manifold. Tensors of rank 2 may be represented using matrix notation. Tensors of type
are equivalent to covectors and called co-variant; in matrix notation (relative to a chart) they correspond to rows. Tensors of type
are equivalent to a tangential vector and are called contra-variant, corresponding to columns in matrix notation. The duality relationship between vectors and covectors then corresponds to the matrix multiplication of a 1 ×
Topology: Discretized Manifolds
For computational purposes, a topological space is modeled by a finite set of points. Such a set of points intrinsically carries a discrete topology by itself, but one usually considers embeddings in a space that is homeomorphic to Euclidean space to define various structures describing their spatial relationships.
A subset
c ⊂
X of a Hausdorff space
X is a
k-cell if it is homeomorphic to an open
k-dimensional ball in
. The dimension of the cell is
k. Zero-cells are called vertices, one-cells are edges, two-cells are faces or polygons, and three-cells are polyhedra – see also section “Chains.” An
n-cell within an
n-dimensional space is just called a “cell.” (
n − 1)-cells are sometimes called “facets” and (
n − 2)-cells are known as “ridges.” For
k-cells of arbitrary dimension, incidence and adjacency relationships are defined as follows: two cells
c 1,
c 2 are
incident if
c 1 ⊆
∂ c 2, where
∂ c 2 denotes the border of the cell
c 2. Two cells of the same dimension can never be incident because dim(
c 1) ≠ dim(
c 2) for two incident cells
c 1,
c 2.
c 1 is a
side of
c 2 if dim(
c 1) < dim(
c 2), which may be written as
c 1 <
c 2. The special case
may be denoted by
c 1 ≺
c 2. Two
k -cells
c 1,
c 2 with
k > 0 are called
adjacent if they have a common side, i.e.,
For
k = 0, two zero-cells (i.e., vertices)
v 1,
v 2 are said to be adjacent if there exists a one-cell (edge)
e which contains both, i.e.,
v 1 <
e and
v 2 <
e. Incidence relationships form an incidence graph. A path within an incidence graph is a cell tuple: a
cell-tuple within an
n-dimensional Hausdorff space is an ordered sequence of
k-cells
of decreasing dimensions such that
. These relationships allow to determine topological neighborhoods: adjacent cells are called
neighbors. The set of all
k + 1 cells which are incident to a
k-cell forms a neighborhood of the
k-cell. The cells of a Hausdorff space
X constitute a topological base, leading to the following definition: a (“closure-finite, weak-topology”)
CW-complex , also called a
decomposition of a Hausdorff space
X, is a hierarchical system of spaces
, constructed by pairwise disjoint open cells
c ⊂
X with the Hausdorff topology
, such that
X (n) is obtained from
X (n−1) by attaching adjacent
n-cells to each (
n − 1)-cell and
. The respective subspaces
X (n) are called the
n-skeletons of
X. A CW complex can be understood as a set of cells which are glued together at their subcells. It generalizes the concept of a graph by adding cells of dimension greater than 1.
Up to now, the definition of a cell was just based on a homeomorphism of the underlying space
X and
. Note that a cell does not need to be “straight,” such that, e.g., a two-cell may be constructed from a single vertex and an edge connecting the vertex to itself, as, e.g., illustrated by J. Hart [
34]. Alternative approaches toward the definition of cells are more restrictively based on isometry to Euclidean space, defining the notion of “convexity” first. However, it is recommendable to avoid the assumption of Euclidean space and treating the topological properties of a mesh purely based on its combinatorial relationships.
Ontological Scheme and Seven-Level Hierarchy
The concept of the fiber bundle data model builds on the paradigm that numerical data sets occurring for scientific visualization can be formulated as trivial fiber bundles (see section “Vector and Fiber Bundles”). Hence, data sets may be distinguished by their properties in the base space and the fiber space. At each point of the – discretized – base space, there are some data in the fiber space attached. Basically a fiber bundle is a set of points with neighborhood information attached to each of them. An n-dimensional array is a very simple case of a fiber bundle with neighborhood information given implicitly.
The structure of the base space is described as a CW complex, which categorizes the topological structure of an n-dimensional base space by a sequence of k-dimensional skeletons, with 0 < k < n. These skeletons carry certain properties of the data set: the zero-skeleton describes vertices, the one-skeleton refers to edges, two-skeleton to the faces, etc., of some mesh (a triangulation of the base space). Structured grids are triangulations with implicitly given topological properties. For instance, a regular n-dimensional grid is one where each point has 2 n neighbors.
The structure of the fiber space is (usually) not discrete and given by the properties of the geometrical object residing there, such as a scalar, vector, covector, and tensor. Same as the base space, the fiber space has a specific dimensionality, though the dimensionality of the base space and fiber space is independent. Figure
3 demonstrates example images from scientific visualization classified via their fiber bundle structure. If the fiber space has vector space properties, then the fiber bundle is a vector bundle and vector operations can be performed on the fiber space, such as addition, multiplication, and derivation.
The distinction between base space and fiber space is not common use in computer graphics, where topological properties (base space) are frequently intermixed with geometrical properties (coordinate representations). Operations in the fiber space can, however, be formulated independently from the base space, which leads to a more reusable design of software components. Coordinate information, formally part of the base space, can as well be considered as fiber, leading to further generalization. The data sets describing a fiber are ideally stored as contiguous arrays in memory or disk, which allows for optimized array and vector operations. Such a storage layout turns out to be particularly useful for communicating data with the GPU using vertex buffer objects: the base space is given by vertex arrays (e.g., OpenGL glVertexPointer), and fibers are attribute arrays (e.g., OpenGL glVertexAttribPointer), in the notation of computer graphics. While the process of hardware rendering in its early times had been based on procedural descriptions (cached in display lists), vertex buffer objects are much faster in state-of-the-art technology. Efficient rendering routines are thus implemented as maps from fiber bundles in RAM to fiber bundles in GPU memory (eventually equipped with a GPU shader program).
A complex data structure (such as some color-coded time-dependent geometry) will be built from many data arrays. The main question that needs to be answered by a data model is how to assign a semantic meaning to each of these data arrays – what do the numerical values actually
mean? It is always possible to introduce a set of keywords with semantics attached to them. In addition, the introduction of keywords also reduces the number of possible identifiers available for user-specific purpose. This problem is also known as “name space pollution”. The approach followed in the data model presented in [
7] is to avoid use of keywords as much as possible. Instead, it assigns the semantics of an element of the data structure into the placement of this element. The objective is to describe all data types that occur in an algorithm (including file reader and rendering routines) within this model. It is formulated as a graph of up to seven levels (two of them optional). Each level represents a certain property of the entire data set, the
Bundle. These levels are called:
Actual data arrays are stored only below the “
Field” level. Given one hierarchy level, the next one is accessed via some identifier. The type of this identifier differs for each level: numerical values within a
Skeleton level are grouped into
Representation objects, which hold all information that is
relative to a certain “representer.” Such a representer may be a coordinate object that, for instance, refers to some Cartesian or polar chart, or it may well be another
Skeleton object, either within the same
Grid object or even within another one. An actual data set is described through the existence of entries in each level. Only two of these hierarchy levels are exposed to the end user; these are the
Grid and
Field levels. Their corresponding textual identifiers are arbitrary names specified by the user.
Bundle |
Floating point number |
Time value |
Slice |
String |
Grid name |
Grid |
Integer set |
Topological properties |
Skeleton |
Reference |
Relationship map |
Representation |
String |
Field name |
Field |
Multidimensional index |
Array index |
A
Grid is subset of data within the Bundle that refers to a specific geometrical entity. A
Grid might be a mesh carrying data such as a triangular surface, a data cube, a set of data blocks from a parallel computation, or many other data types. A
Field is the collection of data sets given as numbers on a specific topological component of a Grid, for instance, floating point values describing pressure or temperature on a Grid’s vertices. All other levels of the data model describe the properties of the Bundle as construction blocks. The usage of these construction blocks constitutes a certain language to describe data sets. A Slice is identified by a single floating point number representing time (generalization to arbitrary-dimensional parameter spaces is possible). A
Skeleton is identified by its dimensionality, index depth (relationship to the vertices of a Grid), and refinement level. This will be explained in more detail in section “Topological Skeletons.” The scheme also extends to cases beyond the purely mathematical basis to also cover data sets that occur in praxis, which is described in section “Non-topological representations.” A representation is identified via some reference object, which may be some coordinate system or another
Skeleton. The lowest levels of fragments and compounds describe the internal memory layout of a
Field data set and are optional; some examples are described in [
8,
9].
Field Properties
A specific
Field identifier may occur in multiple locations. All these locations together define the properties of a field. The following four properties are expressible in the data model:
1.
Hierarchical ordering: For a certain point in space, there exist multiple data values, one for each refinement level. This property describes the topological structure of the base space.
2.
Multiple coordinate systems: One spatial point may have multiple data representations relating to different coordinate systems. This property describes the geometrical structure of the base space.
3.
Fragmentation: Data may stem from multiple sources, such as a distributed multiprocess simulation. The field then consists of multiple data blocks, each of them covering a subdomain of the field’s base space. Such field fragments may also overlap, known as “ghost zones.”
4.
Separated Compounds: A compound data type, such as a vector or tensor, may be stored in different data layouts since applications have their own preferences. An array of tensors may also be stored as a tensor of arrays, e.g., XYZXYZXYZXYZ as XXXXYYYYZZZZ. This property describes the internal structure of the fiber space.
All of these properties are optional. In the most simple case, a field is just represented by an array of native data types; however, in the most general case (which the visualization algorithm must always support), the data are distributed over several such property elements and built from many arrays. With respect to quick transfer to the GPU, only the ability to handle multiple arrays per data set is of relevance.
Figure
4 illustrates the organization of the last four levels of the data model. These consist of Skeleton and Representation objects with optional fragmentation and compound levels. The ordering of these levels is done merely based on their semantic importance, with the uppermost level (1) embracing multiple resolutions of the spatial domain being the most visible one to the end user. Each of these resolution levels may come with different topological properties, but all arrays within the same resolution are required to be topologically compatible (i.e., share the same number of points). There might still be multiple coordinate representations required for each resolution, which constitutes the second hierarchy level (2) of multiple coordinate patches. Data per patch may well be distributed over various fragments (3), which is considered an internal structure of each patch, due to parallelization or numerical issues, but not fundamental to the physical setup. Last but not least, fields of multiple components such as vector or tensor fields may be separated into distinct arrays themselves [
7]. This property, merely a performance issue of in-memory data representation, is not what the end user usually does not want to be bothered with and is thus set as the lowest level in among these four entries.
Topological Skeletons
The Skeleton level of the fiber bundle hierarchy describes a certain topological property. This can be the vertices, the cells, the edges, etc. Its primary purpose is to describe the skeletons of a CW complex, but they may also be used to specify mesh refinement levels and agglomerations of certain elements. All data fields that are stored within a Skeleton level provide the same number of elements. In other words they share their index space (a data space in HDF5 terminology). Each Topology object within a Grid object is uniquely identified via a set of integers, which are the dimension (e.g., the dimension of a k-cell), index depth (how many dereferences are required to access coordinate information in the underlying manifold), and refinement level (a multidimensional index, in general). Vertices – index depth 0 – of a topological space of dimension n define a Skeleton of type (n, 0). Edges are one-dimensional sets of vertex indices; therefore, their index depth is 1 and their Skeleton type is (1,1). Faces are two-dimensional sets of vertex indices, hence Skeleton type (2, 1). Cells – such as a tetrahedron or hexahedra – are described by a Skeleton type (3, 1). All the Skeleton objects of index depth 1 build the k-skeletons of a manifold’s triangulation.
Higher index depths describe sets of k-cells. For instance, a set of edges describes a line – a path along vertices in a Grid. Such a collection of edges will fit into a Skeleton of dimension 1 and depth 2, i.e., type (1, 2). It is a one-dimensional object of indices that refer to edges that refer to vertices.
Non-topological Representations
Polynomial coordinates, information on field fragments, histograms, and color maps can be formulated in the fiber bundle model as well. These quantities are no longer direct correspondences of the mathematical background, but they may still be cast into the given context.
Coordinates may be given procedurally, such as via some polynomial expression. The data for such expressions may be stored in a Skeleton of negative index depth – as these data are required to compute the vertex coordinates and more fundamental than these in this case.
A fragment of a Field given on vertices – the (n, 0)-Skeleton of a Grid – defines an n-dimensional subset of the Grid, defined by the hull of the vertices corresponding to the fragments. These may be expressed as a (n, 2)-Skeleton, where the Field object named “Positions” (represented relative to the vertices) refers to the (global) vertex indices of the respective fragments. The representation in coordinates corresponds to its range, known as the bounding box. Similarly, a field given on the vertices will correspond to the field’s numerical minimum/maximum range within this fragment.
A histogram is the representation of a field’s vertex complex in a “chart” describing the required discretization, depending on the min/max range and a number count. A color map (transfer function) can be interpreted as a chart object itself. It has no intrinsically geometrical meaning, but provides means to transform some data. For instance, some scalar value will be transformed to some RGB triple using some color map. A scalar field represented in a certain color map is therefore of type RGB values and could be stored as an array of RGB values for each vertex. In practice, this will not be done since such transformation is performed in real time by modern graphics hardware. However, this interpretation of a color map as a chart object tells how color maps may be stored in the fiber bundle data model.
powered Cartesian product of the tangential space or the dual vector space (cotangential space). A tensor
vectors. All tensors of a fixed type (
. The union of all tensor spaces at the points
. The tangential and cotangential bundles are specialized cases for (1, 0) and (0, 1) tensor bundles, respectively. Fully antisymmetric tensors of type (0,
. For
) represents the dimension of the manifold, differential forms vanish.