In the last decade many approaches towards implementing a general purpose simulation environment for the solution of partial differential equations have been taken. Most of the tools resulting from these attempts use topological structures which are specialized to work with a particular discretization scheme. This reduces resource use but comes at the cost of greatly diminishing the flexibility of topological traversal. As an example, the finite volume method does not require vertex-face traversal. However, for some reasons it might be advantageous to implement discretization schemes based on a mixed finite element/finite volume scheme which requires such traversal operations. The following brief overview shows some significant steps towards a more flexible and generic application design:
Modern scientific computing requires a huge number of different physical models and numerical methods. Increasingly complex physical formulations are required by todays simulation problems. Flexibility of the definition of models as well as of numerical solution methods is required. But the transformation of a physical model into a computer model can usually be seen as a very time-consuming procedure. Therefore a great number of different applications have been developed during the last decades.
First, TCAD-related applications and environments that have been developed at the Institute for Microelectronics [111,11,112,13,12] are reviewed and the choices made with respect to the field of scientific computing are investigated4.1. Then generic libraries which are directly linked to this work are also reviewed.
The SAP tools have been developed for high performance interconnect analysis for TCAD [113,114], especially for thermal (STAP) and capacitive (SCAP) problems. The finite element discretization scheme is utilized to implement highly accurate capacitance extraction, resistance calculation, transient electric and coupled electro-thermal simulations. Simple mesh generation packages for data layout as well as visualization packages were additionally developed.
All algorithms and solving procedures were hand-optimized by experienced C specialists and domain experts. This yields excellent performance and portability but requires a considerable amount of maintenance by the development group. The next generation of programmers or scientists faced an ever-increasing period of adjustment and learning time, thereby strongly reducing the enhancement capabilities. The imperative programming methods used do not support the concept of reuse by themselves; therefore reusability considerations were almost completely left to the application designer, which results in missing expressiveness of the code and highly optimized code parts can barely be extended.
Minimos-NT [115,116,13,117] is the successor to the well-known specialized Minimos [111] and implements concepts for a general-purpose, multi-dimensional semiconductor device simulator. Minimos-NT provides steady-state, transient, and small-signal analysis of arbitrary device structures as well as mixed-mode device and circuit simulations based on compact models.
Minimos-NT is a composition of the imperative and object-oriented paradigms. They were used, on the one hand, to ease the rapid prototyping of new models, and, on the other hand, to facilitate code reuse. Unfortunately the employment of these programming paradigms complicates a clean interface specification and enforces a monolithic application design.
The analytical model interface and general object-oriented solver (AMIGOS [118]) was developed to meet the requirements of a general partial differential equation solver. A common kernel for physical modeling, parameter and model hierarchies, grid-adaptation, a numerical solver, a simple front-end controller, and geometry and boundary definitions were defined. AMIGOS can handle different discretization schemes, such as finite elements and finite volumes.
FEDOS [69], the successor to AMIGOS, is a finite-element-based simulator, which uses a general nucleus matrix assembly procedure. It is intended to deal with oxidation and diffusion phenomena and also features integrated mesh adaptation capabilities.
AMIGOS and FEDOS are highly flexible and great achievements toward generic application design, especially AMIGOS with its integrated specification language can reduce development times significantly. Investigations indicate [118] that the development time of a new application is reduced from days when using SAP [113,114] to hours when using AMIGOS. Therefore the approach of an embedded language is still an important feature for generic application design. Nevertheless, the object-oriented programming paradigm which was used, as given in Section 4.2, greatly reduces reusability of the developed code and drastically increases the effort necessary to develop and maintain source code.
The Wafer-State Server aimed to define and implement concepts for a generic data model suitable to TCAD's device and process simulation [119], because there was no standard available for data transfer between tools. All the solutions are based on a file format instead of a data format with a corresponding data model, which has the major drawback of being easily semantically incompatible. Based on the analysis of various approaches and the issues arising from coupling different kinds of process simulators and to allow an efficient data exchange, the Wafer-State data model has been developed. The data model also specifies various geometrical and topological operations, such as interpolation mechanisms and consistency checks for simplex objects, especially in three dimensions. Additionally, optimization tasks as they occur in the simulation of semiconductor devices were investigated and algorithms for the Wafer-State-Server were introduced to aid complex high-level simulation tasks.
The focus on the object-oriented programming paradigm is again a major drawback, as it circumvents library-centric application design. The single components of the Wafer-State server cannot be reused directly. Modules always have to be transformed and partially rewritten, because interfaces are only consistent within a class hierarchy, thereby reducing orthogonal application design. The overhead for code development is also apparent.
A major step towards a more flexible use of data structures was developed by the Boost Graph Library (BGL [43]). This library implements a generic interface to enable access to arbitrary graph structures but hides the details of the actual implementation. The interfaces make it possible for any graph library that implements these interfaces to be interoperable with the BGL. The approach is similar to the one taken by the C++ STL to ensure the interoperability of the various algorithms and containers. The property map concept [43] was also introduced. Unfortunately the BGL was designed for graphs only and neither lower nor higher dimensional data structures can be handled.
The Computational Geometry Algorithm Library (CGAL [120]) is another important collection of reusable components for a great number of geometrical algorithms and data structures in a generic library-centered approach, such as two- and three-dimensional modules for mesh generation, Voronoi diagrams, and surface mesh simplification. The main contribution of CGAL is the concept of an algebraically parametrized kernel [121] related to the actual implementation robustness of mathematical operations.
The Grid Algorithms Library (GrAL [18]) was one of the first contributions to the unification of data structures of arbitrary dimensions for the field of scientific computing. A common interface for grids with dimensionally and topologically independent access and traversal was designed. Mathematical concepts for topological spaces were introduced and applied to grids. Applications for the field of solving PDEs were presented, but no concrete implementation was given. Concepts of accessing data abstractly, similarly to property maps, were also introduced and demonstrated in applications.
Several research groups have put a lot of effort into the development of libraries for sub-problems occurring in scientific computing.
FiberLib2 was inspired by Butler's vector bundle data model [21] and OpenDX and is a reimplementation of a data model which was originally conceived [1] for visualizing numerical data originating from general relativity. Since the mathematics of general relativity require explicit treatment of otherwise implicitly assumed properties of space and time, designing a data model to cover the issues of general relativity improves its genericity.
The Sophus C++ library [122] aims at coordinate-free formulations. This library implements grid components for sequential and parallel high performance computing. A field layer for numerical discretization schemes, a tensor layer to handle various quantities related to a coordinate systems, and finally an application layer with solver interfaces were developed. However, this approach suffers from severe abstraction penalties and requires a code transformation tool [106].
Prophet [123] is an environment for the solution of PDEs. It introduces four different levels of abstraction. The first and base library layer consists of a database for models of coefficients and material parameters, macros for expressions, grid routines, and a linear solver. The PDE layer consists of an assembly control, discretizations, and modeling modules. The third layer consists of several modules, for example modules for solving. The fourth layer is the user layer, which consists of an input parser and the visualization mechanism. Prophet separates geometric and physical information and was originally developed for semiconductor process simulation.
deal.II [124] provides a framework for finite element methods and adaptive refinement for finite elements. It uses modern programming techniques of C++ and enables the treatment of a variety of finite element schemes in one, two, or three spatial dimensions and of time-dependent problems. Modern finite element algorithms, using, among other aspects, sophisticated error estimators, and adaptive meshes can be developed easily. This approach is specialized to finite element discretization schemes and cannot be used easily for other schemes, e.g., finite volumes or finite differences.
Femster [125] is a class library for finite element calculations based on differential forms. This means that users must provide their own code to assemble global FE matrices. In other words, Femster implements a general finite element API.
The FEniCS project [126], which is a unified framework for several tasks in the area of scientific computing, is a great step towards generic modules for scientific computing. Up to now most of the modules are in a prototype state.
Various toolkits have also been developed which can be seen as related work as well. The Generative Matrix Computation Library (GMCL [127]) is a framework based on expression templates, generative C++ programming idioms, and many template meta-programming facilities, e.g., control structures for static meta-programming. The Template Numerical Toolkit (TNT [128]) is a collection of interfaces and reference implementations of numerical objects (matrices) in C++. The toolkit defines interfaces for basic data structures, such as multidimensional arrays and sparse matrices, commonly used in numerical applications.
These libraries are an important step towards library-centric application design. But most of these libraries were not developed with interoperability as a necessary constraint. As a consequence, additional code has to be introduced which slows the development process down and impedes the execution speed of the final application. The environments reviewed here also completely veil the topological information through the use of formalisms such as element matrices [129] and control functions [123].