The motivation for reviewing and developing a variety of concepts for scientific computing is derived from the need for flexibility in high performance applications in the field of scientific computing, especially in TCAD. With a growing number of simulation tools and various requirements on the underlying data structures, the question arises: which part of an application can be reused if it is properly implemented. This dissertation therefore introduces, analyzes, and unifies not only theoretical but also practical concepts. Different programming paradigms and typically used idioms common to many different kinds of applications in the field of scientific computing are introduced. The nature of dealing with mathematical models, with the inherent coupling of topological traversal and functional description, complicates the use of libraries which are not designed in an orthogonal library-centric way. Significant advances have been made here since the advent of the C++ standard template library (STL [16,17]) or the Java library collection [6]. The effort of application development is thereby greatly reduced. Particularly the formal and abstract interface specification of the generic programming approach, implemented by means of static parametric polymorphism in C++, offers a formal way of specification to the user, which the compiler can verify. Reusability and orthogonality of the libraries is thereby accomplished without sacrificing overall performance. This is a necessary constraint because the additional complexity of simulation models easily outgrows the steadily increasing computational power. The overview given in Section 4.4 shows that, so far, no approach can efficiently deal with the mathematical formulation of physical phenomena within a programming language.
The concepts presented here also demonstrate how to deal with problems arising in scientific computing. The method of programming applications and then patching them to fit the requirements of examples is becoming more and more of a handicap. The required models, physical processes, and simulation methodologies are expanding in an almost exponential manner. And as previous decades have shown, the software engineering community has lagged behind most of the time.
Therefore, this work does not introduce another general-purpose kernel but instead provides and develops a comprehensive set of generic components and algorithms for scientific computing. The two basic mechanisms are, on the one hand, a generic data structure specification language and, on the other hand, a functional equation specification language. Based on these building blocks, the complete range of application design, from small generic components to complete applications, is possible. The focus of developing an application can be shifted to identifying generic components, using already existing modules, and implementing the remaining functionality.
A possible implementation is presented here by the generic scientific simulation environment, which exhibits formally defined interfaces as well as an overall high performance comparable to all manually tuned applications including classical high performance Fortran applications.