cs0004004/cs0004004
1: \documentclass[10pt]{article}
2: \pagestyle{plain}
3: \bibliographystyle{plain}
4: 
5: \title{Mathematical Software: Past, Present, and 
6: Future\thanks{Dedicated to John R. Rice on occasion of his 65th 
7: birthday.  Contribution of the National Institute of Standards 
8: and Technology, not subject to copyright.  Mention of commercial 
9: products in this paper does not imply recommendation or 
10: endorsement by NIST.  Conversely, omission of a product's name 
11: does not imply unsuitability for use.  Author's address: 
12: Mathematical and Computational Sciences Division, Information 
13: Technology Laboratory, NIST, Stop 8910, 100 Bureau Drive, 
14: Gaithersburg, MD 20899-8910, USA}}
15: \author{Ronald F. Boisvert \\
16:         National Institute of Standards and Technology}
17: \date{}
18: 
19: \begin{document}
20: \maketitle
21: 
22: \begin{abstract}
23: This paper provides some reflections on the field of mathematical 
24: software on the occasion of John Rice's 65th birthday.  I 
25: describe some of the common themes of research in this field and 
26: recall some significant events in its evolution.  Finally, I 
27: raise a number of issues that are of concern to future developments.
28: \end{abstract}
29: 
30: \section{Introduction}
31: 
32: \subsection{The study of mathematical software}
33: 
34: The field of mathematical software is concerned with the science 
35: and engineering of solving mathematical problems with computers.  
36: The primary focus is the development of general-purpose software 
37: tools applicable to problems in a variety of disciplines.  There 
38: are a large number of facets to this work, including the 
39: following. 
40: 
41: \begin{itemize}
42: 
43: \item the development and analysis of algorithms for standard 
44: mathematical problems which occur in a wide variety of 
45: applications
46: 
47: \item the practical implementation of mathematical algorithms on 
48: computing devices, including study of interactions with 
49: particular hardware and software systems
50: 
51: \item the environment for the construction of mathematical 
52: software, such as computer arithmetic systems, languages, and 
53: related software development tools
54: 
55: \item software design for mathematical computation systems, 
56: including user interfaces
57: 
58: \item testing and evaluation of mathematical software, including 
59: methodologies, tools, testbeds, and studies of particular systems
60: 
61: \item issues related to the dissemination and maintenance of 
62: mathematical software
63: 
64: \end{itemize}
65: 
66: In 1977 John Rice aptly characterized the need for specialized study in 
67: this area with the following observation \cite{Rice79}.
68: \begin{quote}\it
69: Many sophisticated scientists produce naive software just as 
70: many sophisticated computer programmers produce naive science.
71: \end{quote}
72: Tremendous progress has been made in the mathematical software 
73: field in the past 25 years.  Yet, there continues to be a wide 
74: range of quality in existing software, in both the research and 
75: commercial domains.  Good mathematical software results from 
76: the application of certain principles, methodologies, and 
77: practices derived from both applied mathematics and computer 
78: science.  The 
79: study of these principles and practices is central to the field 
80: of mathematical software.  To this end, typical software 
81: engineering practices, while beneficial to the production of 
82: mathematical software systems, are not sufficient.  
83: Mathematical software operates in the milieu of scientific 
84: computing, which has a number of characteristics that distinguish 
85: it from other areas.  Among these are the following.
86: 
87: \begin{itemize}
88: \item {\bf Floating-point arithmetic.} Most scientific 
89: computations are performed with floating-point arithmetic.  
90: Consequently, rounding errors occur in most arithmetic 
91: operations.  Mathematical algorithms, therefore, must not only be 
92: correct in a strict mathematical sense, but they must control the 
93: accumulation of round-off, avoid catastrophic loss of 
94: significance from the subtraction of like quantities, and avoid 
95: unnecessary overflows and underflows.  Such problems are sometimes
96: unavoidable; software systems must be 
97: designed so that they do not fail when these anomalies do occur.
98: 
99: \item {\bf Approximations.}  Floating-point arithmetic certainly 
100: implies approximation at a very fine level.  However, more 
101: substantial approximations occur in mathematical computation.  
102: Infinite series are truncated, difficult-to-compute functions are 
103: approximated by polynomials, derivatives are approximated by 
104: differences, integrals are approximated by finite sums, curved domains 
105: are approximated by polygonal ones.  The combined effect of such 
106: approximations on the final result can be quite difficult to 
107: assess.  Analysis must be used to show that the correct solution 
108: is obtained as the approximations are made more precise (i.e., 
109: that the algorithm is convergent).  However, good software must 
110: do more.  It must provide mechanisms for a user to assess the 
111: quality of the result, and to alert the user when the result is 
112: suspect.  Well engineered software can use such metrics to 
113: automatically control the level of approximations, optimally 
114: adapting the algorithm to the situation at hand.
115: 
116: \item {\bf Infinite processes.}  Many mathematical computations 
117: consist of applying some infinite process that obtains the 
118: desired result only in the limit.  Such processes must be 
119: truncated for practical use.  Considerable research efforts have 
120: been involved in finding iterations that converge quickly.  
121: Deciding when to stop is always a difficult problem of practical 
122: concern to software developers.  Good software must employ 
123: techniques that detect divergence or too slow convergence and 
124: take appropriate action.
125: \end{itemize}
126: 
127: Coupled with these fundamental mathematical challenges are 
128: practical concerns about portability.  How can developers produce 
129: software with reliable, reproducible behavior when it must run in 
130: very different environments, with different types of processor 
131: architectures, arithmetic systems, memory hierarchies, operating 
132: systems, and language processors?  Such questions are critical in 
133: the study of mathematical software.
134: 
135: \subsection{The contributions of John R. Rice}
136:  
137: At this conference, we are celebrating John Rice's long and 
138: influential research career.  John has made fundamental 
139: contributions to the areas of approximation theory, numerical 
140: analysis, mathematical software, and computer science.  In the 
141: area of mathematical software, his technical contributions have 
142: had three overriding themes.
143: 
144: \begin{enumerate}
145: 
146: \item {\bf Architecture of scientific software systems.}  John 
147: has participated in the design and development of a variety of 
148: widely distributed mathematical software systems 
149: \cite{HoMR85, HoMR85a, RiRW84, Rice78, Rice84, RiBo85}.
150: In the course of this 
151: work he pioneered a number of design concepts which have 
152: influenced many systems. Among these are {\em 
153: polyalgorithms} \cite{Rice68}, {\em meta-algorithms} 
154: \cite{Rice75}, and {\em software parts} \cite{RiSw87}.
155: 
156: \item {\bf Raising the level of abstraction.}  Software users are 
157: more efficient when they can express their computational needs in 
158: the language of their technical field.  For applied mathematics, 
159: abstractions are based upon concepts of the calculus, not simple 
160: arithmetic operations encapsulated in programming languages like 
161: Fortran.  John Rice's work in high-level components and languages 
162: \cite{RiBo85,RiSw87}, intelligent interfaces 
163: \cite{HoRV90,HoRV92a,HoRV92}, and problem-solving environments 
164: \cite{GaHR94,RiBo96} have served to push abstractions to higher 
165: and higher levels.
166: 
167: \item {\bf Understanding software via experimentation.}  
168: Understanding the behavior of software is necessary in order to 
169: make practical decisions regarding algorithm selection
170: \cite{Rice76}. John has often stressed the importance of the use 
171: of experimentation in such evaluations.  The many small 
172: engineering decisions made in the course of translating an 
173: abstract algorithm into a working computer program can have an 
174: enormous impact on its performance characteristics.  John has 
175: devoted much time to developing testing and evaluation 
176: methodology \cite{BoHR79,HoRi80,RiHD81,Rice79a,WHRJ96}, and 
177: applying it to particular situations \cite{DyRR88, DHLR84, 
178: HoLR78, Rice83}.  Indeed, one of the principle applications of 
179: the ELLPACK system \cite{RiBo85} and its successors has been to 
180: the performance evaluation of software for partial differential 
181: equations.
182: 
183: \end{enumerate}
184: 
185: John's contributions to the field of mathematical software have 
186: been voluminous and far-reaching.  (In this paper I have only 
187: cited a few examples of his many writings on this subject.) 
188: In the remainder of this paper I will enumerate some of the major 
189: events in math software, pointing out some of John's key 
190: contributions along the way.  I will then describe several 
191: current issues facing the field and make several hazy predictions 
192: of the future.
193: 
194: 
195: \section{Mathematical Software Past}
196: 
197: \subsection{Beginnings}
198: 
199: The earliest applications of electronic computers were in science 
200: and engineering, for which mathematical computation played a 
201: central role.  Programming was a very difficult chore, done 
202: without modern aids like high-level languages, compilers and 
203: debuggers.  The first publication of a piece of mathematical 
204: software in a research journal probably occurred in 1949, when {\it Mathematical Tables 
205: and Other Aids to Computation} printed a UNIVAC code for the 
206: solution of Laplace's equation written in machine language \cite{SnLi49}.  
207: Such codes were very difficult to produce, and the need for reuse of 
208: software was recognized very early on.  In 1951, Wilkes, Wheeler 
209: and Gill presented one of the earliest program libraries, which 
210: was developed for the EDSAC\footnote{The EDSAC (Electronic Delay 
211: Storage Automatic Computer) was built in the late 1940s at the
212: Mathematical Laboratory of the University of Cambridge. It was
213: operational from 1949 until 1958.} \cite{WiWG51}.  
214: 
215: By the 1960s, the introduction of high-level 
216: programming languages, e.g. Algol and Fortran, had greatly eased 
217: the task of producing reusable mathematical software. The use of 
218: such languages was not without controversy, of course. Compiled 
219: code was not quite as efficient as hand-tuned assembly code, but 
220: most people were willing to accept this in light of the great 
221: savings in programmer time.  Also, the subprogram structure 
222: provided by these languages provided a simple framework for the 
223: construction and maintenance of libraries of utilities. 
224: 
225: In 1960, the Association for Computing Machinery (ACM) began a new
226: editorial department in the {\it Communications of the ACM} (CACM)
227: devoted to the publishing of algorithms.
228: Edited by J.~H.~Wegstein of the National Bureau of Standards (NBS),
229: this section printed the code of contributed Algol procedures
230: (most such codes were quite short).  Also, remarks on and
231: certifications of previously published codes were solicited. 
232: The first such contribution was a code for numerical quadrature 
233: submitted by R.~J.~Herbold of NBS \cite{Herb60}.  Each algorithm 
234: was given a number, and the set of algorithms later became known 
235: as the {\em Collected Algorithms of the ACM} (CALGO). 
236: 
237: Computer manufacturers also began to develop libraries for their 
238: users.  The most prominent of these was probably the IBM 
239: Scientific Software Package (SSP).  A number of laboratories, 
240: such as Bell Labs, Boeing, Harwell, and Monsanto, began the 
241: development of math software libraries for their internal use.
242: Several organizations, such as SHARE, the IBM user's group, began 
243: to collect such utilities for redistribution.  
244: 
245: Of course, subroutine libraries were not the only focus of 
246: researchers in this new field.  Some were imagining ways in which
247: these new powerful computers could be used to transform the way
248: in which applied mathematics was practiced.
249: Many of these ideas were discussed at the Symposium on Interactive Systems 
250: for Experimental Applied Mathematics held in in Washington, D.C. in August 1967
251: \cite{KlRe68}.  The vision there is remarkably clear; 
252: many of the participants reported on developments in technologies which would 
253: only finally begin to be realized in the 1980s and 1990s.  
254: At Purdue, for example, John Rice, Saul Rosen and colleagues
255: designed NAPSS (Numerical Analysis Problem-Solving System), an interactive 
256: mathematical problem-solving system which would accept input akin 
257: to normal mathematical notation \cite{RiRo66}, and would employ a variety
258: of heuristics to automate numerical analysis.  Unfortunately, the resources 
259: necessary for such an ambitious system exceeded even the 
260: supercomputers of the day (like the CDC 6400), and a fully 
261: functional system was never realized.  
262: 
263: 
264: \subsection{A community emerges}
265: 
266: Perhaps the first event that provided a real sense of community for 
267: researchers interested in the production and dissemination 
268: of reusable mathematical software 
269: was the {\em Mathematical Software Symposium} held at Purdue 
270: University in April 1970. John Rice organized the 
271: symposium\footnote{The organizing committee included Robert 
272: Ashenhurst, Charles Lawson, M. Stuart Lynn, and Joseph Traub}, which 
273: was sponsored by ACM and the Office of Naval Research, 
274: and the proceedings were published 
275: as a book by Academic Press \cite{Rice71}. Included in the 
276: proceedings were 23 papers, four descriptions of selected 
277: mathematical software, and more than 40 pages of introductory 
278: material prepared by Rice.
279: 
280: One of the recommendations from the Symposium was for the 
281: establishment of a journal that would publish papers related to 
282: mathematical software.  John Rice vigorously pursued this 
283: possibility\footnote{A committee that included Wayne Cowell, 
284: Lloyd Fosdick, Tom Hull, M. Stuart Lynn, and Joseph Traub worked 
285: with him.}.  After considerable negotiations with ACM and the
286: Society for Industrial and Applied Mathematics (SIAM), 
287: ACM agreed to publish the new journal.  Papers from an NSF-sponsored 
288: conference were used to provide articles to 
289: seed the journal.  {\em Mathematical Software II} was held at 
290: Purdue in May 1974.  There were 225 attendees, with 82 papers 
291: presented.  The best of those papers make up the majority of the
292: first volume of the {\em ACM Transactions on Mathematical Software} 
293: (TOMS) which published its first issue in 1975 with John Rice as 
294: Editor-in-Chief.  John continued in that position until 1993.
295: 
296: TOMS was chartered not only to publish traditional research 
297: papers, but also algorithms (with included code which would be 
298: refereed), certifications, translations, and remarks on 
299: previously published algorithms.  The Algorithms section of CACM 
300: was moved to TOMS, and hence TOMS 
301: algorithms were numbered beginning at 493.  One of the important 
302: features of the new journal was the establishment of a reliable 
303: Algorithms Distribution Service for CALGO.  The distribution, on 
304: magnetic tape, was performed on a cost-recovery basis by IMSL, 
305: Inc. Obtaining software in machine-readable form was much more 
306: useful than reading code on paper. This also allowed TOMS to 
307: adopt the policy of not printing the code of algorithms in the 
308: pages of its journal, thus saving much in production costs.
309: 
310: A third conference organized by John Rice, {\em Mathematical 
311: Software III}, was held at University of Wisconsin in 1977 
312: \cite{Rice77}.  By the end of the decade, mathematical software 
313: had emerged as a viable research area with an active community 
314: to support it.  After publishing 25 volumes, TOMS remains a 
315: vibrant outlet for the work of this community \cite{TOMS00}.
316: 
317: \subsection{Software emerges}
318: 
319: Another important activity in the 1970s were the numerous efforts 
320: to develop carefully constructed, systematized collections of 
321: mathematical software. One of the first of these was the NATS 
322: project, the National Activity to Test Software, which was 
323: conceived in 1970.  A joint venture of Argonne National 
324: Laboratory, Stanford University, and the University of Texas at 
325: Austin, NATS was designed to study problems in producing, 
326: certifying, distributing, and maintaining quality numerical 
327: software.  A key part of this effort was the production of two 
328: Fortran software packages, EISPACK \cite{GBDM77,SBDG76} for 
329: eigenvalue problems, and FUNPACK \cite{Cody75} for special functions. 
330: 
331: EISPACK, which first appeared in 1972, was based upon algorithms 
332: published in the 1960s in {\em Numerische Mathematik} and later 
333: collected by Wilkinson and Reinsch in the {\em Handbook for 
334: Automatic Computation} \cite{WiRe71}.  Although the core of 
335: EISPACK was largely a Fortran translation of these existing Algol 
336: codes, the project was enormously influential.  It set a new 
337: standard for quality transportable mathematical software, 
338: rigorously tested in a wide variety of computing environments. 
339: Its success inspired the development of many systematized 
340: collections, or ``PACKs'', in other areas: 
341: LINPACK for linear systems \cite{DBMS79}, 
342: FISHPAK for separable elliptic problems \cite{SwSw79}, 
343: DeBoor's B-spline interpolation package \cite{deBo79}, 
344: MINPACK for nonlinear systems \cite{MoGH80},
345: DEPAC for ordinary differential equations \cite{ShWa80},
346: Fullerton's function library FNLIB \cite{Full77}, 
347: Swarztrauber's FFTPACK for fast Fourier transforms \cite{Swar82},
348: and QUADPACK for numerical quadrature \cite{PiDK83}.
349: 
350: Of all the early ``PACKs'', LINPACK undoubtably saw the most 
351: widespread use.  One of the keys to LINPACK's success was the 
352: decision to base its coding on the newly proposed Basic Linear 
353: Algebra Subprograms (BLAS) \cite{LHKK79}. The BLAS performed 
354: elementary vector operations, such as norms, dot products, 
355: scaling, and vector sums.  The innermost loops in LINPACK's 
356: column-oriented algorithms occurred inside the BLAS.  This 
357: allowed optimization of the whole package by simply optimizing 
358: the BLAS. This approach proved quite successful, and many 
359: machine-specific versions of the BLAS were developed and 
360: supported by computer manufacturers.
361: 
362: The 1970s also saw great advances in software for ordinary 
363: differential equations (ODEs). Gear's code DIFSUB \cite{Gear71} 
364: provided a well designed framework for automatic integration of both 
365: stiff and non-stiff problems using linear multistep methods. 
366: Shampine and Gordon's 
367: ODE \cite{ShGo75} did the same for Runge-Kutta methods. Many 
368: subsequent packages were built using these basic designs.  Other 
369: influential packages included COLSYS for two-point boundary-value 
370: problems \cite{AsCR79} and DASSL\footnote{DASSL won the 1991 
371: Wilkinson Prize for Numerical Software} for differential 
372: algebraic systems \cite{Petz82}.
373: 
374: A number of high quality multi-purpose libraries also had their 
375: start in the 1970s.  In 1970, six British computing centers began 
376: an effort to develop a library for their ICL 1906A/S computers.  
377: The next year Mark 1 of the Nottingham Algorithm's 
378: Group (NAG) library was released.  Implementations for other 
379: systems followed, and in 1976 a not-for-profit company, Numerical 
380: Algorithms Group, Ltd., was formed to continue development and 
381: distribution.  The NAG effort continues today \cite{NAG00}.  The 
382: first commercial math library effort was also begun in 1970 with 
383: the incorporation in Houston, Texas of IMSL, Inc. by Charles W. 
384: Johnson and Edward Battiste. By the time the company showed its 
385: first profit in 1976, there were 430 library subscribers; the IMSL 
386: library remains a viable commercial product \cite{IMSL00}.
387: Bell Laboratories also developed a library, PORT, whose single-source 
388: approach to portability influenced many subsequent efforts
389: \cite{FoHS78}.
390: 
391: The development of ELLPACK, a system for elliptic boundary-value 
392: problems, also began in the mid 1970s.  This effort, which was 
393: led by John Rice, was a cooperative project of Purdue University, 
394: the University of Texas at Austin, Yale University, and others.  
395: In ELLPACK, the solution process was partitioned into a number of 
396: distinct phases (domain processing, discretization, indexing, 
397: linear system solution, and output), and the interfaces between 
398: these phases were carefully defined. This design allowed the 
399: development of a large library of components which could be 
400: easily composed to build algorithms for solving particular 
401: problems. ELLPACK also proved to be an excellent testbed for the 
402: evaluation of software for elliptic problems. To ease the use of 
403: the system, John Rice designed a very-high-level language to describe 
404: the problem to be solved, and to select the components to be used 
405: to solve it.  The system first became fully operational in 1978 
406: \cite{RiBo85}.  Many of the basic concepts in ELLPACK's design, 
407: such as high-level user interfaces and plug-and-play software 
408: parts technology, are in common use in modern problem-solving 
409: environments.
410: 
411: The development of mathematical software in the 1970s and early 1980s
412: is described in detail in the book {\em Sources and Development of
413: Mathematical Software} edited by Wayne Cowell \cite{Cowe84}.
414: 
415: \subsection{Increased access}
416: 
417: By the beginning of the 1980s a substantial collection of 
418: mathematical software, mostly in the form of Fortran subprograms, 
419: was available for use.  The user base for this software had grown 
420: substantially, and with it came a new problem: how to locate that 
421: needed software component.  The National Bureau of Standards (now 
422: NIST) developed an extensive catalog of such software. Their 
423: Guide to Available Mathematical Software (GAMS), based upon a 
424: detailed tree-structured problem-oriented classification system \cite{BoHK85}, 
425: allowed readers to see which components of which libraries and 
426: packages, both public domain and commercial, were available to 
427: solve each problem.  The catalog remains available today as an 
428: online resource \cite{NIST00}.
429: 
430: Another barrier to the widespread use of software developed by 
431: the research community was simply the process of obtaining the 
432: code.  One had to locate the author, request a magnetic tape, 
433: and attempt to decipher its format.  Useful software was often 
434: lost to the community when an author changed institutions and 
435: there was no longer support for distributing it.  In 1985, Jack 
436: Dongarra, then at Argonne National Labs, and Eric Grosse at Bell 
437: Labs, started a software repository they called {\em netlib} 
438: \cite{DoGr87}, which pioneered the use of computer networks in 
439: software distribution.  Software could be obtained automatically
440: by return email after 
441: sending requests to an address whose email was processed by a Unix 
442: daemon.  The ready availability of such software changed the way 
443: in which many researchers worked.  Many more made routine use of 
444: high quality software, and many others were freed of the 
445: necessity of maintaining their own private repositories.  Now 
446: Web-accessible and supported by the University of Tennessee at 
447: Knoxville and Bell Labs, with mirrors worldwide, {\em netlib} 
448: remains the premier repository of software developed by the 
449: mathematical software community \cite{BDGR95}.
450: 
451: The 1980s also saw the first commercial success for general-purpose 
452: interactive systems for mathematics.  A system for matrix 
453: computations developed as a teaching aid during the period 1977-84
454: by Cleve Moler at the University of New Mexico, was 
455: commercialized as a tool for control system engineers.  Today MATLAB is 
456: a very popular system for scientific computing \cite{Matl00}.  
457: The overall structure of modern 
458: interactive mathematics systems was greatly influenced by the 
459: system Mathematica developed by Stephen Wolfram in 1988 
460: \cite{Wolf99}.  Mathematica was the first commercial system to 
461: integrate symbolic, numerical, and graphical capabilities into a 
462: single package.  The growing availability of personal computers and 
463: workstations was an important factor in the success of these 
464: systems.  With these tools, the use of mathematical software was 
465: beginning to expand to those with little experience in numerical 
466: methods or even programming.
467: 
468: \subsection{New architectures}
469: 
470: The 1980s also brought vector and parallel computers into widespread 
471: use, and with them additional challenges to the design of 
472: mathematical software.  Vector processor vendors developed 
473: specialized math libraries tuned for their systems, mainly 
474: containing software for linear systems and FFTs.  These solutions 
475: emerged because the performance of linear algebra software such 
476: as LINPACK was disappointing on vector register architectures 
477: like the Cray and Convex.  The main reason for this was the fact 
478: that moving data from memory to vector registers was very costly, 
479: and that LINPACK's column-oriented algorithms, based on the BLAS, 
480: necessitated more data movement than was really necessary. 
481: 
482: In 1984 John Rice hosted a workshop at Purdue (``ParVec 
483: Workshop Number 4'') in which a variety of schemes for developing portable 
484: high-performance software for vector parallel systems were 
485: proposed \cite{Rice84a}.  
486: Jack Dongarra and Sven Hammarling proposed the development of 
487: new classes of BLAS:  
488: Level 2 BLAS for matrix-vector operations, and Level 3 BLAS for 
489: matrix-matrix operations.  Encapsulating $O(n^2)$ and $O(n^3)$ 
490: operations, respectively, as fundamental operations would provide 
491: much more opportunity to optimize core operations on different 
492: processors.  These new BLAS \cite{DDHD90,DDHH88} would provide 
493: the basis for a major new linear algebra package released in 
494: 1992. LAPACK \cite{ABBB99}, which included the functionality of 
495: both EISPACK and LINPACK, used block-oriented algorithms 
496: in which the fundamental operations were now matrix operations 
497: encapsulated in the Level 3 BLAS.  These have proven to be highly 
498: efficient on modern vector processors and symmetric multiprocessors.  
499: Every major computer manufacturer now supports tuned BLAS for 
500: their systems and incorporates LAPACK in their math library.  
501: Community efforts are currently underway to extend the BLAS in 
502: new directions, such as sparse matrix operations \cite{BLAST00}
503: 
504: In the late 1980s multiprocessor systems of widely differing design 
505: were becoming routinely available, and with them a host of new 
506: programming models, supported by specialized message-passing 
507: primitives.  Developing portable software for the class of
508: distributed memory (multiple instruction multiple data, or MIMD) 
509: systems became a new challenge.  The PVM system developed  
510: in 1991 provided a useful abstraction 
511: for parallel programming and was very widely adopted 
512: \cite{GBDJ94}.  Its implementation on many parallel machines 
513: demonstrated the usefulness and feasibility of a common 
514: message-passing infrastructure.  This led to a grass root message-passing 
515: standardization effort.  The resulting Message Passing Interface 
516: (MPI) transformed the landscape for distributed parallel 
517: computing \cite{GSNL98}.
518: 
519: One of the first portable math software libraries for distributed 
520: architectures was ScaLAPACK, a distributed memory counterpart of 
521: LAPACK linear system solvers \cite{BCCD97}.  This package became 
522: the core of several multi-purpose distributed memory math 
523: software libraries which first appeared in the 1990s.  Among 
524: these are the NAG Parallel Library \cite{NAG00}, IBM's PESSL 
525: \cite{IBM97}, and the European PINEAPL effort \cite{PINE00}.  
526: 
527: The increasing complexity of scientific software systems being 
528: developed in the 1990s led to an interest in new software 
529: architectures.  Object-oriented approaches to the development of 
530: mathematical software began to be seriously considered.  The 
531: notorious inefficiencies of pure object-oriented design, and the 
532: lack of language standardization made such pursuits difficult.  
533: Nevertheless, approaches that allowed many of the advantages of 
534: object-oriented design without sacrificing efficiency were 
535: developed.  LAPACK++, a subset of the linear systems solvers in 
536: LAPACK written in C++, was one of the first such successful 
537: packages \cite{DoPW93}.  Today object-oriented approaches are 
538: routinely used in scientific computing.
539: 
540: \subsection{Expanding vision}
541: 
542: By the 1990s, rapidly increasing computer power was leading to new visions for 
543: the future of mathematical software systems.  During that period, 
544: for example, John Rice and colleagues led in the establishment of 
545: a new community of researchers interested in exploiting the 
546: promise of expert systems for numerical computing.  In a series 
547: of conferences held at Purdue \cite{HoRV90,HoRV92a,HoRV92}, the 
548: use of AI approaches for such tasks as algorithm selection, 
549: automatic programming, and process management were explored.
550: 
551: By this time, computation had become an essential 
552: ingredient in the practice of science and engineering.  Interest 
553: in computational science as a new field of study was beginning, 
554: and interdisciplinary programs for training its practitioners 
555: were being established in many universities.  John Rice and 
556: others began to develop a new vision for mathematical software 
557: systems to support computational science research.  These 
558: systems, called {\em problem-solving environments} \cite{GaHR94, 
559: RiBo96}, would provide natural graphical user interfaces in which 
560: scientists describe their problems using the vocabulary of 
561: their native discipline.  They would provide access to rich 
562: libraries of problem-solving components enabling Web-based 
563: parallel and distributed computation.  Users would be able to 
564: interact with ongoing computations, to easily visualize results, 
565: to manage a large database of experimental results, and to ask 
566: advice of expert advisory systems.  Many small-scale special-purpose 
567: systems now under development and use can be classified as 
568: problem-solving environments, and research groups throughout the 
569: world are working on infrastructure necessary for the routine 
570: construction and use of such systems.  Work at Purdue on parallel 
571: ELLPACK \cite{HoRP89}, Web\-ELLPACK \cite{MWHR97}, and PYTHIA 
572: \cite{WHRJ96} are serving to address issues in PSE design.  
573: Examples of current work in network-based scientific computing
574: are Netsolve \cite{CaDo98}, the NEOS optimization server
575: \cite{CzMM98}, and the computational grid \cite{FoKe97}.
576: 
577: The vision of scientific computation in heterogeneous distributed 
578: environments places stringent requirements on the portability and 
579: interoperation of scientific software that are extremely 
580: difficult to achieve \cite{BCPW97}.  Such needs have sparked interest 
581: in the use of common virtual environments such as Java\footnote{Java is a 
582: trademark of Sun Microsystems.} for 
583: computational science and engineering.  The Java language and its 
584: environment (the Java Virtual Machine), which has become 
585: available on nearly every computing platform, provides a fixed 
586: floating-point model, threads, remote execution, standard GUIs, 
587: and other facilities within a simple object-oriented programming 
588: language.  While these are the main facilities necessary for the 
589: construction of problem-solving environments, there has been some 
590: reluctance to adopt Java within the scientific community due to 
591: concerns about efficiency and the lack of several programming 
592: conveniences important to scientists and engineers \cite{BDPR98}.  
593: Community efforts such as the Java Grande Forum are seeking to
594: improve this situation \cite{JGFN00}.
595: 
596: Virtual environments do not necessarily solve the problem of 
597: performance portability, since virtual machine instructions must 
598: be mapped on to local computer hardware for execution.  Modern 
599: computing hardware is extremely complex, characterized by 
600: multiple processing units, vector pipes, register farms, several 
601: levels of cache (with increasing access times), local memory, 
602: remote memory, and disk storage.  Getting the highest performance 
603: possible requires that the programmer take into account all the 
604: special properties of the system in use.  This leads to extremely 
605: complex software even for the simplest of tasks.  Matrix 
606: multiplication can turn into a 10,000-line polyalgorithm.  Recent 
607: approaches have provided new hope for overcoming this 
608: software development nightmare.  Clint Whaley and Jack Dongarra 
609: have recently developed a system, called ATLAS, for Automatically 
610: Tuned Linear Algebra Subprograms \cite{WaDo98}.  ATLAS generates highly 
611: efficient BLAS for a given architecture using an experimental 
612: approach.  By running many hundreds of tests, ATLAS determines 
613: the most efficient way to implement a given operation.  The 
614: result is consistently on par with, and often exceeding, code 
615: which takes expert programmers weeks to develop.  
616: Matteo Frigo and Stephen Johnson have taken 
617: a similar approach in the computation of fast Fourier transform 
618: \cite{FrJo98}.  For FFTs, hardware also interacts with the prime 
619: factorization of the sequence length $n$ to add further 
620: complication.  FFTW, the Fastest Fourier Transform in the West, 
621: uses heuristics and experimentation to develop a just-in-time 
622: strategy for fast computation for a given $n$ on a given 
623: processor.\footnote{FFTW won the 1999 Wilkinson Prize for 
624: numerical software.}
625: 
626: 
627: \section{ Mathematical Software Present}
628: 
629: In this section I point out a variety of meta-issues that face 
630: mathematical software researchers today.
631: 
632: \subsection{Mass-market software}
633: 
634: Until recently mathematical software was produced mostly by experts in 
635: numerical analysis as a byproduct of their research in algorithms.
636: Users of this software also were fairly sophisticated, with some 
637: experience in numerical
638: algorithm development themselves.  They had an appreciation of the
639: limitations of numerical algorithms, and the necessity of careful
640: verification of results, even when using software developed by experts.
641: 
642: Today's community of mathematical software developers and users is much
643: larger, and much more diverse.  The great demand for mathematical
644: computations has made mass-marketed mathematical software
645: profitable.  Commercially supported
646: mathematical and statistical software is now widely available, with high-level
647: interfaces that allow use by non-programmers.  Such users often do not have
648: the background necessary to recognize the difference between a difficult
649: problem and a routine one.  The mathematical landscape is still littered 
650: with pitfalls, and these users may be too trusting of the results produced 
651: by the scientific software systems that they use.  Programmers who add
652: mathematical and statistical capabilities to commercial software systems 
653: are no longer experts in numerical analysis.  They may be content to code
654: up a formula from a book without giving thought to its numerical properties.
655: The problem may be even more severe in systems that are not overtly
656: mathematical in nature.  Mathematical computations are increasingly being
657: done in embedded devices, coded by programmers whose mathematical
658: sophistication may be suspect.
659: 
660: As a result, in spite of tremendous progress in numerical methods and 
661: software, many users of modern mathematical software are at risk.  There is 
662: now a desperate need for numerical analysts to develop and apply
663: methodologies for the validation of mathematical and statistical software.
664: Techniques, tools, reference data, and reference software are needed to 
665: support critical evaluations of mathematical software by developers and
666: users \cite{Bois97}.  
667: Unfortunately, there is little interest and support within the 
668: research community for such activities.  
669: 
670: Those software developers who seek advice regarding numerical software
671: production are likely to look to popular sources like Numerical Recipes
672: \cite{PTVF93}.  Books like this provide a reasonably good introduction to
673: numerical methods, and the programs they include provide good examples of
674: the basic techniques.  Programs like these are often incorporated
675: wholesale into applications, in spite of the fact that they are typically
676: less efficient, robust, and reliable than state-of-the-art mathematical
677: software.  The mathematical software community needs more popularizers
678: who can bring the message of good numerical software design to those in
679: other fields.
680: 
681: \subsection{Tower of Babel}
682: 
683: For many years there was one language for scientific computing: Fortran.
684: This greatly simplified the development and reuse of mathematical software
685: components.  Today we are faced with a plethora of programming languages
686: in use for scientific computing.  Though officially obsolete, Fortran 77 is 
687: still the language of
688: many.  Good compilers are now available for Fortran 90, and many have  
689: been extended to support Fortran 95, the current Fortran
690: standard, although their adoption by programmers has been slow in coming.  The C language
691: has proven much more popular, for which excellent compilers are now
692: available.  Most GAMS users who cannot find the software they seek are 
693: looking for C procedures.  C++, the object-oriented extension to C, is the
694: choice for a growing number of new mathematical modeling projects.
695: Unfortunately, C++ has not, until recently, had an agreed-to standard, and,
696: as a result, developing portable software has been difficult.  Java, the
697: popular network-aware object-oriented programming language developed by Sun, 
698: is being seriously considered by many, although its performance and language
699: features leave much to be desired.  The fact that Java is now being widely
700: taught in universities insures its future.  Finally, many software components
701: are being developed in the very-high-level languages used in specialized 
702: systems; MATLAB is the primary example.
703: 
704: We are clearly facing a transition in computer languages for science and
705: engineering computation.  Numerical analysts no longer have much influence
706: on the choice of language of those doing numerical computing.  
707: Language choices are more often made based
708: on other considerations, such as the need for convenient and portable
709: graphical user interfaces, visualization tools, and other critical
710: system services.  While such services are largely
711: unavailable to Fortran programmers wishing to develop portable systems, 
712: they are conveniently at hand in C,
713: C++, and Java.  The increased portability afforded by the widespread
714: availability of Java Virtual Machines on Windows, Unix, and Apple 
715: platforms, has made Java a very attractive option.  While
716: mixed-language programming is possible, and does provide the ability 
717: to reuse legacy Fortran software, this option is not popular among users.
718: It adds complexity to the software project, while making the code more
719: difficult to transport.  
720: 
721: Unfortunately, there is almost no support for the migration of the existing base
722: of Fortran mathematical software components to other languages.
723: As a result, this well-engineered software is being increasingly bypassed
724: in favor of inferior home-grown solutions.
725: 
726: \subsection{The risks of self-publishing}
727: 
728: The rise of the Internet has greatly eased the exchange of information
729: among researchers.  It is simple and convenient for research groups
730: to develop a Web page to distribute software and documentation to potential
731: users.  While this has led to increased access to research software, it
732: places the long-term maintenance of the output of the research community
733: in jeopardy.  Project Web pages on departmental servers are not permanent
734: fixtures.  Nevertheless, many researchers are using such facilities in
735: place of submitting their software to more permanent archives such as
736: {\em netlib} or the {\em Collected Algorithms of the ACM}.  There
737: is a danger that much of the currently available expertise embedded in such
738: software will be lost to future researchers.
739: 
740: 
741: \section{Mathematical Software Future}
742: 
743: In this section, I offer a few predictions regarding future
744: mathematical software research and usage.
745: 
746: \vspace{1em}
747: 
748: \noindent
749: {\bf Prediction:} Within five years ACM will cease print publication of TOMS.
750: 
751: \vspace{0.75em}
752: 
753: Subscriptions to TOMS have been dropping at the rate of about
754: 5 percent per year for some time.  Other ACM journals, and indeed
755: most other mathematics and computer science journals, are
756: experiencing the same phenomenon.  One of the reasons for this is
757: the proliferation of specialized journals, principally developed
758: by commercial publishers.  
759: 
760: For some time, ACM has been considering mechanisms for maintaining
761: their publication program as a viable service to the community.
762: The solution to this problem is found in the ACM Digital Library
763: (ACMDL) which premiered in 1998 \cite{ACM00}.  The ACMDL provides
764: its subscribers with online access to {\em all} ACM journal articles
765: and conference proceedings published since 1985 at a subscription
766: fee which is less than the cost of three printed journals.  Currently
767: this accounts for more than 350,000 pages of text.  Acceptance of the 
768: ACMDL by members and subscribers has been overwhelming, providing ACM
769: with the additonal revenue to begin the work of extending the ACMDL 
770: holdings to include 
771: all material published by ACM since its inception in 1947.  
772: At the same time, the success of the ACMDL has contributed to 
773: a further 25 percent drop in print subscriptions in 1999.  If present
774: trends continue, printed versions of ACM journals will be no longer
775: be sustainable in five years time.  Instead, they will be superceded
776: by their electronic counterparts.
777: 
778: The ACMDL will serve to blur the distinctions between individual ACM journals.
779: The concept of a journal will be replaced by that of an input stream to the
780: ACMDL controlled by a certification authority, i.e., a board of editors
781: supported by volunteer referees.  In such an environment, it will be much
782: easier (and much less financially risky) for ACM to initiate new refereed
783: input streams, and to phase out those which have become less productive.
784: Rather than subscribe to individual journals, ACMDL subscribers will have
785: access to an individually tailored notification service which will alert
786: them to the availability of new articles in their areas of interest.
787: 
788: Publications in the ACMDL will not be restricted to articles with a severe
789: page limit.  Extended appendices will be easily accommodated, as will other
790: artifacts such as software, audio, video, etc.
791: 
792: \vspace{1em}
793: 
794: \noindent
795: {\bf Prediction:} Users will no longer install mathematical software on their 
796: workstations.
797: 
798: \vspace{0.75em}
799: 
800: The need for instantaneous distribution and use of mathematical software 
801: components in heterogenous network environments will
802: put new pressures for software portability.  A key element of the solution will
803: be standardized virtual environments in which software can execute.  Java is
804: an example of such an environment.  Its widespread availability also provides a 
805: new model for software distribution.  Complex conglomerations of source code 
806: will no longer need to be explicitly downloaded and installed on the local 
807: systems in advance of their use.  Instead pre-compiled bytecodes for the virtual
808: machine will be able to be downloaded from sites of developers or vendors on
809: demand.  This also provides a solution to the problem of distributing patches
810: and updates to software.  Rather than purchasing an entire library, software
811: users will have the option of subscribing to a service, paying only for the
812: portions of the library that they actually use.
813: 
814: Another new model for software reuse in a network environment is based on a
815: remote execution paradigm.  In this case, problem-solving services are made
816: available to users over the network.  When a problem need be solved, a 
817: message containing a high-level specification of the problem is sent to
818: the service provider, who provides both the software and the execution cycles
819: needed to solve it.  This model is probably more appropriate for access to
820: large scale systems, like finite-element modeling packages.
821: 
822: \vspace{1em}
823: 
824: \noindent
825: {\bf Prediction:} The percentage of people directly using math software 
826: libraries will decrease.
827: 
828: \vspace{0.75em}
829: 
830: The wide availability of problem-solving environments (PSEs) for various domains
831: will bring computational capabilities to an even wider audience than today.
832: These users will make use of the services of the PSE, blissfully unaware
833: of the complex system, involving software libraries, expert systems, and remote 
834: execution, which are being marshalled on their behalf.
835: 
836: However, if this vision is to be realized, a new class of software designers 
837: must be trained.  They must be well-versed in numerical analysis, mathematical
838: algorithms, modern software design, and high-performance computing and
839: communications.  Additional research in mathematical software must be 
840: performed to provide new methods for improving the robustness and
841: adaptibility of mathematical software systems, and to address new problem 
842: areas.  And finally, new methods
843: for assessing the correctness and reliability of complex mathematical software
844: systems must be devised and deployed.  
845: 
846: Mathematical software is still a vital and vibrant research area that will
847: increase in importance in the coming decades.  We are grateful to John Rice for
848: his vision and leadership in getting us here.
849: 
850: %%%{\small \bibliography{JohnRice}}
851: 
852: {\small
853: \begin{thebibliography}{10}
854: 
855: \bibitem{ACM00}
856: {ACM Digital Library}.
857: \newblock Association for Computing Machinery, New York.
858: \newblock See {\tt http://www.acm.org/dl/}.
859: 
860: \bibitem{ABBB99}
861: E.~Anderson, Z.~Bai, C.~Bischof, S.~Blackford, J.~Demmel, J.~Dongarra, J.~Du
862:   Croz, A.~Greenbaum, S.~Hammarling, A.~McKenney, and D.~Sorensen.
863: \newblock {\em {LAPACK} User's Guide}.
864: \newblock {SIAM} Publications, Philadelphia, third edition, 1999.
865: \newblock See also {\tt http://www.netlib.org/lapack/}.
866: 
867: \bibitem{AsCR79}
868: U.~Ascher, J.~Christiansen, and R.~D. Russell.
869: \newblock A collocation solver for mixed order systems of boundary value
870:   problems.
871: \newblock {\em Mathematics of Computation}, 33:659--679, 1979.
872: 
873: \bibitem{BCPW97}
874: L.~S. Blackford, A.~Cleary, A.~Petitet, R.~C. Whaley, J.~Demmel, I.~Dhillon,
875:   H.~Ren, K.~Stanley, J.~Dongarra, and S.~Hammarling.
876: \newblock Practical experience in the numerical dangers of heterogeneous
877:   computing.
878: \newblock {\em {ACM} Transactions on Mathematical Software}, 23(12):133--147,
879:   1997.
880: 
881: \bibitem{BCCD97}
882: S.~Blackford, J.~Choi, A.~Cleary, E.~D'Azevedo, J.~Demmel, I.~Dhillon,
883:   J.~Dongarra, S.~Hammarling, G.~Henry, A.~Petitet, K.~Stanley, D.~Walker, and
884:   R.~C. Whaley.
885: \newblock {\em {ScaLAPACK} USers' Guide}.
886: \newblock {SIAM} Publications, Philadelphia, 1997.
887: \newblock See also {\tt http://www.netlib.org/scalapack/}.
888: 
889: \bibitem{BLAST00}
890: {BLAS Technical Forum}.
891: \newblock See {\tt http://www.netlib.org/cgi-bin/checkout/blast/\-blast.pl}.
892: 
893: \bibitem{BoHR79}
894: R.~Boisvert, E.~N. Houstis, and J.~R. Rice.
895: \newblock A system for performance evaluation of partial differential equations
896:   software.
897: \newblock {\em IEEE Trans. Software Eng}, 5:418--425, 1979.
898: 
899: \bibitem{Bois97}
900: Ronald~F. Boisvert, editor.
901: \newblock {\em The Quality of Numerical Software: Assessment and Enhancement}.
902: \newblock Chapman and Hall, London, 1997.
903: 
904: \bibitem{BDPR98}
905: Ronald~F. Boisvert, Jack~J. Dongarra, Roldan Pozo, Karin~A. Remington, and
906:   G.~W. Stewart.
907: \newblock Developing numerical libraries in {Java}.
908: \newblock {\em Concurrency: Practice and Experience}, 10(11-13):1117--1129,
909:   1998.
910: 
911: \bibitem{BoHK85}
912: Ronald~F. Boisvert, Sally~E. Howe, and David~K. Kahaner.
913: \newblock {GAMS}---a framework for the management of scientific software.
914: \newblock {\em {ACM} Transactions on Mathematical Software}, 11:313--355, 1985.
915: 
916: \bibitem{BDGR95}
917: Shirley Brown, Jack Dongarra, Eric Grosse, and Tom Rowan.
918: \newblock The netlib mathematical software repository.
919: \newblock {\em D-LIB Magazine}, September 1995.
920: \newblock See {\tt http://www.dlib.org/dlib/september95/09contents.html}.
921: 
922: \bibitem{CaDo98}
923: Henri Cassanova and Jack Dongarra.
924: \newblock Applying {Netsolve's} network-enabled server.
925: \newblock {\em IEEE Computational Science \& Engineering}, 5(3):57--67,
926:   July-September 1998.
927: 
928: \bibitem{Cody75}
929: W.~J. Cody.
930: \newblock The {FUNPACK} package of special function subroutines.
931: \newblock {\em {ACM} Transactions on Mathematical Software}, 1:13--25, 1975.
932: 
933: \bibitem{IBM97}
934: International Business~Machines Corporation.
935: \newblock {\em Parallel Engineering and Scientific Subroutine Library for
936:   {AIX}, Guide and Reference}, 1997.
937: 
938: \bibitem{Cowe84}
939: Wayne~R. Cowell, editor.
940: \newblock {\em Sources and Development of Mathematical Software}.
941: \newblock Prentice-Hall, Englewood Cliffs, {NJ}, 1984.
942: 
943: \bibitem{CzMM98}
944: Joseph Czyzk, Michael~P. Mesnier, and Jorge~J. Mor\'{e}.
945: \newblock The {NEOS} server.
946: \newblock {\em IEEE Computational Science \& Engineering}, pages 68--75, 1998.
947: \newblock See also {\tt http://www-fp.mcs.anl.gov/otc/}.
948: 
949: \bibitem{deBo79}
950: Carl de~Boor.
951: \newblock {\em A Practical Guide to Splines}, volume~27 of {\em Applied
952:   Mathematical Sciences}.
953: \newblock Springer--Verlag, New York, 1978.
954: 
955: \bibitem{DoPW93}
956: J.~Dongarra, R.~Pozo, and D.~Walker.
957: \newblock {LAPACK++}: A design overview of object-oriented extensions for high
958:   performance linear algebra.
959: \newblock In {\em Proceedings of Supercomputing '93}, pages 162--171. IEEE
960:   Computer Society, 1993.
961: \newblock See also {\tt http://www.netlib.org/lapack++/}.
962: 
963: \bibitem{DBMS79}
964: J.~J. Dongarra, J.~R. Bunch, C.~B. Moler, and G.~W. Stewart.
965: \newblock {\em {LINPACK} Users' Guide}.
966: \newblock {SIAM} Publications, Philadelphia, 1979.
967: 
968: \bibitem{DoGr87}
969: Jack Dongarra and Eric Grosse.
970: \newblock Distribution of mathematical software via electronic mail.
971: \newblock {\em Communications of the {ACM}}, 30(5):403--407, 1987.
972: 
973: \bibitem{DDHD90}
974: Jack~J. Dongarra, Jeremy~Du Croz, Sven Hammarling, and Iain~S. Duff.
975: \newblock An set of level 3 basic linear algebra subprograms.
976: \newblock {\em {ACM} Transactions on Mathematical Software}, 16:1--17, 1990.
977: 
978: \bibitem{DDHH88}
979: Jack~J. Dongarra, Jeremy~Du Croz, Sven Hammarling, and Richard~J. Hanson.
980: \newblock An extended set of {FORTRAN} basic linear algebra subprograms.
981: \newblock {\em {ACM} Transactions on Mathematical Software}, 14:1--17, 1988.
982: 
983: \bibitem{DHLR84}
984: W.~R. Dyksen, E.~N. Houstis, R.~E. Lynch, and J.~R. Rice.
985: \newblock The performance of the collocation and {Galerkin} methods with
986:   {Hermite} bicubics.
987: \newblock {\em {SIAM} Journal on Numerical Analysis}, 21:695--715, 1984.
988: 
989: \bibitem{DyRR88}
990: W.~R. Dyksen, C.~J. Ribbens, and J.~R. Rice.
991: \newblock The performance of numerical methods for elliptic problems with mixed
992:   boundary conditions.
993: \newblock {\em Numerical Methods for Partial Differential Equations},
994:   4:347--361, 1988.
995: 
996: \bibitem{FoKe97}
997: Ian Foster and Carl Kesselman.
998: \newblock Globus: A metacomputing infrastructure toolkit.
999: \newblock {\em International Journal of Supercomputer Applications},
1000:   11(2):115--128, 1997.
1001: 
1002: \bibitem{FoHS78}
1003: P.~A. Fox, A.~D. Hall, and N.~L. Schryer.
1004: \newblock The {PORT} mathematical subroutine library.
1005: \newblock {\em {ACM} Transactions on Mathematical Software}, 4:104--126, 1978.
1006: 
1007: \bibitem{FrJo98}
1008: Matteo Frigo and Steven~G. Johnson.
1009: \newblock {FFTW}: An adaptive software architecture for the {FFT}.
1010: \newblock In {\em Proceedings of the IEEE International Conference on
1011:   Acoustics, Speech, and Signal Processing}, volume~3, pages 1381--1384. IEEE
1012:   Computer Society, 1998.
1013: \newblock Also see {\tt http://www.fftw.org/}.
1014: 
1015: \bibitem{Full77}
1016: Wayne~F. Fullerton.
1017: \newblock Portable special function routines.
1018: \newblock In Wayne Cowell, editor, {\em Portability of Numerical Software},
1019:   pages 452--483. Springer--Verlag, New York, 1977.
1020: \newblock See also {\tt http://www.netlib.org/fnlib/}.
1021: 
1022: \bibitem{GaHR94}
1023: E.~Gallopoulos, E.~N. Houstis, and J.~R. Rice.
1024: \newblock Computer as thinker/doer: Problem-solving environments for
1025:   computational science.
1026: \newblock {\em IEEE Computational Science \& Engineering}, 1(2):11--23, Summer
1027:   1994.
1028: 
1029: \bibitem{GBDM77}
1030: B.~S. Garbow, J.~M. Boyle, J.~J. Dongarra, and C.~B. Moler.
1031: \newblock {\em Matrix Eigensystem Routines -- {EISPACK} Guide Extension},
1032:   volume~51 of {\em Lecture Notes in Computer Science}.
1033: \newblock Springer--Verlag, New York, 2nd edition, 1977.
1034: 
1035: \bibitem{Gear71}
1036: C.~William Gear.
1037: \newblock {\em Numerical Initial Value Problems in Ordinary Differential
1038:   Equations}.
1039: \newblock Prentice-Hall, Englewood Cliffs, {NJ}, 1971.
1040: 
1041: \bibitem{GBDJ94}
1042: Al~Geist, Adam Beguelin, Jack Dongarra, Weicheng Jiang, Robert Mancheck, and
1043:   Vaidy Sunderam.
1044: \newblock {\em {PVM}: Parallel Virtual Machine}.
1045: \newblock {MIT} Press, 1994.
1046: \newblock See also {\tt http://www.netlib.org/pvm/}.
1047: 
1048: \bibitem{GSNL98}
1049: William Gropp, Marc Snir, Bill Nitzberg, and Ewing Lusk.
1050: \newblock {\em MPI: The Complete Reference}.
1051: \newblock Scientific and Engineering Computation Series. {MIT} Press, 1998.
1052: 
1053: \bibitem{NIST00}
1054: {Guide to Available Mathematical Software}.
1055: \newblock National Institute of Standards and Technology.
1056: \newblock See {\tt http://math.nist.gov/gams/}.
1057: 
1058: \bibitem{Herb60}
1059: R.~J. Herbold.
1060: \newblock {QuadI}.
1061: \newblock {\em Communications of the {ACM}}, 3(2):74, February 1960.
1062: 
1063: \bibitem{HoLR78}
1064: E.~N. Houstis, R.~E. Lynch, and J.~R. Rice.
1065: \newblock Evaluation of numerical methods for elliptic partial differential
1066:   equations.
1067: \newblock {\em Journal Computational Physics}, 27:323--350, 1978.
1068: 
1069: \bibitem{HoMR85}
1070: E.~N. Houstis, W.~F. Mitchell, and J.~R. Rice.
1071: \newblock Algorithm 637 {GENCOL}: Collocation on general domains with bicubic
1072:   {Hermite} polynomials.
1073: \newblock {\em {ACM} Transactions on Mathematical Software}, 11:413--415, 1985.
1074: 
1075: \bibitem{HoMR85a}
1076: E.~N. Houstis, W.~F. Mitchell, and J.~R. Rice.
1077: \newblock Algorithm 638 {INTCOL} and {HERMCOL}: Collocation on rectangular
1078:   domains with bicubic {Hermite} polynomials.
1079: \newblock {\em {ACM} Transactions on Mathematical Software}, 11:416--418, 1985.
1080: 
1081: \bibitem{HoRP89}
1082: E.~N. Houstis, J.~R. Rice, and T.~S. Papatheodorou.
1083: \newblock Parallel {ELLPACK}: An expert system for parallel processing of
1084:   partial differential equations.
1085: \newblock {\em Mathematics and Computers in Simulation}, 31:497--508, 1989.
1086: 
1087: \bibitem{HoRV90}
1088: E.~N. Houstis, J.~R. Rice, and R.~Vichnevetsky, editors.
1089: \newblock {\em Intelligent Mathematical Software Systems}.
1090: \newblock North-Holland, Amsterdam, 1990.
1091: 
1092: \bibitem{HoRV92a}
1093: E.~N. Houstis, J.~R. Rice, and R.~Vichnevetsky, editors.
1094: \newblock {\em Artificial Intelligence, Expert Systems and Symbolic Computing}.
1095: \newblock North-Holland, Amsterdam, 1992.
1096: 
1097: \bibitem{HoRV92}
1098: E.~N. Houstis, J.~R. Rice, and R.~Vichnevetsky, editors.
1099: \newblock {\em Expert Systems for Scientific Computing}.
1100: \newblock North-Holland, Amsterdam, 1992.
1101: 
1102: \bibitem{HoRi80}
1103: E.~N. Houstis and J.R. Rice.
1104: \newblock An experimental design for the computational evaluation of elliptic
1105:   partial differential equation solvers.
1106: \newblock In {\em The Production and Assessment of Numerical Software}, pages
1107:   57--66. Academic Press, 1980.
1108: 
1109: \bibitem{IMSL00}
1110: {IMSL} libraries.
1111: \newblock Visual Numerics, Inc., Houston.
1112: \newblock See {\tt http://www.vni.com/}.
1113: 
1114: \bibitem{JGFN00}
1115: {Java Grande Forum Numerical Working Group}.
1116: \newblock {National Institute of Standards and Technology}.
1117: \newblock See {\tt http://math.nist.gov/javanumerics/}.
1118: 
1119: \bibitem{KlRe68}
1120: Melvin Klerer and Juris Reinfelds, editors.
1121: \newblock {\em Interactive Systems for Experimental Applied Mathematics}.
1122: \newblock Academic Press, New York, 1968.
1123: \newblock This is the proceedings of the ACM Symposium on Interactive Systems
1124:   for Experimental Applied Mathematics held in Washington, DC in 1967.
1125: 
1126: \bibitem{LHKK79}
1127: C.~Lawson, R.~Hanson, D.~Kincaid, and F.~Krogh.
1128: \newblock Basic linear algebra subprograms for {Fortran} usage.
1129: \newblock {\em {ACM} Transactions on Mathematical Software}, 5:308--323, 1979.
1130: 
1131: \bibitem{MWHR97}
1132: Shahani Markus, Sanjiva Weerawarana, Elias~N. Houstis, and John~R. Rice.
1133: \newblock Scientific computing via the web: The net pellpack {PSE} server.
1134: \newblock {\em IEEE Computational Science \& Engineering}, 4(3), July-September
1135:   1997.
1136: 
1137: \bibitem{Matl00}
1138: {MATLAB}.
1139: \newblock The MathWorks, Inc.
1140: \newblock See {\tt http://www.mathworks.com/}.
1141: 
1142: \bibitem{MoGH80}
1143: J.~J. Mor\'{e}, B.~S. Garbow, and K.~E. Hillstrom.
1144: \newblock User guide for {MINPACK-1}.
1145: \newblock Technical Report ANL-80-74, Argonne National Laboratory, Argonne, IL,
1146:   1980.
1147: \newblock See also {\tt http://www.netlib.org/minpack/}.
1148: 
1149: \bibitem{NAG00}
1150: {NAG} libraries.
1151: \newblock Numerical Algorithms Group, Ltd., Oxford.
1152: \newblock See {\tt http://www.nag.co.uk/}.
1153: 
1154: \bibitem{Petz82}
1155: Linda Petzold.
1156: \newblock A description of {DASSL}: a differential/algebraic systems solver.
1157: \newblock {\em IMACS Transactions on Scientific Computation}, 1, 1982.
1158: 
1159: \bibitem{PiDK83}
1160: R.~Piessens, E.~de~Donker, and D.~Kahaner.
1161: \newblock {\em {QUADPACK} -- A Subroutine Package for Automatic Integration}.
1162: \newblock Springer--Verlag, New York, 1983.
1163: \newblock See also {\tt http:www.netlib.org/quadpack/}.
1164: 
1165: \bibitem{PINE00}
1166: {PINEAPL}: A {European} project in {HPCN}.
1167: \newblock Numerical Algorithms Group, Ltd., Oxford.
1168: \newblock See {\tt http://www.nag.co.uk/projects/PINEAPL/}.
1169: 
1170: \bibitem{PTVF93}
1171: William~H. Press, Saul~A. Teukolsky, William~T. Vetterling, and Brian~P.
1172:   Flannery.
1173: \newblock {\em Numerical Recipes in C: The Art of Scientific Computing}.
1174: \newblock Cambridge University Press, 1993.
1175: 
1176: \bibitem{RiBo96}
1177: J.~R. Rice and R.~F. Boisvert.
1178: \newblock From scientific software libraries to problem-solving environments.
1179: \newblock {\em IEEE Computational Science and Engineering}, 3(3):44--53, Fall
1180:   1996.
1181: 
1182: \bibitem{RiHD81}
1183: J.~R. Rice, E.~N. Houstis, and W.~R. Dyksen.
1184: \newblock A population of linear, second order, elliptic partial differential
1185:   equations on rectangular domains.
1186: \newblock {\em Mathematics of Computation}, 36:475--484, 1981.
1187: 
1188: \bibitem{RiRW84}
1189: J.~R. Rice, C.~Ribbens, and W.~Ward.
1190: \newblock Algorithm 622: A simple macro processor.
1191: \newblock {\em {ACM} Transactions on Mathematical Software}, 10:410--416, 1984.
1192: 
1193: \bibitem{Rice68}
1194: John~R. Rice.
1195: \newblock On the construction of polyalgorithms for automatic numerical
1196:   analysis.
1197: \newblock In {\em Interactive Systems for Experimental Applied Mathematics},
1198:   pages 301--313. Academic Press, New York, 1968.
1199: 
1200: \bibitem{Rice71}
1201: John~R. Rice, editor.
1202: \newblock {\em Mathematical Software}.
1203: \newblock Academic Press, New York, 1971.
1204: 
1205: \bibitem{Rice75}
1206: John~R. Rice.
1207: \newblock A metalgorithm for adaptive quadrature.
1208: \newblock {\em Journal of the Association for Compputing Machinery}, 22:61--82,
1209:   1975.
1210: 
1211: \bibitem{Rice76}
1212: John~R. Rice.
1213: \newblock The algorithm selection problem.
1214: \newblock In Rubicoff and Yovits, editors, {\em Advances in Computers},
1215:   volume~15. Academic Press, 1976.
1216: 
1217: \bibitem{Rice77}
1218: John~R. Rice, editor.
1219: \newblock {\em Mathematical Software {III}}.
1220: \newblock Academic Press, New York, 1977.
1221: 
1222: \bibitem{Rice78}
1223: John~R. Rice.
1224: \newblock Algorithm 525: {ADAPT} - adaptive smooth curve fitting.
1225: \newblock {\em {ACM} Transactions on Mathematical Software}, 4:1--30, 1978.
1226: 
1227: \bibitem{Rice79a}
1228: John~R. Rice.
1229: \newblock Methodology for the algorithm selection problem.
1230: \newblock In {\em Performance Evaluation of Numerical Software}, pages
1231:   301--307. North-Holland, 1979.
1232: 
1233: \bibitem{Rice79}
1234: John~R. Rice.
1235: \newblock Software for numerical computation.
1236: \newblock In P.~Wegner, editor, {\em Research Directions in Software
1237:   Technology}. MIT Press, 1979.
1238: 
1239: \bibitem{Rice83}
1240: John~R. Rice.
1241: \newblock Performance analysis of 13 methods to solve the {Galerkin} method
1242:   equations.
1243: \newblock {\em Linear Algebra and Applications}, 53:533--535, 1983.
1244: 
1245: \bibitem{Rice84}
1246: John~R. Rice.
1247: \newblock Algorithm 625: A two dimensional domain processor.
1248: \newblock {\em {ACM} Transactions on Mathematical Software}, 10:443--452, 1984.
1249: 
1250: \bibitem{Rice84a}
1251: John~R. Rice.
1252: \newblock The {BLAS}, linear algebra modules and supercomputers.
1253: \newblock Technical Report CSD-TR-501, Purdue University Department of Computer
1254:   Science, 1984.
1255: 
1256: \bibitem{RiBo85}
1257: John~R. Rice and Ronald~F. Boisvert.
1258: \newblock {\em Solving Elliptic Problems Using {ELLPACK}}, volume~2 of {\em
1259:   Springer Series in Computational Mathematics}.
1260: \newblock Springer--Verlag, New York, 1985.
1261: 
1262: \bibitem{RiRo66}
1263: John~R. Rice and Saul Rosen.
1264: \newblock {NAPSS -- A Numerical Analysis Problem Solving System}.
1265: \newblock In {\em Proceedings of the ACM National Conference}, pages 51--56,
1266:   1966.
1267: 
1268: \bibitem{RiSw87}
1269: John~R. Rice and H.~D. Schwetman.
1270: \newblock Interface issues in a software parts technology.
1271: \newblock In {\em Software Reusability}. IEEE Computer Society Press, 1987.
1272: 
1273: \bibitem{ShGo75}
1274: L.~F. Shampine and M.~K. Gordon.
1275: \newblock {\em Computer Solution of Ordinary Differential Equations}.
1276: \newblock W. H. Freeman and Co., San Francisco, 1975.
1277: 
1278: \bibitem{ShWa80}
1279: L.~F. Shampine and H.~A. Watts.
1280: \newblock Design of a user oriented package of {ODE} solvers.
1281: \newblock Technical Report SAND79-2374, Sandia Laboratories, Albuquerque, NM,
1282:   1980.
1283: 
1284: \bibitem{SBDG76}
1285: B.~T. Smith, J.~M. Boyle, J.~J. Dongarra, B.~S. Garbow, Y.~Ikebe, and V.~C.
1286:   Klema.
1287: \newblock {\em Matrix Eigensystem Routines -- {EISPACK} Guide}, volume~6 of
1288:   {\em Lecture Notes in Computer Science}.
1289: \newblock Springer--Verlag, New York, 2nd edition, 1976.
1290: 
1291: \bibitem{SnLi49}
1292: Frances~E. Snyder and Hubert~M. Livingston.
1293: \newblock Coding of a {Laplace} boundary value problem for the {UNIVAC}.
1294: \newblock {\em Mathematical Tables and Other Aids to Computation}, 3:341--350,
1295:   January 1949.
1296: 
1297: \bibitem{SwSw79}
1298: P.~N. Swarztrauber and R.~A. Sweet.
1299: \newblock Algorithm 541: Efficient {Fortran} subprograms for the solution of
1300:   elliptic partial differential equations.
1301: \newblock {\em {ACM} Transactions on Mathematical Software}, 5:352--364, 1979.
1302: \newblock See also {\tt http://www.netlib.org/fishpak/}.
1303: 
1304: \bibitem{Swar82}
1305: Paul~N. Swarztrauber.
1306: \newblock Vectorizing the {FFT}s.
1307: \newblock In Garry Rodrigue, editor, {\em Parallel Computation}, pages 51--84.
1308:   Academic Press, New York, 1982.
1309: \newblock See also {\tt http://www.netlib.org/fftpak/}.
1310: 
1311: \bibitem{TOMS00}
1312: {ACM Transactions on Mathematical Software}.
1313: \newblock Association for Computing Machinery, New York.
1314: \newblock See {\tt http://www.acm.org/toms/}.
1315: 
1316: \bibitem{WHRJ96}
1317: S.~Weerawarana, E.~N. Houstis, J.~R. Rice, A.~Joshi, and C.E. Houstis.
1318: \newblock {PYTHIA}: A knowledge based system to select scientific algorithms.
1319: \newblock {\em {ACM} Transactions on Mathematical Software}, 22:447--468, 1996.
1320: 
1321: \bibitem{WaDo98}
1322: R.~C. Whaley and J.~Dongarra.
1323: \newblock Automatically tuned linear algebra software.
1324: \newblock In {\em Proceedings of Supercomputing '98}. IEEE Computer Society,
1325:   1998.
1326: \newblock Also see {\tt http://www.netlib.org/atlas/}.
1327: 
1328: \bibitem{WiWG51}
1329: M.~V. Wilkes, D.~J. Wheeler, and S.~Gill.
1330: \newblock {\em The Preparation of Programs for an Electronic Digital Computer}.
1331: \newblock Addison Wesley Press, Cambridge, MA, 1951.
1332: 
1333: \bibitem{WiRe71}
1334: J.~H. Wilkinson and C.~Reinsch, editors.
1335: \newblock {\em Linear Algebra}, volume~II of {\em Handbook for Automatic
1336:   Computation}.
1337: \newblock Springer--Verlag, New York, 1971.
1338: 
1339: \bibitem{Wolf99}
1340: Stephen Wolfram.
1341: \newblock {\em The Mathematica Book}.
1342: \newblock Cambridge University Press, 1999.
1343: 
1344: \end{thebibliography}
1345: 
1346: }
1347: 
1348: \end{document}
1349: 
1350: