This is essential in order to obtain reproducible results, because in some cases the simulation process as well as the results are provided in a manner that the external observer is not able to redo the respective simulation experiments. The steps which lead to the solution of the problem are not sufficiently disclosed. As a first step, a classification scheme for scientific computing simulation processes is introduced with which simulation tools can be categorized.
Many implementations and software packages comprise algorithms for the solution of problems from many different disciplines. Each software project is focused on a very special method which is implemented in a highly optimized manner, whereas the implementation of the remaining tasks is often neglected. A large number of scientists is involved in the development of new algorithms, data structures, algebraic methods, or discretization schemes used for the solution of partial differential equations. In many cases these efforts lead to an improvement regarding one of these topics, whereas for the other fields methods and implementations of state-of-the-art approaches or even approaches of worse quality are used, often due to ignorance of the neighboring fields.
Even though there are several approaches of supporting large software packages , common interfaces are not available that would assist a scientist skilled in one special field to use the power of libraries in order to fulfill high standards in all of the mentioned fields. Currently, each kind of software introduces new interfaces, which are designed especially for a certain purpose and can not be used for comparable methods due to interfacing problems, so that the implementation of similar tasks often requires a complete re-design of the software and interfaces. This of course worsens the situation of a scientist, who is trying to implement a special method that inevitably depends on the use of third party software. In order to circumvent these difficulties it is common practice to use scripting languages to write the ``gluing code'' between the single parts of code, which quickly solves the problem at first glance.
However, there is a lot of software already glued together and even though scripting languages of high performance are used  to manage the bottleneck of bringing data from one application to another, these scripts become more and more cumbersome to manage. The implementation is highly specific gluework which is more difficult to handle and therefore often software has to be re-designed, when more external software components are required. Especially problematic is the change of external software components by newly developed software of higher performance, because neither the developers of the software, nor the developers of the used respective library have designed interfaces independent from the actual data structures. Therefore the lack of interoperability and substitutability of libraries causes suboptimal simulation software.
In order to identify missing features, a classification scheme is introduced in Section 1.1, which shows the general steps of a scientific computing application. This classification also gives a practical orientation on how to separate software into parts and how to categorize existing parts of code. Interfaces are addressed and the main problems regarding inappropriate use of these interfaces are described. In Section 1.2 known frameworks commonly used for the solution of scientific problems are compared and analyzed with respect to this classification. Finally it will be shown, that most parts of scientific computing are well solved as standalone problems such as the solution of algebraic equation systems. However, the specification of discretized differential equations as well as the interfacing still lacks proper specification methods. Based on this analysis, Section formulates the aims of this thesis, namely a proper specification layer for differential equations as well as discretized algebraic equations.