There is little argument that the programming of scientific applications, particularly on distributed memory parallel machines, remains difficult. Scientists are still productive, but this productivity comes at the high cost of designing and developing applications that are hard to maintain, modify, share with collaborators, explain, and scale to larger problems. Many of these challenges stem from applying languages and techniques that do not promote abstraction in programming. The human cognitive ability to unify and generalize detailed concepts into abstract representations is the most powerful tool available in scientific and engineering disciplines. Unfortunately, we have not yet been successful in transferring this technique into a general application development process. Programming via abstraction is not common practice.

One of the most promising areas of opportunity to address abstraction in scientific programming involves object-oriented technology. The advanced techniques of this approach can bring coherency to the design and programming process. Issues of interest include application-oriented design of scientific programs and language selection within an environment where new machines and languages are introduced and are rapidly changing. This represents a serious concern for software development, vital to the immediate and long-term success of production-oriented application design. These issues are even more critical as individuals consider how best to prepare themselves for the use of modern programming methodologies in the hope of being more productive.

Many scientific programmers are contemplating issues of language selection to increase productivity, communication and understanding. Since decision making could not be based on an empirical comparative analysis of a single application written using a variety of techniques and modern languages, other factors influenced these decisions. This may have included our current experience, educational trends, management concerns, or even interest in the latest and fastest growing technologies---high performance scientific JAVA has even been proposed.

Our research, for the first time, allows direct comparisons among the design, development and performance of an application based on existing and emerging programming methodologies. As a result, interest in this work has already generated attention, both within the United States and internationally. Recent requests for information have come from Brazil, Japan (Electrotechnical Laboratory at Tsukuba, Real World Computing Partnership, and University of Tokyo), Switzerland (Ecole Polytehnique Federale de Lausanne) and France (Institut National de Physique Nucleaire et de Physique des Particules, Centre National de la Recherche Scientifique). Institutions throughout the United States include Cornell Theory Center, Digital Equipment Corporation, Geophysical Institute at University of Alaska, Hewlett Packard, International Business Machines, Lawrence Livermore National Laboratories, Los Alamos National Laboratories, National Aeronautics and Space Administration (Goddard Space Flight Center), National Institute of Standards and Technology, Princeton Plasma Physics Laboratory, Sandia National Laboratories, Silicon Graphics Corporation, The Portland Group, United States Department of Energy, University of Colorado, and University of Illinois at Urbana-Champagne. Additionally, numerous international and domestic laboratories and institutions have indirectly acquired information over the Internet.

This growing level of attention, supported in part through activities of members from the examining committee and our article in Communications of the ACM , shows the interest and need for research of this kind. Therefore, thesis has been written for a wide audience, containing both a research and a tutorial perspective where appropriate. This work should be readily accessible to scientific application developers whose background involves fields outside of computer science.

Although we explore paradigm issues in terms of scientific computation in plasma simulation, the points addressed easily extend to broader areas of interest. Our focus on physics-related issues is limited; rather we concentrate on aspects of simulation that are affected by these issues. In most circumstances, the topics addressed will be common to most scientific applications. Hopefully, you will find the details and conclusions drawn within this thesis suitable to your specific areas of interest as well.

To help guide your reading, we have included briefs at the beginning of each chapter. These are not summaries, but rather an overview of the issues discussed. Although there may be some temptation to skip various sections based on your curiosity, the most effective way to read this text is from the beginning. It is essential that you examine Chapter 1, since discussion of how this work fits into current events is only described therein.

This work builds upon itself relying upon information, assumptions, experiences, and insights revealed from previous chapters. In many instances this information is not repeated. The best way to benefit from this work is to observe the progression, development, and evolution of ideas and concepts presented. This should also make the reading experience more enjoyable and educational.

Finally, detailed knowledge of Fortran 77, Fortran 90, and C++ programming is not a prerequisite for understanding the contributions of this work. Developers interested in Fortran 90 and object-oriented programming will find a brand new approach to scientific programming where the traditional aspects of efficiency are combined with the abstraction modeling benefits of object-oriented technology. While experienced Fortran 77 developers may benefit the most from the techniques and lessons presented, those experienced in C++ should find the comparative analysis to Fortran 90 of interest. Experienced C++ programmers will find many of the modeling and development issues across compilers and machines enlightening. Additionally, the work in object-based design paradigms for irregular computation will be of interest. Everyone considering language selection issues will find the sections on abstraction and the impact on object design in scientific programming useful, including the performance and language comparison sections. We hope that the analysis presented will inspire all readers to question and evaluate their development process, opening new design alternatives useful in modernizing their existing and future applications.