\documentstyle[twocolumn]{article} \title{Netlib news: Searching for files} \author{Eric Grosse}{} \date{} \begin{document}\maketitle {\sloppy In the last column ({\em see SIAM News, November 1991}), we saw that netlib had adapted to the growing size of program files by 1) providing access via ftp and xnetlib, 2) better mail splitting, and 3) user-specified mail limits. (Ftp is the Internet file transfer protocol and xnetlib is an X-windows program from Jack Dongarra's group using sockets for file transfer.) This time, we look at how netlib is adapting to the growing number of files. Recall that the organization of netlib is one of libraries and sublibraries, each described briefly in an ``index'' file. In the early days of netlib, you could download the dozen or so index files in areas of potential interest and keep the information at hand or in your head. By 1987 this was becoming more burdensome, so Greg Astfalk kindly prepared a keyword list. An email or xnetlib command like ``find bessel'' could quickly search for all related files in the collection. Keeping they keyword list up to date, however, quickly proved to be beyond our modest administrative resources. As time went by, the keyword list became less useful as it fell out of sync with the explosive growth in material. Since the index files {\em are} reliably updated, we've decided to keep the keyword information there. Moreover, to allow automatic searching, we've switched from the somewhat haphazard writing style formerly used to a more systematic syntax. Each file that you might want to request is now supposed to have a paragraph in the appropriate index file. Here's an example. \begin{verbatim} file a/dloess for smoothing multivariate scattered data by Cleveland and Grosse ref Statistics and Computation 1:1 prec double lang Fortran77 gams L8h # The method is based on a moving # least squares fit by a quadratic, # accelerated by k-d trees and blending # functions. (To get the univariate # code, "send lowess from go".) \end{verbatim} The first line tells you how to get the file; say \begin{verbatim} mail netlib@research.att.com send a/dloess \end{verbatim} (or equivalently, {\tt send dloess from a}). The next line provides a few keywords, and succeeding lines give more details about the program such as authors, literature reference, precision, language, and GAMS classification code. For a description of the complete scheme, ask netlib to {\tt send thesaurus gams from bib}. So, as of June 1992, keyword searching again provides a comprehensive view of the collection. We are well aware that some searches don't lend themselves to a keyword approach, and we're exploring hierarchical classification (as in Boisvert et al. GAMS and in my approximation catalog). Other approaches are also being tried under the aegis of the HPCC (High Performance Computing and Communications) Software Sharing Initiative. We intend that the new index files will provide a sound database for these new user interface efforts. Turning now to another topic, it dismays me to report that some e-mail systems in the world still have trouble generating correct return addresses. The rule is that the program shipping mail to the outside world should be sure that there is a {\tt From:} line in the header with a valid Internet address, not merely an abbreviation sufficient for the local campus. Sometimes, by carefully puzzling over other information in the header, a human can guess how to fix the address on failed mail. But netlib doesn't try to work miracles. If all else fails, you can resort to including in the main message text (before {\tt send} requests) the command {\tt path user@campus.edu} (after substituting your own address). By the way, I have received several email messages of the sort ``why doesn't this silly netlib program ever respond to my mail?'', signed something like {\tt mystery-vax!joe}. Unfortunately, if netlib can't get through to him, neither can I! \section*{Recent additions} Quite a lot of material has been added since the last column. The big announcement, of course, is {\tt lapack}, a successor to linpack and eispack. That has been covered elsewhere in the SIAM News and need not be dwelt on here. Similarly, there is a great deal of interesting material in the matlab libraries in netlib, but presumably matlab users will see descriptions in other newsletters. Traditionally all scientific computation was done in Fortran, but we're seeing more requests for library code in other languages, particularly C and C++. There are technical reasons (e.g. function pointers) and portability reasons behind this trend. For the most part, our community's approach has been to call from C main programs to Fortran library routines, or to apply the {\tt f2c} Fortran-to-C translator. But native C libraries are appearing. One specific but outstanding example is David Gay's contribution, {\tt fp/dtoa.c}. This contains C functions for perfect binary/decimal conversion. I use this for all my scientific computing input/output. A broader example is David E. Stewart's C library for matrix computations, {\tt meschach} (pronounced ``me shark''). This provides the common operations on dense and sparse matrices, though of course is much smaller in scope than lapack. Readers interested in learning about the effect of dynamic memory allocation on library design might find this package illuminating. The operator overloading provided by C++ is attractive for matrix libraries, if implicit loop fusion is implemented cleverly. Various commercial efforts along these lines are contending; if someone cares to contribute a good, public-domain version to netlib, that would be welcome. Newcomers to C++ may be interested in James Coplien's {\em Advanced C++ Programming Styles and Idioms}, published by Addison-Wesley. For code, {\tt send index for c++/idioms}. Algorithms from the new journal {\em Numerical Algorithms} are being archived in the {\tt numeralgo} library. The first two entries are: ``na1'' (avoiding breakdown and near-breakdown in Lanczos type algorithms by Brezinski, Sadok, and Zaglia) and ``na2'' (B-nets of box splines on three- and four-directional meshes by M.-J. Lai) The library {\tt lp/generators} contains transportation networks, assignment, and generalized network flow problems, from Darwin Klingman, Fred Glover, and M. Ramamurti. {\tt svdpack} by Mike Berry computes singular values and singular vectors of large sparse matrices. {\tt misc/sparsdyn} is a prototype sparse matrix algorithm development tool for Sun workstations. (T. A. Davis, and P.-C. Yew) {\tt misc/lalqmr} is a package implementing the Freund, Gutknecht, and Nachtigal version of the look-ahead Lanczos algorithm. It includes driver code to compute eigenvalues of matrices, as well as a linear systems solver using the quasi-minimal residual method. {\tt misc/gemmw} is a portable Level 3 BLAS implementation by Craig Douglas of Winograd's variant of Strassen's matrix multiply. The {\tt misc/mglab} library provides a tutorial univariate multigrid program. The user may choose various multigrid cycles, transfer operators, smoothing methods, and nested iteration end defect correction. An Introduction to Multigrid Methods, Wiley, Chichester, 1992 by P. Wesseling. After a lapse, we're back on the {\tt toms} (ACM Trans. on Math. Software) distribution, now complete through Collected Algorithm 702. See the journal for complete descriptions; a quick summary is:\\ 687: decision tree for initial value ode\\ 688: epdcol: a more efficient pdecol code\\ 689: nonlinear volterra integral equations of the second kind\\ 690: chebyshev polynomial software for elliptic-parabolic systems of pdes\\ 691: improving quadpack automatic integration routines\\ 692: model implementation and test package for the sparse blas\\ 693: floating point multiple precision arithmetic\\ 694: test matrices\\ 695: modified cholesky factorization\\ 696: inverse rayleigh iteration for complex band matrices\\ 697: univariate interpolation\\ 698: adaptive multidimensional integration for a vector of integrals\\ 699: Patterson's quadrature formulae\\ 700: Sturm-Liouville problems\\ 701: exact analysis of rectangular rank-deficient sparse rational linear systems\\ 702: truncated Newton Subroutines for maximum likelihood and quasi-likelihood estimation of parameters in nonlinear regression models by David Bunch, David Gay, and Roy Welsch have been submitted to TOMS. {\tt send index for opt/nlr} for details. The libraries {\tt odrpack} (orthogonal distance regression) and {\tt pppack} (de Boor's Practical Guide to Splines) have been updated, and small changes made to {\tt napack, paranoia, picl, pltmg, pvm} and others. {\em If you're new to netlib, send e-mail containing the line ``help'' to one of the Internet addresses \begin{verbatim} netlib@research.att.com netlib@ornl.gov netlib@nac.no netlib@draci.cs.uow.edu.au \end{verbatim} or uucp address {\tt uunet!research!netlib}. A few minutes later, assuming you have speedy mail connections, you will receive information on how to use netlib and an overview of the many mathematical software libraries and databases in the collection.} {\em Eric Grosse can be reached at the Computing Science Research Center, AT\&T Bell Laboratories, Murray Hill NJ 07974, USA or by email at {\tt ehg@research.att.com}. This column was written June 7, 1992.} }% end sloppy \end{document}