\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}