The COOLFluiD Framework: Design Solutions for High Performance Object Oriented Scientific Computing Software Andrea Lani 1 , Tiago Quintino 1,2 , Dries Kimpe 2,3 , Herman Deconinck 1 , Stefan Vandewalle 2 , and Stefaan Poedts 3 1 Von Karman Institute, Aerospace Dept., Chaussee de Waterloo 72, B-1640 Sint-Genesius-Rode, Belgium 2 Catholic University Leuven, Computer Science Dept., Celestijnenlaan 200A, B-3001 Leuven, Belgium 3 Catholic University Leuven, Center for Plasma-Astrophysics, Celestijnenlaan 200B, B-3001 Leuven, Belgium Abstract. The numerical simulation of complex physical phenomena is a challenging endeavor. Software packages developed for such purpose should combine high performance and extreme flexibility, in order to al- low an easy integration of new algorithms, models and functionalities, without penalizing run-time efficiency. COOLFluiD is an object-oriented framework for multi-physics simulations using multiple numerical meth- ods on unstructured grids, aiming at satisfying these needs. To this end, specific design patterns and advanced techniques, combining static and dynamic polymorphism, have been employed to attain modularity and ef- ficiency. Some of the main design and implementation solutions adopted in COOLFluiD are presented in this paper, in particular the Perspective and the Method-Command Patterns, used to implement respectively the physical models and the numerical modules. 1 The COOLFluiD Architecture COOLFluiD (Computational Object-Oriented Library for Fluid Dynamics) is a multi-physics and multi-methods platform that combines flexibility and high performance for the simulation of complex fluid dynamical phenomena on un- structured grids. The package is implemented in C++, which, during the last decade, has shown a great potential for scientific applications, offering significant support to develop both flexible and efficient code: Cogito, ELEMD ([Arge97]), MOUSE, Deal ([OONum]) are only few examples of available C++ platforms. An overview of the COOLFluiD framework is sketched in Fig.1. It con- sists of a kernel, where Simulation, the simulation manager object, and Mesh- Data, the basic data-structure object are implemented. Also the abstract in- terfaces for all the polymorphic objects are defined in the kernel, in particu- lar the ones for the physics description (PhysicalModel ) and for the numerical V.S. Sunderam et al. (Eds.): ICCS 2005, LNCS 3514, pp. 279–286, 2005. c Springer-Verlag Berlin Heidelberg 2005