The two building blocks which have become apparent are now introduced by two generic libraries accompanied by several additional components, thereby completing the GSSE. Here the most abstract form, reduced to topological concepts, is used to introduce a comprehensive and generic topology library (GTL) based on the object-oriented and generic programming paradigm. It encompasses:
In Section 5.1, a common and generic topological classification mechanism was introduced to offer a consistent interface to various types of data structures. All different types of data structures can thereby be interpreted topologically as cell complexes of a certain dimension. The topological data structure requirements demand algebraic properties for collections of cells. The concept of a connection matrix has been introduced to offer computational access to the operations of incidence and adjacence traversal as well as to boundary operations to generate consistent subspaces, the skeletons. The GTL also provides incidence and adjacence traversal operations for various topological elements. The traversal concept allows the formulation of algorithms based on this interface independently of the actual implementation of the topological data structure or the dimension considered. Such a consequent use of the topological interface leads to dimensionally and topologically independent application design.
This approach of a generalized topology make a functional description for algorithms possible which are a natural choice for reuse in the field of scientific computing. The functional specification of algorithms thereby derived is used to develop and implement a minimal base of generic functors which make only minimal assumptions about the structure they operate on, thereby recognizing an advanced equation processing framework and providing high performance as well as high expressiveness by a generic functor library (GFL):
The GFL implements the building blocks (functors) for the domain-specific embedded language and is connected to the GTL only by means of topological traversal interfaces and the quantity accessors, thereby providing a clean and concise interface.
Based on these components, the GSSE is specified by a direct implementation of the concepts given. An overview is depicted in Figure 7.1. Meta-programming supports both libraries to enable an overall high performance. The subdivision into a segment layer and domain layer reflects the modular library design. The segment layer combines the topological properties of a cell complex with a simple quantity storage and models a singly connected part of space. Each segment uses a special quantity for coordinate representation, thereby implementing the concept of a chart. No additional concept is used to model geometrical properties. Multi-segment simulation is covered by the fiber bundle concept and consistent base space property of the GSSE. This means that each segment of a domain holds its own quantity storage and is uniquely identifiable. Based on the segment concept, the domain layer utilizes the concept of an atlas, thereby enabling metrical properties. The atlas is used to represent a consistent view of each segment, based on a globally unique geometrical point list. The domain is also responsible for the evaluation and access of topological elements based on geometrical data from outside. A component for orthogonal range queries is therefore also available, where a data structure is used to arrange the geometrical information of points correspondingly to topological elements.
The GSSE is also equipped with a real-time visualization interface, enabling a visual programming concept to ease the actual application development by using abstract quantities to visualize, e.g., boundary areas. The visualization interface can also be used to illustrate matrix properties as well as the evolution of non-linear solution steps. Currently, interfaces to the IBM OpenDX [80], the SmartV developed at our institute, Amira [134], and Paraview [135] are available. The matrix solver interface for various solver packages is implemented by a generic interface, introduced in Section 7.3.1. The input/output module implements the F5 [136] interface and is introduced in Section 7.3.3. Finally, the mesh interface uses various wrapper layers to enable the use of several mesh generators such as VGM [137], deLink [138], Netgen [139], Tetgen [140], CGAL [120], and GrAL [18] to implement the connection matrix. The analysis in Section 5.5 shows that more than 90 percent of the GSSE code consists of general functions.