Chapter 8

dum spiro spero
Marcus Tullius Cicero

Abstractions in the theoretical and practical aspects of sciences and engineering have been developed for extensive periods of time. The comparatively young field of scientific computing has also made progress in attempting to ascend the ladder of developing abstractions. In contrast to the field of mathematics, where abstractions do not result in overhead, the field of scientific computing needs to take care not to incur penalties with respect to limited resources of both memory or computational power due to abstractions. Methodologies, such as static polymorphism have been developed, which together with the ongoing refinement of tools are not only capable of avoiding abstraction penalties, but are even capable of outperforming low level implementations.

The increased abstraction levels also ease to implement higher mathematical abstractions. The C++ programming language, while being far from perfect, offers capabilities to not only establish the desired high abstraction levels at high execution performance. Furthermore it allows the almost seamless reuse of legacy implementations within an abstracted environment, thereby speeding development as well as improving migration capabilities. The reuse of already established pieces of software is not restricted to previous C++ implementations, but by providing a thin wrapping layer extensible to all implementations in languages which can produce link compatible object code. Thus enabling the development of unifying interfaces, which, while abstract, can be flexibly tailored to accommodate new use cases quickly. The high abstraction aims for the employment of concepts in programming. While concepts have not yet been formalized and included into the newest C++ standard, the idea of a concept may already be utilized using the available language features, thereby also highlighting the requirements which are expected from a standardized form of concepts.

It has been attempted to present that an abstract approach to scientific problems is nothing, which has to be newly developed for scientific computing. Mathematics has been developed and used by scientists in order to provide structuring not only as a goal onto itself but also as a tool for other sciences such as physics. It is the aim to show the feasibility of utilizing mathematical abstractions as guidelines for realizations of physical problems in the domain of scientific computing. This should not, however, be a mapping expressing mere existence, for this is clearly beyond doubt as it has already been established on numerous occasions, but is to allow to facilitate the use of advances in all involved fields of research. Thus it is hoped to have given an idea how to provide a link of the kind as sketched in Figure 2.3. It is clear that such a link cannot be unique, at least from the current level of knowledge. Therefore, a mathematical compendium has been compiled out of the necessity to establish frames of reference. It also intends to show that once powerful concepts are in place, problems can be expressed and treated very concisely without sacrificing generality.

The field of physics has then been explored to illustrate that even in this discipline, which predates scientific computing, there is no single view to any given problem, but that multiple descriptions are available. While the evolution of the modelling techniques and methodologies has progressed, the old descriptions may still find applications in fitting contexts. It is such a trend which is also envisioned for the field of scientific computing; to embrace new facilities that develop in the form of programming paradigms as well as supporting tools and thus allow for an increasing level of abstraction, sophistication and reuse. This should of course not happen at the cost of completely abandoning the already existing implementations and code bases, as Section 7.2.3 was intended to illustrate, by showing the integration of old and new implementations. In this it is similar to the attempts to bridge the realms of classical mechanics and quantum mechanics, as very briefly explored in Section 7.4. While this section may be short, it nevertheless constitutes scientific progress in its own right, even if everything else should be considered to be without value or trivial, it should not be discarded with the rest, since it surpasses the sum of its parts and not only provides insights into a world between worlds, but does so using a newly derived algorithm.

It is crucially important that it is exactly the, for many reasons, implicit assumptions, which can cause major problems for the development of generic implementations. Therefore, even a reiteration of the structures, which are so easily assumed to be ubiquitous is required in order to be able to make them available explicitly. To make a bold claim: the development of generic implementation is mainly concerned with making implicit things explicit. To this end it is first necessary to be aware of the implicit assumptions in the same manner that top down design is only possible if “the top” is known. If this is considered as overly simple, it is astounding how often it is ignored.

By adding possibilities of explicit specification the number of choices is increased which may not be popular in general, when ever more facilities are expected to work using point and click actions. While this is not an unreasonable attitude in order to cope with the ever increasing number of choices an individual may be faced, it is only the choices which allow to reap the most benefit from scientific computing. Since it is always possible to provide convenience layers, which shield potential users from the grizzly internals, while it is not easily possible to do the same in reverse. It is hoped, that the initial example provided in Section 3.3 as well as the examples provided throughout Chapter 6 were able to establish this notion while at the same time serving as examples how to map mathematical structures to digital computers.

An aim for future developments is to provide a means to apply algorithms beyond their initial field of conception. As Chapter 5 elucidated for example, the described mechanics are in essence a geometric theory, thus geometric algorithms should be applicable, using appropriate generalizations. But the intent is then not to produce just another specialized implementation, for a new particular case, but rather formulate a truly generic version of the algorithm, even if specializations can later be again linked to it transparently. The resulting geometry library should be capable of seamlessly dealing not only affine geometry, which is commonly encountered, but also with Riemannian and symplectic geometries efficiently. Furthermore, extensions to include even more different geometries such as, e.g., hyperbolic geometries should also be made easy by enforcing an explicit separation of basic concepts. The envisioned setting would in itself form a foundation for employing algorithms by providing required infrastructure, thereby enabling identical methods to be applied for, e.g., the minimization of action and shortest path calculation. It would be an important step of making the abstract concepts of differential geometry much more tangible in the field of scientific computing.

These concluding remarks had the intent of once more illuminating the work, the ideas, and the concepts presented in all of the preceding pages, while at the same time providing directions for further questing. If any of the goals have been successful, or all efforts of writing as well as reading have been for naught, is, in the end, up to the reader …