Software/Hardware for Scientific and Technical
Computing Research Overview



In addition to the design of algorithms, one aspect that concerns numerical analysts is that of getting algorithms implemented. (This might also be considered "scientific computing"). There are two sides to the implementation issue, one involving software and the other hardware. Since my research orientation leans towards the development of algorithms/procedures that are synthesized from higher level components. I'm interested in software tools/techniques for component based software construction. It was this interest that's led me to abandon FORTRAN and use C++ as my primary implementation language. C++ was designed for code management (by enabling object oriented programming techniques) and possesses features which I have found to be extremely useful for technical programming. In particular, though appropriate class design, one can create a software infrastructure in which the programming constructs are much closer to mathematics and so facilitate the rapid expression of mathematical procedures into working code. One side-effect of the decision to use C++ is that the codes that I use in my research, can, with a little work, be made useful to others. An example of this are the CAM C++ Class Libraries.

However, when it comes to writing interfaces, or creating programs that run in a distributed fashion, C++ is lacking. The C++ constructs to assist one in doing such things are outside of the language, and tend to be platform specific. For example a PC windows program developed using the Microsoft Foundation Classes (MFC) or Borland's Object Windows Library (OWL) doesn't work on Unix platforms. For such reasons I have been using Java to create user interfaces and provide an infrastructure for distributed computing. As with the CAM C++ libraries, some of the software created has be made available for general use. See Java Packages for Scientific/Technical Computation or Construction/Creation of Distributed Applications. Of course, I still rely on C++ and FORTRAN to implement CPU intensive aspects of the procedures I develop, so I've taken time to learn how to call C++ and FORTRAN programs from Java. (In actual fact, this was the first task I set myself to when learning Java --- it is not my idea of progress to be forced to rewrite previous research codes just to enable the construction of user interfaces.) I took notes on the process of doing this, and they appear in Putting a Java Interface on your C, C++, or FORTRAN Code.

Additionally, one has to be concerned with finding the computational resources to run the applications that one develops. Since many of these applications are computationally intensive, this can be a challenge. Fortunately, the widespread use of PCs and the fact that there is a strong consumer desire for multi-media capability, has led computer manufacturers to produce rather powerful (in terms of CPU performance) computers at very modest cost. Moreover, the existence of inexpensive and yet fast networking hardware allows one to combine these inexpensive machines to create platforms that have substantial CPU capabilities. To take advantage of this to satisfy the computational requirements of the research activities at UCLA, I've been interested in Beowulf type machines (collection of PC's networked together). In the early months of 1998 we assembled a 24 node machine, for details see UCLA Applied Mathematics Computational Cluster Project.

CRA 9/9/98


.