# CHAPTER 1 : LAPACK Subroutines

This chapter describes the subroutines in LAPACK as they are implemented in the Sun Performance Library. LAPACK is a library of subroutines to perform matrix factorizations, solve systems of linear equations, solve least squares problems, compute eigenvalues and eigenvectors, and other common linear algebra computations. LAPACK is a superset of LINPACK and subroutines in LAPACK are generally faster and more accurate than their LINPACK counterparts, so all new development should be done with LAPACK. The version of LAPACK released with the Sun Performance Library and documented in this manual is version 1.1 released in March 1993. For more information about LAPACK, refer to the information in this chapter or see LAPACK User's Guide written by Anderson et al and available from the Society for Industrial and Applied Mathematics (SIAM) in Philadelphia. The serious numerical analyst will want to get a copy of the LAPACK User's Guide in addition to this reference manual because it contains a wealth of information about error bounds, algorithmic details, and the numerical stability of the algorithms used in LAPACK.

The first three sections of this chapter describe:

• conventions followed in naming arguments and subroutines and conventions used for passing arguments into and out of subroutines
• error handling done by the subroutines
• extensions to the standard version of LAPACK
The remaining sections of this chapter describe the operation of each of the major LAPACK subroutines as described below. For each subroutine, the interface is shown, the operation of the subroutine is described, and a short FORTRAN 77 program is given with sample output.

LAPACK contains three types of subroutines: driver, computational, and auxiliary. The driver subroutines are further subdivided into simple and expert drivers. For each task performed by a driver, there is both a simple and expert driver. The simple drivers perform a complete task such as solving a linear system. The expert drivers usually perform the same task as the simple driver plus related tasks such as computing error bounds or condition numbers. The drivers do their work by calling a series of computational routines, each of which does some part of the larger task. For example, a driver to solve a linear system calls a computational subroutine to factor the coefficient matrix and then calls another computational subroutine to solve the factored system. Auxiliary subroutines tend to perform very low level tasks such as copying a matrix or rearranging columns of a matrix.

This manual documents all of the driver subroutines, and all of the computational subroutines related to solving a linear system, but none of the auxiliary subroutines. Most users will want to use the driver subroutines most of the time. In those cases in which it is necessary or helpful to exercise more direct control over a computation, users may instead call one or more computational routines. It is atypical for a user to make a direct call to an auxiliary subroutine, but it is allowed.