During the last decades, several software projects have been developed at our institute and by other research groups (see Section 4.4 for a detailed overview), which have indicated that reuse of single algorithms is difficult. Usually implementations of algorithms make certain assumptions about the way the data they require is represented. But the spirit of generic programming, with its first realization in the STL, has shown that the concept of iterators can enable reusable data structures and algorithms [16,71,17] even with an overall high performance comparable to handwritten and hand-optimized implementations.
While the STL data structures are an excellent foundation for common programming tasks, the currently encountered issues from the field of scientific computing call for more practically adapted realizations of concepts. These are presented in this section in order to provide not only orthogonality and expressiveness but also efficiency by the means of a generic scientific simulation environment6.1 (GSSE). Usually, orthogonality transcending the initial purpose is complicated by additional complexity of data structures. This results in an increasing number of concepts which have to be met by the data structure, such as the multitude of possible internal representations of graphs in the BGL. This leads to problems whenever algorithms are reused outside the originally intended context, or if the context changes, e.g., a higher dimensional simulation.
The evolution of complexity just described leads to a growing number of software packages for different types of PDE solutions. In addition to this multitude of new packages, they are usually not organized in a way that allows immediate algorithmic reusability. Different projects have contributed components to the field of scientific computing, but up to now, no general set of generic data structures or algorithms suitable for scientific computing in general has been developed. Some works have developed modules, e.g., for generic grid components [18], which was a major contribution to software components for scientific computing with an in-depth analysis of the problem related to algorithms operating on computational grids. It analyzed the relationship between data and algorithms based on topological and combinatorial concepts. A small set of kernel components were developed which greatly ease the specification of algorithms for grid applications. But other issues, e.g., separation guidelines for concepts or functional description of algorithms, were always neglected due to the various diverging requirements in scientific computing. Another important element, as introduced in Section 5.5, is related to the multi-paradigm approach, proposed here that combines object-oriented, generic, and functional programming. To illustrate the chronologically evolution of paradigms, the development of applications at our institute and selected libraries are reviewed.
Name | Year | Paradigm | Further information |
MINIMOS | 1980 | imperative | [132] |
S*AP | 1989 | imperative | [112] |
MINIMOS-NT | 1996 | imperative, OO | [13] |
AMIGOS | 1998 | OO | [118] |
WSS | 2000 | OO | [12] |
FEDOS | 2004 | OO | [69] |
GrAL | 2000 | OO, GP | [18] |
CGAL | 2001 | OO, GP | [120] |
BGL | 2002 | OO, GP | [43] |
GSSE | 2006 | OO, GP, FP |
The current trend, however, is to combine several programming languages, resulting in multi-language applications [133]. Different languages are utilized, each within the field where they perform best. Languages such as Python are used to connect different modules. But problems of interface specification and implementation arise with the combination of several programming languages, further complicating matters. Next, the handling of different languages on different platforms is even more difficult. In the the field of scientific computing the performance aspects should be handled orthogonally to the development of applications. Optimizations can thereby be treated separately. With the multi-language approach performance aspects can not be considered orthogonally because of the use of compiled modules which require an interface layer in order to build applications.
Following the guidelines for library-centric application design that have been introduced in Section 4.2 and in Section 5.5, the following sections present advances related to a reusable collection of libraries of the GSSE. The library-centric design is facilitated, as the following criteria are met:
The following sections deal with these concepts which have to be reflected in a computational approach.