On April 14, 1992, at the Copper Mountain SIAM conference on iterative methods, a workshop was held to present C++ as a useful language for Scientific Computing. The workshop was organized by Dan Quinlan and included a panel of seven participants: Dinshaw Balsara, from Johns Hopkins University; Doug Clarkson, president of Dyad Software Corporation (developers of the M++ array class library); Carl Kesselman, from Caltech; James S. Peery, from Sandia National Laboratory; Daniel Quinlan, from University of Colorado at Denver; Allen C. Robinson, from Sandia National Laboratory; and Ulrich Ruede, from Technische Universitaet Muenchen. Approximately 70 participants attended the workshop and contributed to several interesting discussions.
C++ as a language for scientific computing has recently been gaining increased attention. Besides providing the programming concepts of an advanced language it can be highly efficient, is widely available and is very portable. Its features make it almost ideally suited for the tasks in mathematical and scientific software development. The class concept and operator overloading make the language extensible so that user defined data structures can be handled the same way as built-in data types. Thus all the FORTRAN-90 array language functionality can be provided on the library level. Similarly, most standardization problems for numerical libraries in FORTRAN would be much easier in C++, because the abstraction mechanisms of C++ allow more natural library interfaces that are not obscured by work-arounds for language deficiencies.
A common thread of the research done by all panel members has been the use of C++ as a language to simplify their research and application codes. The applications and research presented included C++ work done on both parallel and serial machines and in some cases using Sandia's application codes developed in C++. It was the goal of the workshop to present C++ as an alternative to the use of FORTRAN and to address the implementation and maintenance issues of increasingly complicated mathematical algorithms on increasingly complicated serial, vector, and parallel architectures.
Carl Kesselman presented a parallel C++ compiler, the Compositional C++ compiler CC++, for architecture-independent software development. This work adds several keywords to handle common issues in the design and implementation of parallel algorithms.
Doug Clarkson presented M++, a commercial array language class library written in C++ for development of numerical software. A brief description of the array class libraries and its features that include simplified indexing and extensibility to define more complicated array types. M++ includes support for arrays of all types, (double, float, int, long, etc.). Current work includes a port of M++ to the Cray.
Dan Quinlan presented current collaborative work with Max Lemke at the University of Duesseldorf, on a parallel array class library P++. P++ provides for data parallelism to be abstracted from the development of parallel numerical codes. P++ permits algorithms developed in the simplified serial environment and to be recompiled to run on distributed memory architectures. The same code runs across multiple architectures, including the Cray and distributed memory machines.
Dinshaw Balsara presented a local refinement research code for hypersonic flows and using the PPM scheme. The code, implemented in a combination of P++/C++ and FORTRAN, currently runs on the Cray and is a collaborative work with Dan Quinlan. When fully translated to use P++ it will run in parallel.
James Peery presented RALE++, a three dimensional, multi-material, arbitrary Lagrangian Eulerian hydrocode. Currently, RHALE++ is being developed for von Neumann, vector, and MIMD/SIMD computer architectures. James presented the current status of using C++ as the development language for RHALE++ and the efficiency of the language on SUN, CRAY, and NCUBE systems.
Allen Robinson presented work on CTH, a major production solid dynamics simulation code developed by Sandia National Laboratories. A Parallel CTH team is building a production hydrocode system, PCTH, for massively parallel computers with a major emphasis on portability and the utilization of commercially available software components for database generation and graphics. Major portions of the PCTH system are written using the object oriented language C++. Topics discussed included:
Ulrich Ruede presented research on self-adaptive multi-level local refinement methods. These methods require advanced algorithms and the manipulation of complicated dynamic data structures. The abstraction mechanisms of C++, like classes, inheritance, operator overloading and virtual functions support the design of advanced algorithms and greatly simplify their implementation. Additionally they improve modularity, generality and extensibility. At present C++ seems to be the only language providing these programming concepts with the efficiency required for large scale computing.