Scientific computing is understood here as the collection of concepts which deal with large equation systems by utilizing discretized partial differential equations from different fields of physics as well as the computational efficiency of software implementations of these numerical methods. Different types of partial differential equations and their discretization schemes, such as the finite element method or the finite volume method, have to be considered for diverse types of problems. Types of topological cell complexes, different dimensions, and various solving strategies, all with their appropriate algorithmic description, have to be considered during application development.
The development of software for the numerical simulation of disparate physical phenomena, such as electromagnetic wave propagation, heat transfer, mechanical deformation, fluid flow, and quantum effects, is not straight-forward and is even today very complex. Early software in the field of scientific computing consisted of a monolithic single application to deal with special problems. Due to the direct solution process, these applications perform exceptionally well, as they are written by domain experts and tuned manually. At this time, the domain expert, software designer, programmer, tester, and end-user is one person, a situation which complicates and slows down the complete development process. The reuse of components or the extension of such an application written by a domain expert usually requires a large investment of time to get accustomed to the special domain and the internal mechanisms of the application. The field becomes more complex, if couplings of various phenomena and different discretization schemes are used to obtain a solution. Each of these schemes has its merits and shortcomings and is more or less suited for different classes of equations. Therefore a multitude of software applications and tools, which provide methods and libraries for the solution of very specific problem classes, has been developed. However, they are mostly specialized for a certain type of underlying mathematical model, resulting in a solution process which is highly predictable. Only in the recent past have environments for various problems at hand been developed and published, all with their advantages and disadvantages. However, it is important to note that applications not developed with interoperability in mind impose restrictions on possible solution methods which can not be foreseen at the beginning of program development.