.TH "realOTHERauxiliary" 3 "Sun Nov 27 2022" "Version 3.11.0" "LAPACK" \" -*- nroff -*-
.ad l
.nh
.SH NAME
realOTHERauxiliary \- real
.SH SYNOPSIS
.br
.PP
.SS "Functions"

.in +1c
.ti -1c
.RI "integer function \fBilaslc\fP (M, N, A, LDA)"
.br
.RI "\fBILASLC\fP scans a matrix for its last non-zero column\&. "
.ti -1c
.RI "integer function \fBilaslr\fP (M, N, A, LDA)"
.br
.RI "\fBILASLR\fP scans a matrix for its last non-zero row\&. "
.ti -1c
.RI "subroutine \fBslabrd\fP (M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y, LDY)"
.br
.RI "\fBSLABRD\fP reduces the first nb rows and columns of a general matrix to a bidiagonal form\&. "
.ti -1c
.RI "subroutine \fBslacn2\fP (N, V, X, ISGN, EST, KASE, ISAVE)"
.br
.RI "\fBSLACN2\fP estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products\&. "
.ti -1c
.RI "subroutine \fBslacon\fP (N, V, X, ISGN, EST, KASE)"
.br
.RI "\fBSLACON\fP estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products\&. "
.ti -1c
.RI "subroutine \fBsladiv\fP (A, B, C, D, P, Q)"
.br
.RI "\fBSLADIV\fP performs complex division in real arithmetic, avoiding unnecessary overflow\&. "
.ti -1c
.RI "subroutine \fBsladiv1\fP (A, B, C, D, P, Q)"
.br
.ti -1c
.RI "real function \fBsladiv2\fP (A, B, C, D, R, T)"
.br
.ti -1c
.RI "subroutine \fBslaein\fP (RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI, B, LDB, WORK, EPS3, SMLNUM, BIGNUM, INFO)"
.br
.RI "\fBSLAEIN\fP computes a specified right or left eigenvector of an upper Hessenberg matrix by inverse iteration\&. "
.ti -1c
.RI "subroutine \fBslaexc\fP (WANTQ, N, T, LDT, Q, LDQ, J1, N1, N2, WORK, INFO)"
.br
.RI "\fBSLAEXC\fP swaps adjacent diagonal blocks of a real upper quasi-triangular matrix in Schur canonical form, by an orthogonal similarity transformation\&. "
.ti -1c
.RI "subroutine \fBslag2\fP (A, LDA, B, LDB, SAFMIN, SCALE1, SCALE2, WR1, WR2, WI)"
.br
.RI "\fBSLAG2\fP computes the eigenvalues of a 2-by-2 generalized eigenvalue problem, with scaling as necessary to avoid over-/underflow\&. "
.ti -1c
.RI "subroutine \fBslags2\fP (UPPER, A1, A2, A3, B1, B2, B3, CSU, SNU, CSV, SNV, CSQ, SNQ)"
.br
.RI "\fBSLAGS2\fP computes 2-by-2 orthogonal matrices U, V, and Q, and applies them to matrices A and B such that the rows of the transformed A and B are parallel\&. "
.ti -1c
.RI "subroutine \fBslagtm\fP (TRANS, N, NRHS, ALPHA, DL, D, DU, X, LDX, BETA, B, LDB)"
.br
.RI "\fBSLAGTM\fP performs a matrix-matrix product of the form C = αAB+βC, where A is a tridiagonal matrix, B and C are rectangular matrices, and α and β are scalars, which may be 0, 1, or -1\&. "
.ti -1c
.RI "subroutine \fBslagv2\fP (A, LDA, B, LDB, ALPHAR, ALPHAI, BETA, CSL, SNL, CSR, SNR)"
.br
.RI "\fBSLAGV2\fP computes the Generalized Schur factorization of a real 2-by-2 matrix pencil (A,B) where B is upper triangular\&. "
.ti -1c
.RI "subroutine \fBslahqr\fP (WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILOZ, IHIZ, Z, LDZ, INFO)"
.br
.RI "\fBSLAHQR\fP computes the eigenvalues and Schur factorization of an upper Hessenberg matrix, using the double-shift/single-shift QR algorithm\&. "
.ti -1c
.RI "subroutine \fBslahr2\fP (N, K, NB, A, LDA, TAU, T, LDT, Y, LDY)"
.br
.RI "\fBSLAHR2\fP reduces the specified number of first columns of a general rectangular matrix A so that elements below the specified subdiagonal are zero, and returns auxiliary matrices which are needed to apply the transformation to the unreduced part of A\&. "
.ti -1c
.RI "subroutine \fBslaic1\fP (JOB, J, X, SEST, W, GAMMA, SESTPR, S, C)"
.br
.RI "\fBSLAIC1\fP applies one step of incremental condition estimation\&. "
.ti -1c
.RI "subroutine \fBslaln2\fP (LTRANS, NA, NW, SMIN, CA, A, LDA, D1, D2, B, LDB, WR, WI, X, LDX, SCALE, XNORM, INFO)"
.br
.RI "\fBSLALN2\fP solves a 1-by-1 or 2-by-2 linear system of equations of the specified form\&. "
.ti -1c
.RI "real function \fBslangt\fP (NORM, N, DL, D, DU)"
.br
.RI "\fBSLANGT\fP returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of a general tridiagonal matrix\&. "
.ti -1c
.RI "real function \fBslanhs\fP (NORM, N, A, LDA, WORK)"
.br
.RI "\fBSLANHS\fP returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of an upper Hessenberg matrix\&. "
.ti -1c
.RI "real function \fBslansb\fP (NORM, UPLO, N, K, AB, LDAB, WORK)"
.br
.RI "\fBSLANSB\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a symmetric band matrix\&. "
.ti -1c
.RI "real function \fBslansp\fP (NORM, UPLO, N, AP, WORK)"
.br
.RI "\fBSLANSP\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a symmetric matrix supplied in packed form\&. "
.ti -1c
.RI "real function \fBslantb\fP (NORM, UPLO, DIAG, N, K, AB, LDAB, WORK)"
.br
.RI "\fBSLANTB\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a triangular band matrix\&. "
.ti -1c
.RI "real function \fBslantp\fP (NORM, UPLO, DIAG, N, AP, WORK)"
.br
.RI "\fBSLANTP\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a triangular matrix supplied in packed form\&. "
.ti -1c
.RI "real function \fBslantr\fP (NORM, UPLO, DIAG, M, N, A, LDA, WORK)"
.br
.RI "\fBSLANTR\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a trapezoidal or triangular matrix\&. "
.ti -1c
.RI "subroutine \fBslanv2\fP (A, B, C, D, RT1R, RT1I, RT2R, RT2I, CS, SN)"
.br
.RI "\fBSLANV2\fP computes the Schur factorization of a real 2-by-2 nonsymmetric matrix in standard form\&. "
.ti -1c
.RI "subroutine \fBslapll\fP (N, X, INCX, Y, INCY, SSMIN)"
.br
.RI "\fBSLAPLL\fP measures the linear dependence of two vectors\&. "
.ti -1c
.RI "subroutine \fBslapmr\fP (FORWRD, M, N, X, LDX, K)"
.br
.RI "\fBSLAPMR\fP rearranges rows of a matrix as specified by a permutation vector\&. "
.ti -1c
.RI "subroutine \fBslapmt\fP (FORWRD, M, N, X, LDX, K)"
.br
.RI "\fBSLAPMT\fP performs a forward or backward permutation of the columns of a matrix\&. "
.ti -1c
.RI "subroutine \fBslaqp2\fP (M, N, OFFSET, A, LDA, JPVT, TAU, VN1, VN2, WORK)"
.br
.RI "\fBSLAQP2\fP computes a QR factorization with column pivoting of the matrix block\&. "
.ti -1c
.RI "subroutine \fBslaqps\fP (M, N, OFFSET, NB, KB, A, LDA, JPVT, TAU, VN1, VN2, AUXV, F, LDF)"
.br
.RI "\fBSLAQPS\fP computes a step of QR factorization with column pivoting of a real m-by-n matrix A by using BLAS level 3\&. "
.ti -1c
.RI "subroutine \fBslaqr0\fP (WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO)"
.br
.RI "\fBSLAQR0\fP computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition\&. "
.ti -1c
.RI "subroutine \fBslaqr1\fP (N, H, LDH, SR1, SI1, SR2, SI2, V)"
.br
.RI "\fBSLAQR1\fP sets a scalar multiple of the first column of the product of 2-by-2 or 3-by-3 matrix H and specified shifts\&. "
.ti -1c
.RI "subroutine \fBslaqr2\fP (WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, LDT, NV, WV, LDWV, WORK, LWORK)"
.br
.RI "\fBSLAQR2\fP performs the orthogonal similarity transformation of a Hessenberg matrix to detect and deflate fully converged eigenvalues from a trailing principal submatrix (aggressive early deflation)\&. "
.ti -1c
.RI "subroutine \fBslaqr3\fP (WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, LDT, NV, WV, LDWV, WORK, LWORK)"
.br
.RI "\fBSLAQR3\fP performs the orthogonal similarity transformation of a Hessenberg matrix to detect and deflate fully converged eigenvalues from a trailing principal submatrix (aggressive early deflation)\&. "
.ti -1c
.RI "subroutine \fBslaqr4\fP (WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO)"
.br
.RI "\fBSLAQR4\fP computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition\&. "
.ti -1c
.RI "subroutine \fBslaqr5\fP (WANTT, WANTZ, KACC22, N, KTOP, KBOT, NSHFTS, SR, SI, H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, LDU, NV, WV, LDWV, NH, WH, LDWH)"
.br
.RI "\fBSLAQR5\fP performs a single small-bulge multi-shift QR sweep\&. "
.ti -1c
.RI "subroutine \fBslaqsb\fP (UPLO, N, KD, AB, LDAB, S, SCOND, AMAX, EQUED)"
.br
.RI "\fBSLAQSB\fP scales a symmetric/Hermitian band matrix, using scaling factors computed by spbequ\&. "
.ti -1c
.RI "subroutine \fBslaqsp\fP (UPLO, N, AP, S, SCOND, AMAX, EQUED)"
.br
.RI "\fBSLAQSP\fP scales a symmetric/Hermitian matrix in packed storage, using scaling factors computed by sppequ\&. "
.ti -1c
.RI "subroutine \fBslaqtr\fP (LTRAN, LREAL, N, T, LDT, B, W, SCALE, X, WORK, INFO)"
.br
.RI "\fBSLAQTR\fP solves a real quasi-triangular system of equations, or a complex quasi-triangular system of special form, in real arithmetic\&. "
.ti -1c
.RI "subroutine \fBslar1v\fP (N, B1, BN, LAMBDA, D, L, LD, LLD, PIVMIN, GAPTOL, Z, WANTNC, NEGCNT, ZTZ, MINGMA, R, ISUPPZ, NRMINV, RESID, RQCORR, WORK)"
.br
.RI "\fBSLAR1V\fP computes the (scaled) r-th column of the inverse of the submatrix in rows b1 through bn of the tridiagonal matrix LDLT - λI\&. "
.ti -1c
.RI "subroutine \fBslar2v\fP (N, X, Y, Z, INCX, C, S, INCC)"
.br
.RI "\fBSLAR2V\fP applies a vector of plane rotations with real cosines and real sines from both sides to a sequence of 2-by-2 symmetric/Hermitian matrices\&. "
.ti -1c
.RI "subroutine \fBslarf\fP (SIDE, M, N, V, INCV, TAU, C, LDC, WORK)"
.br
.RI "\fBSLARF\fP applies an elementary reflector to a general rectangular matrix\&. "
.ti -1c
.RI "subroutine \fBslarfb\fP (SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)"
.br
.RI "\fBSLARFB\fP applies a block reflector or its transpose to a general rectangular matrix\&. "
.ti -1c
.RI "subroutine \fBslarfg\fP (N, ALPHA, X, INCX, TAU)"
.br
.RI "\fBSLARFG\fP generates an elementary reflector (Householder matrix)\&. "
.ti -1c
.RI "subroutine \fBslarfgp\fP (N, ALPHA, X, INCX, TAU)"
.br
.RI "\fBSLARFGP\fP generates an elementary reflector (Householder matrix) with non-negative beta\&. "
.ti -1c
.RI "subroutine \fBslarft\fP (DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)"
.br
.RI "\fBSLARFT\fP forms the triangular factor T of a block reflector H = I - vtvH "
.ti -1c
.RI "subroutine \fBslarfx\fP (SIDE, M, N, V, TAU, C, LDC, WORK)"
.br
.RI "\fBSLARFX\fP applies an elementary reflector to a general rectangular matrix, with loop unrolling when the reflector has order ≤ 10\&. "
.ti -1c
.RI "subroutine \fBslarfy\fP (UPLO, N, V, INCV, TAU, C, LDC, WORK)"
.br
.RI "\fBSLARFY\fP "
.ti -1c
.RI "subroutine \fBslargv\fP (N, X, INCX, Y, INCY, C, INCC)"
.br
.RI "\fBSLARGV\fP generates a vector of plane rotations with real cosines and real sines\&. "
.ti -1c
.RI "subroutine \fBslarrv\fP (N, VL, VU, D, L, PIVMIN, ISPLIT, M, DOL, DOU, MINRGP, RTOL1, RTOL2, W, WERR, WGAP, IBLOCK, INDEXW, GERS, Z, LDZ, ISUPPZ, WORK, IWORK, INFO)"
.br
.RI "\fBSLARRV\fP computes the eigenvectors of the tridiagonal matrix T = L D LT given L, D and the eigenvalues of L D LT\&. "
.ti -1c
.RI "subroutine \fBslartv\fP (N, X, INCX, Y, INCY, C, S, INCC)"
.br
.RI "\fBSLARTV\fP applies a vector of plane rotations with real cosines and real sines to the elements of a pair of vectors\&. "
.ti -1c
.RI "subroutine \fBslaswp\fP (N, A, LDA, K1, K2, IPIV, INCX)"
.br
.RI "\fBSLASWP\fP performs a series of row interchanges on a general rectangular matrix\&. "
.ti -1c
.RI "subroutine \fBslatbs\fP (UPLO, TRANS, DIAG, NORMIN, N, KD, AB, LDAB, X, SCALE, CNORM, INFO)"
.br
.RI "\fBSLATBS\fP solves a triangular banded system of equations\&. "
.ti -1c
.RI "subroutine \fBslatdf\fP (IJOB, N, Z, LDZ, RHS, RDSUM, RDSCAL, IPIV, JPIV)"
.br
.RI "\fBSLATDF\fP uses the LU factorization of the n-by-n matrix computed by sgetc2 and computes a contribution to the reciprocal Dif-estimate\&. "
.ti -1c
.RI "subroutine \fBslatps\fP (UPLO, TRANS, DIAG, NORMIN, N, AP, X, SCALE, CNORM, INFO)"
.br
.RI "\fBSLATPS\fP solves a triangular system of equations with the matrix held in packed storage\&. "
.ti -1c
.RI "subroutine \fBslatrs\fP (UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE, CNORM, INFO)"
.br
.RI "\fBSLATRS\fP solves a triangular system of equations with the scale factor set to prevent overflow\&. "
.ti -1c
.RI "subroutine \fBslauu2\fP (UPLO, N, A, LDA, INFO)"
.br
.RI "\fBSLAUU2\fP computes the product UUH or LHL, where U and L are upper or lower triangular matrices (unblocked algorithm)\&. "
.ti -1c
.RI "subroutine \fBslauum\fP (UPLO, N, A, LDA, INFO)"
.br
.RI "\fBSLAUUM\fP computes the product UUH or LHL, where U and L are upper or lower triangular matrices (blocked algorithm)\&. "
.ti -1c
.RI "subroutine \fBsrscl\fP (N, SA, SX, INCX)"
.br
.RI "\fBSRSCL\fP multiplies a vector by the reciprocal of a real scalar\&. "
.ti -1c
.RI "subroutine \fBstprfb\fP (SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, A, LDA, B, LDB, WORK, LDWORK)"
.br
.RI "\fBSTPRFB\fP applies a real 'triangular-pentagonal' block reflector to a real matrix, which is composed of two blocks\&. "
.in -1c
.SH "Detailed Description"
.PP 
This is the group of real other auxiliary routines 
.SH "Function Documentation"
.PP 
.SS "integer function ilaslc (integer M, integer N, real, dimension( lda, * ) A, integer LDA)"

.PP
\fBILASLC\fP scans a matrix for its last non-zero column\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 ILASLC scans A for its last non-zero column\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix A\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix A\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          The m by n matrix A\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&. LDA >= max(1,M)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "integer function ilaslr (integer M, integer N, real, dimension( lda, * ) A, integer LDA)"

.PP
\fBILASLR\fP scans a matrix for its last non-zero row\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 ILASLR scans A for its last non-zero row\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix A\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix A\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          The m by n matrix A\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&. LDA >= max(1,M)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slabrd (integer M, integer N, integer NB, real, dimension( lda, * ) A, integer LDA, real, dimension( * ) D, real, dimension( * ) E, real, dimension( * ) TAUQ, real, dimension( * ) TAUP, real, dimension( ldx, * ) X, integer LDX, real, dimension( ldy, * ) Y, integer LDY)"

.PP
\fBSLABRD\fP reduces the first nb rows and columns of a general matrix to a bidiagonal form\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLABRD reduces the first NB rows and columns of a real general
 m by n matrix A to upper or lower bidiagonal form by an orthogonal
 transformation Q**T * A * P, and returns the matrices X and Y which
 are needed to apply the transformation to the unreduced part of A\&.

 If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower
 bidiagonal form\&.

 This is an auxiliary routine called by SGEBRD
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows in the matrix A\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns in the matrix A\&.
.fi
.PP
.br
\fINB\fP 
.PP
.nf
          NB is INTEGER
          The number of leading rows and columns of A to be reduced\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          On entry, the m by n general matrix to be reduced\&.
          On exit, the first NB rows and columns of the matrix are
          overwritten; the rest of the array is unchanged\&.
          If m >= n, elements on and below the diagonal in the first NB
            columns, with the array TAUQ, represent the orthogonal
            matrix Q as a product of elementary reflectors; and
            elements above the diagonal in the first NB rows, with the
            array TAUP, represent the orthogonal matrix P as a product
            of elementary reflectors\&.
          If m < n, elements below the diagonal in the first NB
            columns, with the array TAUQ, represent the orthogonal
            matrix Q as a product of elementary reflectors, and
            elements on and above the diagonal in the first NB rows,
            with the array TAUP, represent the orthogonal matrix P as
            a product of elementary reflectors\&.
          See Further Details\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= max(1,M)\&.
.fi
.PP
.br
\fID\fP 
.PP
.nf
          D is REAL array, dimension (NB)
          The diagonal elements of the first NB rows and columns of
          the reduced matrix\&.  D(i) = A(i,i)\&.
.fi
.PP
.br
\fIE\fP 
.PP
.nf
          E is REAL array, dimension (NB)
          The off-diagonal elements of the first NB rows and columns of
          the reduced matrix\&.
.fi
.PP
.br
\fITAUQ\fP 
.PP
.nf
          TAUQ is REAL array, dimension (NB)
          The scalar factors of the elementary reflectors which
          represent the orthogonal matrix Q\&. See Further Details\&.
.fi
.PP
.br
\fITAUP\fP 
.PP
.nf
          TAUP is REAL array, dimension (NB)
          The scalar factors of the elementary reflectors which
          represent the orthogonal matrix P\&. See Further Details\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (LDX,NB)
          The m-by-nb matrix X required to update the unreduced part
          of A\&.
.fi
.PP
.br
\fILDX\fP 
.PP
.nf
          LDX is INTEGER
          The leading dimension of the array X\&. LDX >= max(1,M)\&.
.fi
.PP
.br
\fIY\fP 
.PP
.nf
          Y is REAL array, dimension (LDY,NB)
          The n-by-nb matrix Y required to update the unreduced part
          of A\&.
.fi
.PP
.br
\fILDY\fP 
.PP
.nf
          LDY is INTEGER
          The leading dimension of the array Y\&. LDY >= max(1,N)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  The matrices Q and P are represented as products of elementary
  reflectors:

     Q = H(1) H(2) \&. \&. \&. H(nb)  and  P = G(1) G(2) \&. \&. \&. G(nb)

  Each H(i) and G(i) has the form:

     H(i) = I - tauq * v * v**T  and G(i) = I - taup * u * u**T

  where tauq and taup are real scalars, and v and u are real vectors\&.

  If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in
  A(i:m,i); u(1:i) = 0, u(i+1) = 1, and u(i+1:n) is stored on exit in
  A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i)\&.

  If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in
  A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in
  A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i)\&.

  The elements of the vectors v and u together form the m-by-nb matrix
  V and the nb-by-n matrix U**T which are needed, with X and Y, to apply
  the transformation to the unreduced part of the matrix, using a block
  update of the form:  A := A - V*Y**T - X*U**T\&.

  The contents of A on exit are illustrated by the following examples
  with nb = 2:

  m = 6 and n = 5 (m > n):          m = 5 and n = 6 (m < n):

    (  1   1   u1  u1  u1 )           (  1   u1  u1  u1  u1  u1 )
    (  v1  1   1   u2  u2 )           (  1   1   u2  u2  u2  u2 )
    (  v1  v2  a   a   a  )           (  v1  1   a   a   a   a  )
    (  v1  v2  a   a   a  )           (  v1  v2  a   a   a   a  )
    (  v1  v2  a   a   a  )           (  v1  v2  a   a   a   a  )
    (  v1  v2  a   a   a  )

  where a denotes an element of the original matrix which is unchanged,
  vi denotes an element of the vector defining H(i), and ui an element
  of the vector defining G(i)\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine slacn2 (integer N, real, dimension( * ) V, real, dimension( * ) X, integer, dimension( * ) ISGN, real EST, integer KASE, integer, dimension( 3 ) ISAVE)"

.PP
\fBSLACN2\fP estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLACN2 estimates the 1-norm of a square, real matrix A\&.
 Reverse communication is used for evaluating matrix-vector products\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
         The order of the matrix\&.  N >= 1\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension (N)
         On the final return, V = A*W,  where  EST = norm(V)/norm(W)
         (W is not returned)\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (N)
         On an intermediate return, X should be overwritten by
               A * X,   if KASE=1,
               A**T * X,  if KASE=2,
         and SLACN2 must be re-called with all the other parameters
         unchanged\&.
.fi
.PP
.br
\fIISGN\fP 
.PP
.nf
          ISGN is INTEGER array, dimension (N)
.fi
.PP
.br
\fIEST\fP 
.PP
.nf
          EST is REAL
         On entry with KASE = 1 or 2 and ISAVE(1) = 3, EST should be
         unchanged from the previous call to SLACN2\&.
         On exit, EST is an estimate (a lower bound) for norm(A)\&.
.fi
.PP
.br
\fIKASE\fP 
.PP
.nf
          KASE is INTEGER
         On the initial call to SLACN2, KASE should be 0\&.
         On an intermediate return, KASE will be 1 or 2, indicating
         whether X should be overwritten by A * X  or A**T * X\&.
         On the final return from SLACN2, KASE will again be 0\&.
.fi
.PP
.br
\fIISAVE\fP 
.PP
.nf
          ISAVE is INTEGER array, dimension (3)
         ISAVE is used to save variables between calls to SLACN2
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  Originally named SONEST, dated March 16, 1988\&.

  This is a thread safe version of SLACON, which uses the array ISAVE
  in place of a SAVE statement, as follows:

     SLACON     SLACN2
      JUMP     ISAVE(1)
      J        ISAVE(2)
      ITER     ISAVE(3)
.fi
.PP
 
.RE
.PP
\fBContributors:\fP
.RS 4
Nick Higham, University of Manchester 
.RE
.PP
\fBReferences:\fP
.RS 4
N\&.J\&. Higham, 'FORTRAN codes for estimating the one-norm of
  a real or complex matrix, with applications to condition estimation', ACM Trans\&. Math\&. Soft\&., vol\&. 14, no\&. 4, pp\&. 381-396, December 1988\&. 
.RE
.PP

.SS "subroutine slacon (integer N, real, dimension( * ) V, real, dimension( * ) X, integer, dimension( * ) ISGN, real EST, integer KASE)"

.PP
\fBSLACON\fP estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLACON estimates the 1-norm of a square, real matrix A\&.
 Reverse communication is used for evaluating matrix-vector products\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
         The order of the matrix\&.  N >= 1\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension (N)
         On the final return, V = A*W,  where  EST = norm(V)/norm(W)
         (W is not returned)\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (N)
         On an intermediate return, X should be overwritten by
               A * X,   if KASE=1,
               A**T * X,  if KASE=2,
         and SLACON must be re-called with all the other parameters
         unchanged\&.
.fi
.PP
.br
\fIISGN\fP 
.PP
.nf
          ISGN is INTEGER array, dimension (N)
.fi
.PP
.br
\fIEST\fP 
.PP
.nf
          EST is REAL
         On entry with KASE = 1 or 2 and JUMP = 3, EST should be
         unchanged from the previous call to SLACON\&.
         On exit, EST is an estimate (a lower bound) for norm(A)\&.
.fi
.PP
.br
\fIKASE\fP 
.PP
.nf
          KASE is INTEGER
         On the initial call to SLACON, KASE should be 0\&.
         On an intermediate return, KASE will be 1 or 2, indicating
         whether X should be overwritten by A * X  or A**T * X\&.
         On the final return from SLACON, KASE will again be 0\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Nick Higham, University of Manchester\&. 
.br
 Originally named SONEST, dated March 16, 1988\&. 
.RE
.PP
\fBReferences:\fP
.RS 4
N\&.J\&. Higham, 'FORTRAN codes for estimating the one-norm of
  a real or complex matrix, with applications to condition estimation', ACM Trans\&. Math\&. Soft\&., vol\&. 14, no\&. 4, pp\&. 381-396, December 1988\&. 
.RE
.PP

.SS "subroutine sladiv (real A, real B, real C, real D, real P, real Q)"

.PP
\fBSLADIV\fP performs complex division in real arithmetic, avoiding unnecessary overflow\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLADIV performs complex division in  real arithmetic

                       a + i*b
            p + i*q = ---------
                       c + i*d

 The algorithm is due to Michael Baudin and Robert L\&. Smith
 and can be found in the paper
 'A Robust Complex Division in Scilab'
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIA\fP 
.PP
.nf
          A is REAL
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL
.fi
.PP
.br
\fID\fP 
.PP
.nf
          D is REAL
          The scalars a, b, c, and d in the above expression\&.
.fi
.PP
.br
\fIP\fP 
.PP
.nf
          P is REAL
.fi
.PP
.br
\fIQ\fP 
.PP
.nf
          Q is REAL
          The scalars p and q in the above expression\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slaein (logical RIGHTV, logical NOINIT, integer N, real, dimension( ldh, * ) H, integer LDH, real WR, real WI, real, dimension( * ) VR, real, dimension( * ) VI, real, dimension( ldb, * ) B, integer LDB, real, dimension( * ) WORK, real EPS3, real SMLNUM, real BIGNUM, integer INFO)"

.PP
\fBSLAEIN\fP computes a specified right or left eigenvector of an upper Hessenberg matrix by inverse iteration\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAEIN uses inverse iteration to find a right or left eigenvector
 corresponding to the eigenvalue (WR,WI) of a real upper Hessenberg
 matrix H\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIRIGHTV\fP 
.PP
.nf
          RIGHTV is LOGICAL
          = \&.TRUE\&. : compute right eigenvector;
          = \&.FALSE\&.: compute left eigenvector\&.
.fi
.PP
.br
\fINOINIT\fP 
.PP
.nf
          NOINIT is LOGICAL
          = \&.TRUE\&. : no initial vector supplied in (VR,VI)\&.
          = \&.FALSE\&.: initial vector supplied in (VR,VI)\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix H\&.  N >= 0\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
          The upper Hessenberg matrix H\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
          The leading dimension of the array H\&.  LDH >= max(1,N)\&.
.fi
.PP
.br
\fIWR\fP 
.PP
.nf
          WR is REAL
.fi
.PP
.br
\fIWI\fP 
.PP
.nf
          WI is REAL
          The real and imaginary parts of the eigenvalue of H whose
          corresponding right or left eigenvector is to be computed\&.
.fi
.PP
.br
\fIVR\fP 
.PP
.nf
          VR is REAL array, dimension (N)
.fi
.PP
.br
\fIVI\fP 
.PP
.nf
          VI is REAL array, dimension (N)
          On entry, if NOINIT = \&.FALSE\&. and WI = 0\&.0, VR must contain
          a real starting vector for inverse iteration using the real
          eigenvalue WR; if NOINIT = \&.FALSE\&. and WI\&.ne\&.0\&.0, VR and VI
          must contain the real and imaginary parts of a complex
          starting vector for inverse iteration using the complex
          eigenvalue (WR,WI); otherwise VR and VI need not be set\&.
          On exit, if WI = 0\&.0 (real eigenvalue), VR contains the
          computed real eigenvector; if WI\&.ne\&.0\&.0 (complex eigenvalue),
          VR and VI contain the real and imaginary parts of the
          computed complex eigenvector\&. The eigenvector is normalized
          so that the component of largest magnitude has magnitude 1;
          here the magnitude of a complex number (x,y) is taken to be
          |x| + |y|\&.
          VI is not referenced if WI = 0\&.0\&.
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL array, dimension (LDB,N)
.fi
.PP
.br
\fILDB\fP 
.PP
.nf
          LDB is INTEGER
          The leading dimension of the array B\&.  LDB >= N+1\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (N)
.fi
.PP
.br
\fIEPS3\fP 
.PP
.nf
          EPS3 is REAL
          A small machine-dependent value which is used to perturb
          close eigenvalues, and to replace zero pivots\&.
.fi
.PP
.br
\fISMLNUM\fP 
.PP
.nf
          SMLNUM is REAL
          A machine-dependent value close to the underflow threshold\&.
.fi
.PP
.br
\fIBIGNUM\fP 
.PP
.nf
          BIGNUM is REAL
          A machine-dependent value close to the overflow threshold\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit
          = 1:  inverse iteration did not converge; VR is set to the
                last iterate, and so is VI if WI\&.ne\&.0\&.0\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slaexc (logical WANTQ, integer N, real, dimension( ldt, * ) T, integer LDT, real, dimension( ldq, * ) Q, integer LDQ, integer J1, integer N1, integer N2, real, dimension( * ) WORK, integer INFO)"

.PP
\fBSLAEXC\fP swaps adjacent diagonal blocks of a real upper quasi-triangular matrix in Schur canonical form, by an orthogonal similarity transformation\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAEXC swaps adjacent diagonal blocks T11 and T22 of order 1 or 2 in
 an upper quasi-triangular matrix T by an orthogonal similarity
 transformation\&.

 T must be in Schur canonical form, that is, block upper triangular
 with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diagonal block
 has its diagonal elements equal and its off-diagonal elements of
 opposite sign\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIWANTQ\fP 
.PP
.nf
          WANTQ is LOGICAL
          = \&.TRUE\&. : accumulate the transformation in the matrix Q;
          = \&.FALSE\&.: do not accumulate the transformation\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix T\&. N >= 0\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,N)
          On entry, the upper quasi-triangular matrix T, in Schur
          canonical form\&.
          On exit, the updated matrix T, again in Schur canonical form\&.
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of the array T\&. LDT >= max(1,N)\&.
.fi
.PP
.br
\fIQ\fP 
.PP
.nf
          Q is REAL array, dimension (LDQ,N)
          On entry, if WANTQ is \&.TRUE\&., the orthogonal matrix Q\&.
          On exit, if WANTQ is \&.TRUE\&., the updated matrix Q\&.
          If WANTQ is \&.FALSE\&., Q is not referenced\&.
.fi
.PP
.br
\fILDQ\fP 
.PP
.nf
          LDQ is INTEGER
          The leading dimension of the array Q\&.
          LDQ >= 1; and if WANTQ is \&.TRUE\&., LDQ >= N\&.
.fi
.PP
.br
\fIJ1\fP 
.PP
.nf
          J1 is INTEGER
          The index of the first row of the first block T11\&.
.fi
.PP
.br
\fIN1\fP 
.PP
.nf
          N1 is INTEGER
          The order of the first block T11\&. N1 = 0, 1 or 2\&.
.fi
.PP
.br
\fIN2\fP 
.PP
.nf
          N2 is INTEGER
          The order of the second block T22\&. N2 = 0, 1 or 2\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (N)
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0: successful exit
          = 1: the transformed matrix T would be too far from Schur
               form; the blocks are not swapped and T and Q are
               unchanged\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slag2 (real, dimension( lda, * ) A, integer LDA, real, dimension( ldb, * ) B, integer LDB, real SAFMIN, real SCALE1, real SCALE2, real WR1, real WR2, real WI)"

.PP
\fBSLAG2\fP computes the eigenvalues of a 2-by-2 generalized eigenvalue problem, with scaling as necessary to avoid over-/underflow\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAG2 computes the eigenvalues of a 2 x 2 generalized eigenvalue
 problem  A - w B, with scaling as necessary to avoid over-/underflow\&.

 The scaling factor 's' results in a modified eigenvalue equation

     s A - w B

 where  s  is a non-negative scaling factor chosen so that  w,  w B,
 and  s A  do not overflow and, if possible, do not underflow, either\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA, 2)
          On entry, the 2 x 2 matrix A\&.  It is assumed that its 1-norm
          is less than 1/SAFMIN\&.  Entries less than
          sqrt(SAFMIN)*norm(A) are subject to being treated as zero\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= 2\&.
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL array, dimension (LDB, 2)
          On entry, the 2 x 2 upper triangular matrix B\&.  It is
          assumed that the one-norm of B is less than 1/SAFMIN\&.  The
          diagonals should be at least sqrt(SAFMIN) times the largest
          element of B (in absolute value); if a diagonal is smaller
          than that, then  +/- sqrt(SAFMIN) will be used instead of
          that diagonal\&.
.fi
.PP
.br
\fILDB\fP 
.PP
.nf
          LDB is INTEGER
          The leading dimension of the array B\&.  LDB >= 2\&.
.fi
.PP
.br
\fISAFMIN\fP 
.PP
.nf
          SAFMIN is REAL
          The smallest positive number s\&.t\&. 1/SAFMIN does not
          overflow\&.  (This should always be SLAMCH('S') -- it is an
          argument in order to avoid having to call SLAMCH frequently\&.)
.fi
.PP
.br
\fISCALE1\fP 
.PP
.nf
          SCALE1 is REAL
          A scaling factor used to avoid over-/underflow in the
          eigenvalue equation which defines the first eigenvalue\&.  If
          the eigenvalues are complex, then the eigenvalues are
          ( WR1  +/-  WI i ) / SCALE1  (which may lie outside the
          exponent range of the machine), SCALE1=SCALE2, and SCALE1
          will always be positive\&.  If the eigenvalues are real, then
          the first (real) eigenvalue is  WR1 / SCALE1 , but this may
          overflow or underflow, and in fact, SCALE1 may be zero or
          less than the underflow threshold if the exact eigenvalue
          is sufficiently large\&.
.fi
.PP
.br
\fISCALE2\fP 
.PP
.nf
          SCALE2 is REAL
          A scaling factor used to avoid over-/underflow in the
          eigenvalue equation which defines the second eigenvalue\&.  If
          the eigenvalues are complex, then SCALE2=SCALE1\&.  If the
          eigenvalues are real, then the second (real) eigenvalue is
          WR2 / SCALE2 , but this may overflow or underflow, and in
          fact, SCALE2 may be zero or less than the underflow
          threshold if the exact eigenvalue is sufficiently large\&.
.fi
.PP
.br
\fIWR1\fP 
.PP
.nf
          WR1 is REAL
          If the eigenvalue is real, then WR1 is SCALE1 times the
          eigenvalue closest to the (2,2) element of A B**(-1)\&.  If the
          eigenvalue is complex, then WR1=WR2 is SCALE1 times the real
          part of the eigenvalues\&.
.fi
.PP
.br
\fIWR2\fP 
.PP
.nf
          WR2 is REAL
          If the eigenvalue is real, then WR2 is SCALE2 times the
          other eigenvalue\&.  If the eigenvalue is complex, then
          WR1=WR2 is SCALE1 times the real part of the eigenvalues\&.
.fi
.PP
.br
\fIWI\fP 
.PP
.nf
          WI is REAL
          If the eigenvalue is real, then WI is zero\&.  If the
          eigenvalue is complex, then WI is SCALE1 times the imaginary
          part of the eigenvalues\&.  WI will always be non-negative\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slags2 (logical UPPER, real A1, real A2, real A3, real B1, real B2, real B3, real CSU, real SNU, real CSV, real SNV, real CSQ, real SNQ)"

.PP
\fBSLAGS2\fP computes 2-by-2 orthogonal matrices U, V, and Q, and applies them to matrices A and B such that the rows of the transformed A and B are parallel\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAGS2 computes 2-by-2 orthogonal matrices U, V and Q, such
 that if ( UPPER ) then

           U**T *A*Q = U**T *( A1 A2 )*Q = ( x  0  )
                             ( 0  A3 )     ( x  x  )
 and
           V**T*B*Q = V**T *( B1 B2 )*Q = ( x  0  )
                            ( 0  B3 )     ( x  x  )

 or if ( \&.NOT\&.UPPER ) then

           U**T *A*Q = U**T *( A1 0  )*Q = ( x  x  )
                             ( A2 A3 )     ( 0  x  )
 and
           V**T*B*Q = V**T*( B1 0  )*Q = ( x  x  )
                           ( B2 B3 )     ( 0  x  )

 The rows of the transformed A and B are parallel, where

   U = (  CSU  SNU ), V = (  CSV SNV ), Q = (  CSQ   SNQ )
       ( -SNU  CSU )      ( -SNV CSV )      ( -SNQ   CSQ )

 Z**T denotes the transpose of Z\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPPER\fP 
.PP
.nf
          UPPER is LOGICAL
          = \&.TRUE\&.: the input matrices A and B are upper triangular\&.
          = \&.FALSE\&.: the input matrices A and B are lower triangular\&.
.fi
.PP
.br
\fIA1\fP 
.PP
.nf
          A1 is REAL
.fi
.PP
.br
\fIA2\fP 
.PP
.nf
          A2 is REAL
.fi
.PP
.br
\fIA3\fP 
.PP
.nf
          A3 is REAL
          On entry, A1, A2 and A3 are elements of the input 2-by-2
          upper (lower) triangular matrix A\&.
.fi
.PP
.br
\fIB1\fP 
.PP
.nf
          B1 is REAL
.fi
.PP
.br
\fIB2\fP 
.PP
.nf
          B2 is REAL
.fi
.PP
.br
\fIB3\fP 
.PP
.nf
          B3 is REAL
          On entry, B1, B2 and B3 are elements of the input 2-by-2
          upper (lower) triangular matrix B\&.
.fi
.PP
.br
\fICSU\fP 
.PP
.nf
          CSU is REAL
.fi
.PP
.br
\fISNU\fP 
.PP
.nf
          SNU is REAL
          The desired orthogonal matrix U\&.
.fi
.PP
.br
\fICSV\fP 
.PP
.nf
          CSV is REAL
.fi
.PP
.br
\fISNV\fP 
.PP
.nf
          SNV is REAL
          The desired orthogonal matrix V\&.
.fi
.PP
.br
\fICSQ\fP 
.PP
.nf
          CSQ is REAL
.fi
.PP
.br
\fISNQ\fP 
.PP
.nf
          SNQ is REAL
          The desired orthogonal matrix Q\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slagtm (character TRANS, integer N, integer NRHS, real ALPHA, real, dimension( * ) DL, real, dimension( * ) D, real, dimension( * ) DU, real, dimension( ldx, * ) X, integer LDX, real BETA, real, dimension( ldb, * ) B, integer LDB)"

.PP
\fBSLAGTM\fP performs a matrix-matrix product of the form C = αAB+βC, where A is a tridiagonal matrix, B and C are rectangular matrices, and α and β are scalars, which may be 0, 1, or -1\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAGTM performs a matrix-vector product of the form

    B := alpha * A * X + beta * B

 where A is a tridiagonal matrix of order N, B and X are N by NRHS
 matrices, and alpha and beta are real scalars, each of which may be
 0\&., 1\&., or -1\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fITRANS\fP 
.PP
.nf
          TRANS is CHARACTER*1
          Specifies the operation applied to A\&.
          = 'N':  No transpose, B := alpha * A * X + beta * B
          = 'T':  Transpose,    B := alpha * A'* X + beta * B
          = 'C':  Conjugate transpose = Transpose
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.
.fi
.PP
.br
\fINRHS\fP 
.PP
.nf
          NRHS is INTEGER
          The number of right hand sides, i\&.e\&., the number of columns
          of the matrices X and B\&.
.fi
.PP
.br
\fIALPHA\fP 
.PP
.nf
          ALPHA is REAL
          The scalar alpha\&.  ALPHA must be 0\&., 1\&., or -1\&.; otherwise,
          it is assumed to be 0\&.
.fi
.PP
.br
\fIDL\fP 
.PP
.nf
          DL is REAL array, dimension (N-1)
          The (n-1) sub-diagonal elements of T\&.
.fi
.PP
.br
\fID\fP 
.PP
.nf
          D is REAL array, dimension (N)
          The diagonal elements of T\&.
.fi
.PP
.br
\fIDU\fP 
.PP
.nf
          DU is REAL array, dimension (N-1)
          The (n-1) super-diagonal elements of T\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (LDX,NRHS)
          The N by NRHS matrix X\&.
.fi
.PP
.br
\fILDX\fP 
.PP
.nf
          LDX is INTEGER
          The leading dimension of the array X\&.  LDX >= max(N,1)\&.
.fi
.PP
.br
\fIBETA\fP 
.PP
.nf
          BETA is REAL
          The scalar beta\&.  BETA must be 0\&., 1\&., or -1\&.; otherwise,
          it is assumed to be 1\&.
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL array, dimension (LDB,NRHS)
          On entry, the N by NRHS matrix B\&.
          On exit, B is overwritten by the matrix expression
          B := alpha * A * X + beta * B\&.
.fi
.PP
.br
\fILDB\fP 
.PP
.nf
          LDB is INTEGER
          The leading dimension of the array B\&.  LDB >= max(N,1)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slagv2 (real, dimension( lda, * ) A, integer LDA, real, dimension( ldb, * ) B, integer LDB, real, dimension( 2 ) ALPHAR, real, dimension( 2 ) ALPHAI, real, dimension( 2 ) BETA, real CSL, real SNL, real CSR, real SNR)"

.PP
\fBSLAGV2\fP computes the Generalized Schur factorization of a real 2-by-2 matrix pencil (A,B) where B is upper triangular\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAGV2 computes the Generalized Schur factorization of a real 2-by-2
 matrix pencil (A,B) where B is upper triangular\&. This routine
 computes orthogonal (rotation) matrices given by CSL, SNL and CSR,
 SNR such that

 1) if the pencil (A,B) has two real eigenvalues (include 0/0 or 1/0
    types), then

    [ a11 a12 ] := [  CSL  SNL ] [ a11 a12 ] [  CSR -SNR ]
    [  0  a22 ]    [ -SNL  CSL ] [ a21 a22 ] [  SNR  CSR ]

    [ b11 b12 ] := [  CSL  SNL ] [ b11 b12 ] [  CSR -SNR ]
    [  0  b22 ]    [ -SNL  CSL ] [  0  b22 ] [  SNR  CSR ],

 2) if the pencil (A,B) has a pair of complex conjugate eigenvalues,
    then

    [ a11 a12 ] := [  CSL  SNL ] [ a11 a12 ] [  CSR -SNR ]
    [ a21 a22 ]    [ -SNL  CSL ] [ a21 a22 ] [  SNR  CSR ]

    [ b11  0  ] := [  CSL  SNL ] [ b11 b12 ] [  CSR -SNR ]
    [  0  b22 ]    [ -SNL  CSL ] [  0  b22 ] [  SNR  CSR ]

    where b11 >= b22 > 0\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA, 2)
          On entry, the 2 x 2 matrix A\&.
          On exit, A is overwritten by the ``A-part'' of the
          generalized Schur form\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          THe leading dimension of the array A\&.  LDA >= 2\&.
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL array, dimension (LDB, 2)
          On entry, the upper triangular 2 x 2 matrix B\&.
          On exit, B is overwritten by the ``B-part'' of the
          generalized Schur form\&.
.fi
.PP
.br
\fILDB\fP 
.PP
.nf
          LDB is INTEGER
          THe leading dimension of the array B\&.  LDB >= 2\&.
.fi
.PP
.br
\fIALPHAR\fP 
.PP
.nf
          ALPHAR is REAL array, dimension (2)
.fi
.PP
.br
\fIALPHAI\fP 
.PP
.nf
          ALPHAI is REAL array, dimension (2)
.fi
.PP
.br
\fIBETA\fP 
.PP
.nf
          BETA is REAL array, dimension (2)
          (ALPHAR(k)+i*ALPHAI(k))/BETA(k) are the eigenvalues of the
          pencil (A,B), k=1,2, i = sqrt(-1)\&.  Note that BETA(k) may
          be zero\&.
.fi
.PP
.br
\fICSL\fP 
.PP
.nf
          CSL is REAL
          The cosine of the left rotation matrix\&.
.fi
.PP
.br
\fISNL\fP 
.PP
.nf
          SNL is REAL
          The sine of the left rotation matrix\&.
.fi
.PP
.br
\fICSR\fP 
.PP
.nf
          CSR is REAL
          The cosine of the right rotation matrix\&.
.fi
.PP
.br
\fISNR\fP 
.PP
.nf
          SNR is REAL
          The sine of the right rotation matrix\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Mark Fahey, Department of Mathematics, Univ\&. of Kentucky, USA 
.RE
.PP

.SS "subroutine slahqr (logical WANTT, logical WANTZ, integer N, integer ILO, integer IHI, real, dimension( ldh, * ) H, integer LDH, real, dimension( * ) WR, real, dimension( * ) WI, integer ILOZ, integer IHIZ, real, dimension( ldz, * ) Z, integer LDZ, integer INFO)"

.PP
\fBSLAHQR\fP computes the eigenvalues and Schur factorization of an upper Hessenberg matrix, using the double-shift/single-shift QR algorithm\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
    SLAHQR is an auxiliary routine called by SHSEQR to update the
    eigenvalues and Schur decomposition already computed by SHSEQR, by
    dealing with the Hessenberg submatrix in rows and columns ILO to
    IHI\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIWANTT\fP 
.PP
.nf
          WANTT is LOGICAL
          = \&.TRUE\&. : the full Schur form T is required;
          = \&.FALSE\&.: only eigenvalues are required\&.
.fi
.PP
.br
\fIWANTZ\fP 
.PP
.nf
          WANTZ is LOGICAL
          = \&.TRUE\&. : the matrix of Schur vectors Z is required;
          = \&.FALSE\&.: Schur vectors are not required\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix H\&.  N >= 0\&.
.fi
.PP
.br
\fIILO\fP 
.PP
.nf
          ILO is INTEGER
.fi
.PP
.br
\fIIHI\fP 
.PP
.nf
          IHI is INTEGER
          It is assumed that H is already upper quasi-triangular in
          rows and columns IHI+1:N, and that H(ILO,ILO-1) = 0 (unless
          ILO = 1)\&. SLAHQR works primarily with the Hessenberg
          submatrix in rows and columns ILO to IHI, but applies
          transformations to all of H if WANTT is \&.TRUE\&.\&.
          1 <= ILO <= max(1,IHI); IHI <= N\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
          On entry, the upper Hessenberg matrix H\&.
          On exit, if INFO is zero and if WANTT is \&.TRUE\&., H is upper
          quasi-triangular in rows and columns ILO:IHI, with any
          2-by-2 diagonal blocks in standard form\&. If INFO is zero
          and WANTT is \&.FALSE\&., the contents of H are unspecified on
          exit\&.  The output state of H if INFO is nonzero is given
          below under the description of INFO\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
          The leading dimension of the array H\&. LDH >= max(1,N)\&.
.fi
.PP
.br
\fIWR\fP 
.PP
.nf
          WR is REAL array, dimension (N)
.fi
.PP
.br
\fIWI\fP 
.PP
.nf
          WI is REAL array, dimension (N)
          The real and imaginary parts, respectively, of the computed
          eigenvalues ILO to IHI are stored in the corresponding
          elements of WR and WI\&. If two eigenvalues are computed as a
          complex conjugate pair, they are stored in consecutive
          elements of WR and WI, say the i-th and (i+1)th, with
          WI(i) > 0 and WI(i+1) < 0\&. If WANTT is \&.TRUE\&., the
          eigenvalues are stored in the same order as on the diagonal
          of the Schur form returned in H, with WR(i) = H(i,i), and, if
          H(i:i+1,i:i+1) is a 2-by-2 diagonal block,
          WI(i) = sqrt(H(i+1,i)*H(i,i+1)) and WI(i+1) = -WI(i)\&.
.fi
.PP
.br
\fIILOZ\fP 
.PP
.nf
          ILOZ is INTEGER
.fi
.PP
.br
\fIIHIZ\fP 
.PP
.nf
          IHIZ is INTEGER
          Specify the rows of Z to which transformations must be
          applied if WANTZ is \&.TRUE\&.\&.
          1 <= ILOZ <= ILO; IHI <= IHIZ <= N\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ,N)
          If WANTZ is \&.TRUE\&., on entry Z must contain the current
          matrix Z of transformations accumulated by SHSEQR, and on
          exit Z has been updated; transformations are applied only to
          the submatrix Z(ILOZ:IHIZ,ILO:IHI)\&.
          If WANTZ is \&.FALSE\&., Z is not referenced\&.
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
          The leading dimension of the array Z\&. LDZ >= max(1,N)\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
           = 0:   successful exit
           > 0:   If INFO = i, SLAHQR failed to compute all the
                  eigenvalues ILO to IHI in a total of 30 iterations
                  per eigenvalue; elements i+1:ihi of WR and WI
                  contain those eigenvalues which have been
                  successfully computed\&.

                  If INFO > 0 and WANTT is \&.FALSE\&., then on exit,
                  the remaining unconverged eigenvalues are the
                  eigenvalues of the upper Hessenberg matrix rows
                  and columns ILO through INFO of the final, output
                  value of H\&.

                  If INFO > 0 and WANTT is \&.TRUE\&., then on exit
          (*)       (initial value of H)*U  = U*(final value of H)
                  where U is an orthogonal matrix\&.    The final
                  value of H is upper Hessenberg and triangular in
                  rows and columns INFO+1 through IHI\&.

                  If INFO > 0 and WANTZ is \&.TRUE\&., then on exit
                      (final value of Z)  = (initial value of Z)*U
                  where U is the orthogonal matrix in (*)
                  (regardless of the value of WANTT\&.)
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
     02-96 Based on modifications by
     David Day, Sandia National Laboratory, USA

     12-04 Further modifications by
     Ralph Byers, University of Kansas, USA
     This is a modified version of SLAHQR from LAPACK version 3\&.0\&.
     It is (1) more robust against overflow and underflow and
     (2) adopts the more conservative Ahues & Tisseur stopping
     criterion (LAWN 122, 1997)\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine slahr2 (integer N, integer K, integer NB, real, dimension( lda, * ) A, integer LDA, real, dimension( nb ) TAU, real, dimension( ldt, nb ) T, integer LDT, real, dimension( ldy, nb ) Y, integer LDY)"

.PP
\fBSLAHR2\fP reduces the specified number of first columns of a general rectangular matrix A so that elements below the specified subdiagonal are zero, and returns auxiliary matrices which are needed to apply the transformation to the unreduced part of A\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAHR2 reduces the first NB columns of A real general n-BY-(n-k+1)
 matrix A so that elements below the k-th subdiagonal are zero\&. The
 reduction is performed by an orthogonal similarity transformation
 Q**T * A * Q\&. The routine returns the matrices V and T which determine
 Q as a block reflector I - V*T*V**T, and also the matrix Y = A * V * T\&.

 This is an auxiliary routine called by SGEHRD\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER
          The offset for the reduction\&. Elements below the k-th
          subdiagonal in the first NB columns are reduced to zero\&.
          K < N\&.
.fi
.PP
.br
\fINB\fP 
.PP
.nf
          NB is INTEGER
          The number of columns to be reduced\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N-K+1)
          On entry, the n-by-(n-k+1) general matrix A\&.
          On exit, the elements on and above the k-th subdiagonal in
          the first NB columns are overwritten with the corresponding
          elements of the reduced matrix; the elements below the k-th
          subdiagonal, with the array TAU, represent the matrix Q as a
          product of elementary reflectors\&. The other columns of A are
          unchanged\&. See Further Details\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= max(1,N)\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL array, dimension (NB)
          The scalar factors of the elementary reflectors\&. See Further
          Details\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,NB)
          The upper triangular matrix T\&.
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of the array T\&.  LDT >= NB\&.
.fi
.PP
.br
\fIY\fP 
.PP
.nf
          Y is REAL array, dimension (LDY,NB)
          The n-by-nb matrix Y\&.
.fi
.PP
.br
\fILDY\fP 
.PP
.nf
          LDY is INTEGER
          The leading dimension of the array Y\&. LDY >= N\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  The matrix Q is represented as a product of nb elementary reflectors

     Q = H(1) H(2) \&. \&. \&. H(nb)\&.

  Each H(i) has the form

     H(i) = I - tau * v * v**T

  where tau is a real scalar, and v is a real vector with
  v(1:i+k-1) = 0, v(i+k) = 1; v(i+k+1:n) is stored on exit in
  A(i+k+1:n,i), and tau in TAU(i)\&.

  The elements of the vectors v together form the (n-k+1)-by-nb matrix
  V which is needed, with T and Y, to apply the transformation to the
  unreduced part of the matrix, using an update of the form:
  A := (I - V*T*V**T) * (A - Y*V**T)\&.

  The contents of A on exit are illustrated by the following example
  with n = 7, k = 3 and nb = 2:

     ( a   a   a   a   a )
     ( a   a   a   a   a )
     ( a   a   a   a   a )
     ( h   h   a   a   a )
     ( v1  h   a   a   a )
     ( v1  v2  a   a   a )
     ( v1  v2  a   a   a )

  where a denotes an element of the original matrix A, h denotes a
  modified element of the upper Hessenberg matrix H, and vi denotes an
  element of the vector defining H(i)\&.

  This subroutine is a slight modification of LAPACK-3\&.0's SLAHRD
  incorporating improvements proposed by Quintana-Orti and Van de
  Gejin\&. Note that the entries of A(1:K,2:NB) differ from those
  returned by the original LAPACK-3\&.0's SLAHRD routine\&. (This
  subroutine is not backward compatible with LAPACK-3\&.0's SLAHRD\&.)
.fi
.PP
 
.RE
.PP
\fBReferences:\fP
.RS 4
Gregorio Quintana-Orti and Robert van de Geijn, 'Improving the
  performance of reduction to Hessenberg form,' ACM Transactions on Mathematical Software, 32(2):180-194, June 2006\&. 
.RE
.PP

.SS "subroutine slaic1 (integer JOB, integer J, real, dimension( j ) X, real SEST, real, dimension( j ) W, real GAMMA, real SESTPR, real S, real C)"

.PP
\fBSLAIC1\fP applies one step of incremental condition estimation\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAIC1 applies one step of incremental condition estimation in
 its simplest version:

 Let x, twonorm(x) = 1, be an approximate singular vector of an j-by-j
 lower triangular matrix L, such that
          twonorm(L*x) = sest
 Then SLAIC1 computes sestpr, s, c such that
 the vector
                 [ s*x ]
          xhat = [  c  ]
 is an approximate singular vector of
                 [ L      0  ]
          Lhat = [ w**T gamma ]
 in the sense that
          twonorm(Lhat*xhat) = sestpr\&.

 Depending on JOB, an estimate for the largest or smallest singular
 value is computed\&.

 Note that [s c]**T and sestpr**2 is an eigenpair of the system

     diag(sest*sest, 0) + [alpha  gamma] * [ alpha ]
                                           [ gamma ]

 where  alpha =  x**T*w\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIJOB\fP 
.PP
.nf
          JOB is INTEGER
          = 1: an estimate for the largest singular value is computed\&.
          = 2: an estimate for the smallest singular value is computed\&.
.fi
.PP
.br
\fIJ\fP 
.PP
.nf
          J is INTEGER
          Length of X and W
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (J)
          The j-vector x\&.
.fi
.PP
.br
\fISEST\fP 
.PP
.nf
          SEST is REAL
          Estimated singular value of j by j matrix L
.fi
.PP
.br
\fIW\fP 
.PP
.nf
          W is REAL array, dimension (J)
          The j-vector w\&.
.fi
.PP
.br
\fIGAMMA\fP 
.PP
.nf
          GAMMA is REAL
          The diagonal element gamma\&.
.fi
.PP
.br
\fISESTPR\fP 
.PP
.nf
          SESTPR is REAL
          Estimated singular value of (j+1) by (j+1) matrix Lhat\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is REAL
          Sine needed in forming xhat\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL
          Cosine needed in forming xhat\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slaln2 (logical LTRANS, integer NA, integer NW, real SMIN, real CA, real, dimension( lda, * ) A, integer LDA, real D1, real D2, real, dimension( ldb, * ) B, integer LDB, real WR, real WI, real, dimension( ldx, * ) X, integer LDX, real SCALE, real XNORM, integer INFO)"

.PP
\fBSLALN2\fP solves a 1-by-1 or 2-by-2 linear system of equations of the specified form\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLALN2 solves a system of the form  (ca A - w D ) X = s B
 or (ca A**T - w D) X = s B   with possible scaling ('s') and
 perturbation of A\&.  (A**T means A-transpose\&.)

 A is an NA x NA real matrix, ca is a real scalar, D is an NA x NA
 real diagonal matrix, w is a real or complex value, and X and B are
 NA x 1 matrices -- real if w is real, complex if w is complex\&.  NA
 may be 1 or 2\&.

 If w is complex, X and B are represented as NA x 2 matrices,
 the first column of each being the real part and the second
 being the imaginary part\&.

 's' is a scaling factor (<= 1), computed by SLALN2, which is
 so chosen that X can be computed without overflow\&.  X is further
 scaled if necessary to assure that norm(ca A - w D)*norm(X) is less
 than overflow\&.

 If both singular values of (ca A - w D) are less than SMIN,
 SMIN*identity will be used instead of (ca A - w D)\&.  If only one
 singular value is less than SMIN, one element of (ca A - w D) will be
 perturbed enough to make the smallest singular value roughly SMIN\&.
 If both singular values are at least SMIN, (ca A - w D) will not be
 perturbed\&.  In any case, the perturbation will be at most some small
 multiple of max( SMIN, ulp*norm(ca A - w D) )\&.  The singular values
 are computed by infinity-norm approximations, and thus will only be
 correct to a factor of 2 or so\&.

 Note: all input quantities are assumed to be smaller than overflow
 by a reasonable factor\&.  (See BIGNUM\&.)
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fILTRANS\fP 
.PP
.nf
          LTRANS is LOGICAL
          =\&.TRUE\&.:  A-transpose will be used\&.
          =\&.FALSE\&.: A will be used (not transposed\&.)
.fi
.PP
.br
\fINA\fP 
.PP
.nf
          NA is INTEGER
          The size of the matrix A\&.  It may (only) be 1 or 2\&.
.fi
.PP
.br
\fINW\fP 
.PP
.nf
          NW is INTEGER
          1 if 'w' is real, 2 if 'w' is complex\&.  It may only be 1
          or 2\&.
.fi
.PP
.br
\fISMIN\fP 
.PP
.nf
          SMIN is REAL
          The desired lower bound on the singular values of A\&.  This
          should be a safe distance away from underflow or overflow,
          say, between (underflow/machine precision) and  (machine
          precision * overflow )\&.  (See BIGNUM and ULP\&.)
.fi
.PP
.br
\fICA\fP 
.PP
.nf
          CA is REAL
          The coefficient c, which A is multiplied by\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,NA)
          The NA x NA matrix A\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of A\&.  It must be at least NA\&.
.fi
.PP
.br
\fID1\fP 
.PP
.nf
          D1 is REAL
          The 1,1 element in the diagonal matrix D\&.
.fi
.PP
.br
\fID2\fP 
.PP
.nf
          D2 is REAL
          The 2,2 element in the diagonal matrix D\&.  Not used if NA=1\&.
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL array, dimension (LDB,NW)
          The NA x NW matrix B (right-hand side)\&.  If NW=2 ('w' is
          complex), column 1 contains the real part of B and column 2
          contains the imaginary part\&.
.fi
.PP
.br
\fILDB\fP 
.PP
.nf
          LDB is INTEGER
          The leading dimension of B\&.  It must be at least NA\&.
.fi
.PP
.br
\fIWR\fP 
.PP
.nf
          WR is REAL
          The real part of the scalar 'w'\&.
.fi
.PP
.br
\fIWI\fP 
.PP
.nf
          WI is REAL
          The imaginary part of the scalar 'w'\&.  Not used if NW=1\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (LDX,NW)
          The NA x NW matrix X (unknowns), as computed by SLALN2\&.
          If NW=2 ('w' is complex), on exit, column 1 will contain
          the real part of X and column 2 will contain the imaginary
          part\&.
.fi
.PP
.br
\fILDX\fP 
.PP
.nf
          LDX is INTEGER
          The leading dimension of X\&.  It must be at least NA\&.
.fi
.PP
.br
\fISCALE\fP 
.PP
.nf
          SCALE is REAL
          The scale factor that B must be multiplied by to insure
          that overflow does not occur when computing X\&.  Thus,
          (ca A - w D) X  will be SCALE*B, not B (ignoring
          perturbations of A\&.)  It will be at most 1\&.
.fi
.PP
.br
\fIXNORM\fP 
.PP
.nf
          XNORM is REAL
          The infinity-norm of X, when X is regarded as an NA x NW
          real matrix\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          An error flag\&.  It will be set to zero if no error occurs,
          a negative number if an argument is in error, or a positive
          number if  ca A - w D  had to be perturbed\&.
          The possible values are:
          = 0: No error occurred, and (ca A - w D) did not have to be
                 perturbed\&.
          = 1: (ca A - w D) had to be perturbed to make its smallest
               (or only) singular value greater than SMIN\&.
          NOTE: In the interests of speed, this routine does not
                check the inputs for errors\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "real function slangt (character NORM, integer N, real, dimension( * ) DL, real, dimension( * ) D, real, dimension( * ) DU)"

.PP
\fBSLANGT\fP returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of a general tridiagonal matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANGT  returns the value of the one norm,  or the Frobenius norm, or
 the  infinity norm,  or the  element of  largest absolute value  of a
 real tridiagonal matrix A\&.
.fi
.PP
.RE
.PP
\fBReturns\fP
.RS 4
SLANGT 
.PP
.nf
    SLANGT = ( max(abs(A(i,j))), NORM = 'M' or 'm'
             (
             ( norm1(A),         NORM = '1', 'O' or 'o'
             (
             ( normI(A),         NORM = 'I' or 'i'
             (
             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'

 where  norm1  denotes the  one norm of a matrix (maximum column sum),
 normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
 normF  denotes the  Frobenius norm of a matrix (square root of sum of
 squares)\&.  Note that  max(abs(A(i,j)))  is not a consistent matrix norm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fINORM\fP 
.PP
.nf
          NORM is CHARACTER*1
          Specifies the value to be returned in SLANGT as described
          above\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.  When N = 0, SLANGT is
          set to zero\&.
.fi
.PP
.br
\fIDL\fP 
.PP
.nf
          DL is REAL array, dimension (N-1)
          The (n-1) sub-diagonal elements of A\&.
.fi
.PP
.br
\fID\fP 
.PP
.nf
          D is REAL array, dimension (N)
          The diagonal elements of A\&.
.fi
.PP
.br
\fIDU\fP 
.PP
.nf
          DU is REAL array, dimension (N-1)
          The (n-1) super-diagonal elements of A\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "real function slanhs (character NORM, integer N, real, dimension( lda, * ) A, integer LDA, real, dimension( * ) WORK)"

.PP
\fBSLANHS\fP returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of an upper Hessenberg matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANHS  returns the value of the one norm,  or the Frobenius norm, or
 the  infinity norm,  or the  element of  largest absolute value  of a
 Hessenberg matrix A\&.
.fi
.PP
.RE
.PP
\fBReturns\fP
.RS 4
SLANHS 
.PP
.nf
    SLANHS = ( max(abs(A(i,j))), NORM = 'M' or 'm'
             (
             ( norm1(A),         NORM = '1', 'O' or 'o'
             (
             ( normI(A),         NORM = 'I' or 'i'
             (
             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'

 where  norm1  denotes the  one norm of a matrix (maximum column sum),
 normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
 normF  denotes the  Frobenius norm of a matrix (square root of sum of
 squares)\&.  Note that  max(abs(A(i,j)))  is not a consistent matrix norm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fINORM\fP 
.PP
.nf
          NORM is CHARACTER*1
          Specifies the value to be returned in SLANHS as described
          above\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.  When N = 0, SLANHS is
          set to zero\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          The n by n upper Hessenberg matrix A; the part of A below the
          first sub-diagonal is not referenced\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= max(N,1)\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (MAX(1,LWORK)),
          where LWORK >= N when NORM = 'I'; otherwise, WORK is not
          referenced\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "real function slansb (character NORM, character UPLO, integer N, integer K, real, dimension( ldab, * ) AB, integer LDAB, real, dimension( * ) WORK)"

.PP
\fBSLANSB\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a symmetric band matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANSB  returns the value of the one norm,  or the Frobenius norm, or
 the  infinity norm,  or the element of  largest absolute value  of an
 n by n symmetric band matrix A,  with k super-diagonals\&.
.fi
.PP
.RE
.PP
\fBReturns\fP
.RS 4
SLANSB 
.PP
.nf
    SLANSB = ( max(abs(A(i,j))), NORM = 'M' or 'm'
             (
             ( norm1(A),         NORM = '1', 'O' or 'o'
             (
             ( normI(A),         NORM = 'I' or 'i'
             (
             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'

 where  norm1  denotes the  one norm of a matrix (maximum column sum),
 normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
 normF  denotes the  Frobenius norm of a matrix (square root of sum of
 squares)\&.  Note that  max(abs(A(i,j)))  is not a consistent matrix norm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fINORM\fP 
.PP
.nf
          NORM is CHARACTER*1
          Specifies the value to be returned in SLANSB as described
          above\&.
.fi
.PP
.br
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the upper or lower triangular part of the
          band matrix A is supplied\&.
          = 'U':  Upper triangular part is supplied
          = 'L':  Lower triangular part is supplied
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.  When N = 0, SLANSB is
          set to zero\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER
          The number of super-diagonals or sub-diagonals of the
          band matrix A\&.  K >= 0\&.
.fi
.PP
.br
\fIAB\fP 
.PP
.nf
          AB is REAL array, dimension (LDAB,N)
          The upper or lower triangle of the symmetric band matrix A,
          stored in the first K+1 rows of AB\&.  The j-th column of A is
          stored in the j-th column of the array AB as follows:
          if UPLO = 'U', AB(k+1+i-j,j) = A(i,j) for max(1,j-k)<=i<=j;
          if UPLO = 'L', AB(1+i-j,j)   = A(i,j) for j<=i<=min(n,j+k)\&.
.fi
.PP
.br
\fILDAB\fP 
.PP
.nf
          LDAB is INTEGER
          The leading dimension of the array AB\&.  LDAB >= K+1\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (MAX(1,LWORK)),
          where LWORK >= N when NORM = 'I' or '1' or 'O'; otherwise,
          WORK is not referenced\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "real function slansp (character NORM, character UPLO, integer N, real, dimension( * ) AP, real, dimension( * ) WORK)"

.PP
\fBSLANSP\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a symmetric matrix supplied in packed form\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANSP  returns the value of the one norm,  or the Frobenius norm, or
 the  infinity norm,  or the  element of  largest absolute value  of a
 real symmetric matrix A,  supplied in packed form\&.
.fi
.PP
.RE
.PP
\fBReturns\fP
.RS 4
SLANSP 
.PP
.nf
    SLANSP = ( max(abs(A(i,j))), NORM = 'M' or 'm'
             (
             ( norm1(A),         NORM = '1', 'O' or 'o'
             (
             ( normI(A),         NORM = 'I' or 'i'
             (
             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'

 where  norm1  denotes the  one norm of a matrix (maximum column sum),
 normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
 normF  denotes the  Frobenius norm of a matrix (square root of sum of
 squares)\&.  Note that  max(abs(A(i,j)))  is not a consistent matrix norm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fINORM\fP 
.PP
.nf
          NORM is CHARACTER*1
          Specifies the value to be returned in SLANSP as described
          above\&.
.fi
.PP
.br
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the upper or lower triangular part of the
          symmetric matrix A is supplied\&.
          = 'U':  Upper triangular part of A is supplied
          = 'L':  Lower triangular part of A is supplied
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.  When N = 0, SLANSP is
          set to zero\&.
.fi
.PP
.br
\fIAP\fP 
.PP
.nf
          AP is REAL array, dimension (N*(N+1)/2)
          The upper or lower triangle of the symmetric matrix A, packed
          columnwise in a linear array\&.  The j-th column of A is stored
          in the array AP as follows:
          if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
          if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (MAX(1,LWORK)),
          where LWORK >= N when NORM = 'I' or '1' or 'O'; otherwise,
          WORK is not referenced\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "real function slantb (character NORM, character UPLO, character DIAG, integer N, integer K, real, dimension( ldab, * ) AB, integer LDAB, real, dimension( * ) WORK)"

.PP
\fBSLANTB\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a triangular band matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANTB  returns the value of the one norm,  or the Frobenius norm, or
 the  infinity norm,  or the element of  largest absolute value  of an
 n by n triangular band matrix A,  with ( k + 1 ) diagonals\&.
.fi
.PP
.RE
.PP
\fBReturns\fP
.RS 4
SLANTB 
.PP
.nf
    SLANTB = ( max(abs(A(i,j))), NORM = 'M' or 'm'
             (
             ( norm1(A),         NORM = '1', 'O' or 'o'
             (
             ( normI(A),         NORM = 'I' or 'i'
             (
             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'

 where  norm1  denotes the  one norm of a matrix (maximum column sum),
 normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
 normF  denotes the  Frobenius norm of a matrix (square root of sum of
 squares)\&.  Note that  max(abs(A(i,j)))  is not a consistent matrix norm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fINORM\fP 
.PP
.nf
          NORM is CHARACTER*1
          Specifies the value to be returned in SLANTB as described
          above\&.
.fi
.PP
.br
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the matrix A is upper or lower triangular\&.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fIDIAG\fP 
.PP
.nf
          DIAG is CHARACTER*1
          Specifies whether or not the matrix A is unit triangular\&.
          = 'N':  Non-unit triangular
          = 'U':  Unit triangular
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.  When N = 0, SLANTB is
          set to zero\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER
          The number of super-diagonals of the matrix A if UPLO = 'U',
          or the number of sub-diagonals of the matrix A if UPLO = 'L'\&.
          K >= 0\&.
.fi
.PP
.br
\fIAB\fP 
.PP
.nf
          AB is REAL array, dimension (LDAB,N)
          The upper or lower triangular band matrix A, stored in the
          first k+1 rows of AB\&.  The j-th column of A is stored
          in the j-th column of the array AB as follows:
          if UPLO = 'U', AB(k+1+i-j,j) = A(i,j) for max(1,j-k)<=i<=j;
          if UPLO = 'L', AB(1+i-j,j)   = A(i,j) for j<=i<=min(n,j+k)\&.
          Note that when DIAG = 'U', the elements of the array AB
          corresponding to the diagonal elements of the matrix A are
          not referenced, but are assumed to be one\&.
.fi
.PP
.br
\fILDAB\fP 
.PP
.nf
          LDAB is INTEGER
          The leading dimension of the array AB\&.  LDAB >= K+1\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (MAX(1,LWORK)),
          where LWORK >= N when NORM = 'I'; otherwise, WORK is not
          referenced\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "real function slantp (character NORM, character UPLO, character DIAG, integer N, real, dimension( * ) AP, real, dimension( * ) WORK)"

.PP
\fBSLANTP\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a triangular matrix supplied in packed form\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANTP  returns the value of the one norm,  or the Frobenius norm, or
 the  infinity norm,  or the  element of  largest absolute value  of a
 triangular matrix A, supplied in packed form\&.
.fi
.PP
.RE
.PP
\fBReturns\fP
.RS 4
SLANTP 
.PP
.nf
    SLANTP = ( max(abs(A(i,j))), NORM = 'M' or 'm'
             (
             ( norm1(A),         NORM = '1', 'O' or 'o'
             (
             ( normI(A),         NORM = 'I' or 'i'
             (
             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'

 where  norm1  denotes the  one norm of a matrix (maximum column sum),
 normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
 normF  denotes the  Frobenius norm of a matrix (square root of sum of
 squares)\&.  Note that  max(abs(A(i,j)))  is not a consistent matrix norm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fINORM\fP 
.PP
.nf
          NORM is CHARACTER*1
          Specifies the value to be returned in SLANTP as described
          above\&.
.fi
.PP
.br
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the matrix A is upper or lower triangular\&.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fIDIAG\fP 
.PP
.nf
          DIAG is CHARACTER*1
          Specifies whether or not the matrix A is unit triangular\&.
          = 'N':  Non-unit triangular
          = 'U':  Unit triangular
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.  When N = 0, SLANTP is
          set to zero\&.
.fi
.PP
.br
\fIAP\fP 
.PP
.nf
          AP is REAL array, dimension (N*(N+1)/2)
          The upper or lower triangular matrix A, packed columnwise in
          a linear array\&.  The j-th column of A is stored in the array
          AP as follows:
          if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
          if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n\&.
          Note that when DIAG = 'U', the elements of the array AP
          corresponding to the diagonal elements of the matrix A are
          not referenced, but are assumed to be one\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (MAX(1,LWORK)),
          where LWORK >= N when NORM = 'I'; otherwise, WORK is not
          referenced\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "real function slantr (character NORM, character UPLO, character DIAG, integer M, integer N, real, dimension( lda, * ) A, integer LDA, real, dimension( * ) WORK)"

.PP
\fBSLANTR\fP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a trapezoidal or triangular matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANTR  returns the value of the one norm,  or the Frobenius norm, or
 the  infinity norm,  or the  element of  largest absolute value  of a
 trapezoidal or triangular matrix A\&.
.fi
.PP
.RE
.PP
\fBReturns\fP
.RS 4
SLANTR 
.PP
.nf
    SLANTR = ( max(abs(A(i,j))), NORM = 'M' or 'm'
             (
             ( norm1(A),         NORM = '1', 'O' or 'o'
             (
             ( normI(A),         NORM = 'I' or 'i'
             (
             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'

 where  norm1  denotes the  one norm of a matrix (maximum column sum),
 normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
 normF  denotes the  Frobenius norm of a matrix (square root of sum of
 squares)\&.  Note that  max(abs(A(i,j)))  is not a consistent matrix norm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fINORM\fP 
.PP
.nf
          NORM is CHARACTER*1
          Specifies the value to be returned in SLANTR as described
          above\&.
.fi
.PP
.br
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the matrix A is upper or lower trapezoidal\&.
          = 'U':  Upper trapezoidal
          = 'L':  Lower trapezoidal
          Note that A is triangular instead of trapezoidal if M = N\&.
.fi
.PP
.br
\fIDIAG\fP 
.PP
.nf
          DIAG is CHARACTER*1
          Specifies whether or not the matrix A has unit diagonal\&.
          = 'N':  Non-unit diagonal
          = 'U':  Unit diagonal
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix A\&.  M >= 0, and if
          UPLO = 'U', M <= N\&.  When M = 0, SLANTR is set to zero\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix A\&.  N >= 0, and if
          UPLO = 'L', N <= M\&.  When N = 0, SLANTR is set to zero\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          The trapezoidal matrix A (A is triangular if M = N)\&.
          If UPLO = 'U', the leading m by n upper trapezoidal part of
          the array A contains the upper trapezoidal matrix, and the
          strictly lower triangular part of A is not referenced\&.
          If UPLO = 'L', the leading m by n lower trapezoidal part of
          the array A contains the lower trapezoidal matrix, and the
          strictly upper triangular part of A is not referenced\&.  Note
          that when DIAG = 'U', the diagonal elements of A are not
          referenced and are assumed to be one\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= max(M,1)\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (MAX(1,LWORK)),
          where LWORK >= M when NORM = 'I'; otherwise, WORK is not
          referenced\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slanv2 (real A, real B, real C, real D, real RT1R, real RT1I, real RT2R, real RT2I, real CS, real SN)"

.PP
\fBSLANV2\fP computes the Schur factorization of a real 2-by-2 nonsymmetric matrix in standard form\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLANV2 computes the Schur factorization of a real 2-by-2 nonsymmetric
 matrix in standard form:

      [ A  B ] = [ CS -SN ] [ AA  BB ] [ CS  SN ]
      [ C  D ]   [ SN  CS ] [ CC  DD ] [-SN  CS ]

 where either
 1) CC = 0 so that AA and DD are real eigenvalues of the matrix, or
 2) AA = DD and BB*CC < 0, so that AA + or - sqrt(BB*CC) are complex
 conjugate eigenvalues\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIA\fP 
.PP
.nf
          A is REAL
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL
.fi
.PP
.br
\fID\fP 
.PP
.nf
          D is REAL
          On entry, the elements of the input matrix\&.
          On exit, they are overwritten by the elements of the
          standardised Schur form\&.
.fi
.PP
.br
\fIRT1R\fP 
.PP
.nf
          RT1R is REAL
.fi
.PP
.br
\fIRT1I\fP 
.PP
.nf
          RT1I is REAL
.fi
.PP
.br
\fIRT2R\fP 
.PP
.nf
          RT2R is REAL
.fi
.PP
.br
\fIRT2I\fP 
.PP
.nf
          RT2I is REAL
          The real and imaginary parts of the eigenvalues\&. If the
          eigenvalues are a complex conjugate pair, RT1I > 0\&.
.fi
.PP
.br
\fICS\fP 
.PP
.nf
          CS is REAL
.fi
.PP
.br
\fISN\fP 
.PP
.nf
          SN is REAL
          Parameters of the rotation matrix\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  Modified by V\&. Sima, Research Institute for Informatics, Bucharest,
  Romania, to reduce the risk of cancellation errors,
  when computing real eigenvalues, and to ensure, if possible, that
  abs(RT1R) >= abs(RT2R)\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine slapll (integer N, real, dimension( * ) X, integer INCX, real, dimension( * ) Y, integer INCY, real SSMIN)"

.PP
\fBSLAPLL\fP measures the linear dependence of two vectors\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 Given two column vectors X and Y, let

                      A = ( X Y )\&.

 The subroutine first computes the QR factorization of A = Q*R,
 and then computes the SVD of the 2-by-2 upper triangular matrix R\&.
 The smaller singular value of R is returned in SSMIN, which is used
 as the measurement of the linear dependency of the vectors X and Y\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The length of the vectors X and Y\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array,
                         dimension (1+(N-1)*INCX)
          On entry, X contains the N-vector X\&.
          On exit, X is overwritten\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between successive elements of X\&. INCX > 0\&.
.fi
.PP
.br
\fIY\fP 
.PP
.nf
          Y is REAL array,
                         dimension (1+(N-1)*INCY)
          On entry, Y contains the N-vector Y\&.
          On exit, Y is overwritten\&.
.fi
.PP
.br
\fIINCY\fP 
.PP
.nf
          INCY is INTEGER
          The increment between successive elements of Y\&. INCY > 0\&.
.fi
.PP
.br
\fISSMIN\fP 
.PP
.nf
          SSMIN is REAL
          The smallest singular value of the N-by-2 matrix A = ( X Y )\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slapmr (logical FORWRD, integer M, integer N, real, dimension( ldx, * ) X, integer LDX, integer, dimension( * ) K)"

.PP
\fBSLAPMR\fP rearranges rows of a matrix as specified by a permutation vector\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAPMR rearranges the rows of the M by N matrix X as specified
 by the permutation K(1),K(2),\&.\&.\&.,K(M) of the integers 1,\&.\&.\&.,M\&.
 If FORWRD = \&.TRUE\&.,  forward permutation:

      X(K(I),*) is moved X(I,*) for I = 1,2,\&.\&.\&.,M\&.

 If FORWRD = \&.FALSE\&., backward permutation:

      X(I,*) is moved to X(K(I),*) for I = 1,2,\&.\&.\&.,M\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIFORWRD\fP 
.PP
.nf
          FORWRD is LOGICAL
          = \&.TRUE\&., forward permutation
          = \&.FALSE\&., backward permutation
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix X\&. M >= 0\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix X\&. N >= 0\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (LDX,N)
          On entry, the M by N matrix X\&.
          On exit, X contains the permuted matrix X\&.
.fi
.PP
.br
\fILDX\fP 
.PP
.nf
          LDX is INTEGER
          The leading dimension of the array X, LDX >= MAX(1,M)\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER array, dimension (M)
          On entry, K contains the permutation vector\&. K is used as
          internal workspace, but reset to its original value on
          output\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slapmt (logical FORWRD, integer M, integer N, real, dimension( ldx, * ) X, integer LDX, integer, dimension( * ) K)"

.PP
\fBSLAPMT\fP performs a forward or backward permutation of the columns of a matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAPMT rearranges the columns of the M by N matrix X as specified
 by the permutation K(1),K(2),\&.\&.\&.,K(N) of the integers 1,\&.\&.\&.,N\&.
 If FORWRD = \&.TRUE\&.,  forward permutation:

      X(*,K(J)) is moved X(*,J) for J = 1,2,\&.\&.\&.,N\&.

 If FORWRD = \&.FALSE\&., backward permutation:

      X(*,J) is moved to X(*,K(J)) for J = 1,2,\&.\&.\&.,N\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIFORWRD\fP 
.PP
.nf
          FORWRD is LOGICAL
          = \&.TRUE\&., forward permutation
          = \&.FALSE\&., backward permutation
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix X\&. M >= 0\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix X\&. N >= 0\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (LDX,N)
          On entry, the M by N matrix X\&.
          On exit, X contains the permuted matrix X\&.
.fi
.PP
.br
\fILDX\fP 
.PP
.nf
          LDX is INTEGER
          The leading dimension of the array X, LDX >= MAX(1,M)\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER array, dimension (N)
          On entry, K contains the permutation vector\&. K is used as
          internal workspace, but reset to its original value on
          output\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slaqp2 (integer M, integer N, integer OFFSET, real, dimension( lda, * ) A, integer LDA, integer, dimension( * ) JPVT, real, dimension( * ) TAU, real, dimension( * ) VN1, real, dimension( * ) VN2, real, dimension( * ) WORK)"

.PP
\fBSLAQP2\fP computes a QR factorization with column pivoting of the matrix block\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAQP2 computes a QR factorization with column pivoting of
 the block A(OFFSET+1:M,1:N)\&.
 The block A(1:OFFSET,1:N) is accordingly pivoted, but not factorized\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix A\&. M >= 0\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix A\&. N >= 0\&.
.fi
.PP
.br
\fIOFFSET\fP 
.PP
.nf
          OFFSET is INTEGER
          The number of rows of the matrix A that must be pivoted
          but no factorized\&. OFFSET >= 0\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          On entry, the M-by-N matrix A\&.
          On exit, the upper triangle of block A(OFFSET+1:M,1:N) is
          the triangular factor obtained; the elements in block
          A(OFFSET+1:M,1:N) below the diagonal, together with the
          array TAU, represent the orthogonal matrix Q as a product of
          elementary reflectors\&. Block A(1:OFFSET,1:N) has been
          accordingly pivoted, but no factorized\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&. LDA >= max(1,M)\&.
.fi
.PP
.br
\fIJPVT\fP 
.PP
.nf
          JPVT is INTEGER array, dimension (N)
          On entry, if JPVT(i) \&.ne\&. 0, the i-th column of A is permuted
          to the front of A*P (a leading column); if JPVT(i) = 0,
          the i-th column of A is a free column\&.
          On exit, if JPVT(i) = k, then the i-th column of A*P
          was the k-th column of A\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL array, dimension (min(M,N))
          The scalar factors of the elementary reflectors\&.
.fi
.PP
.br
\fIVN1\fP 
.PP
.nf
          VN1 is REAL array, dimension (N)
          The vector with the partial column norms\&.
.fi
.PP
.br
\fIVN2\fP 
.PP
.nf
          VN2 is REAL array, dimension (N)
          The vector with the exact column norms\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (N)
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
G\&. Quintana-Orti, Depto\&. de Informatica, Universidad Jaime I, Spain X\&. Sun, Computer Science Dept\&., Duke University, USA 
.br
 Partial column norm updating strategy modified on April 2011 Z\&. Drmac and Z\&. Bujanovic, Dept\&. of Mathematics, University of Zagreb, Croatia\&. 
.RE
.PP
\fBReferences:\fP
.RS 4
LAPACK Working Note 176  
.RE
.PP

.SS "subroutine slaqps (integer M, integer N, integer OFFSET, integer NB, integer KB, real, dimension( lda, * ) A, integer LDA, integer, dimension( * ) JPVT, real, dimension( * ) TAU, real, dimension( * ) VN1, real, dimension( * ) VN2, real, dimension( * ) AUXV, real, dimension( ldf, * ) F, integer LDF)"

.PP
\fBSLAQPS\fP computes a step of QR factorization with column pivoting of a real m-by-n matrix A by using BLAS level 3\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAQPS computes a step of QR factorization with column pivoting
 of a real M-by-N matrix A by using Blas-3\&.  It tries to factorize
 NB columns from A starting from the row OFFSET+1, and updates all
 of the matrix with Blas-3 xGEMM\&.

 In some cases, due to catastrophic cancellations, it cannot
 factorize NB columns\&.  Hence, the actual number of factorized
 columns is returned in KB\&.

 Block A(1:OFFSET,1:N) is accordingly pivoted, but not factorized\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix A\&. M >= 0\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix A\&. N >= 0
.fi
.PP
.br
\fIOFFSET\fP 
.PP
.nf
          OFFSET is INTEGER
          The number of rows of A that have been factorized in
          previous steps\&.
.fi
.PP
.br
\fINB\fP 
.PP
.nf
          NB is INTEGER
          The number of columns to factorize\&.
.fi
.PP
.br
\fIKB\fP 
.PP
.nf
          KB is INTEGER
          The number of columns actually factorized\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          On entry, the M-by-N matrix A\&.
          On exit, block A(OFFSET+1:M,1:KB) is the triangular
          factor obtained and block A(1:OFFSET,1:N) has been
          accordingly pivoted, but no factorized\&.
          The rest of the matrix, block A(OFFSET+1:M,KB+1:N) has
          been updated\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&. LDA >= max(1,M)\&.
.fi
.PP
.br
\fIJPVT\fP 
.PP
.nf
          JPVT is INTEGER array, dimension (N)
          JPVT(I) = K <==> Column K of the full matrix A has been
          permuted into position I in AP\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL array, dimension (KB)
          The scalar factors of the elementary reflectors\&.
.fi
.PP
.br
\fIVN1\fP 
.PP
.nf
          VN1 is REAL array, dimension (N)
          The vector with the partial column norms\&.
.fi
.PP
.br
\fIVN2\fP 
.PP
.nf
          VN2 is REAL array, dimension (N)
          The vector with the exact column norms\&.
.fi
.PP
.br
\fIAUXV\fP 
.PP
.nf
          AUXV is REAL array, dimension (NB)
          Auxiliary vector\&.
.fi
.PP
.br
\fIF\fP 
.PP
.nf
          F is REAL array, dimension (LDF,NB)
          Matrix F**T = L*Y**T*A\&.
.fi
.PP
.br
\fILDF\fP 
.PP
.nf
          LDF is INTEGER
          The leading dimension of the array F\&. LDF >= max(1,N)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
G\&. Quintana-Orti, Depto\&. de Informatica, Universidad Jaime I, Spain X\&. Sun, Computer Science Dept\&., Duke University, USA
.RE
.PP

.br
 Partial column norm updating strategy modified on April 2011 Z\&. Drmac and Z\&. Bujanovic, Dept\&. of Mathematics, University of Zagreb, Croatia\&. 
.PP
\fBReferences:\fP
.RS 4
LAPACK Working Note 176  
.RE
.PP

.SS "subroutine slaqr0 (logical WANTT, logical WANTZ, integer N, integer ILO, integer IHI, real, dimension( ldh, * ) H, integer LDH, real, dimension( * ) WR, real, dimension( * ) WI, integer ILOZ, integer IHIZ, real, dimension( ldz, * ) Z, integer LDZ, real, dimension( * ) WORK, integer LWORK, integer INFO)"

.PP
\fBSLAQR0\fP computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
    SLAQR0 computes the eigenvalues of a Hessenberg matrix H
    and, optionally, the matrices T and Z from the Schur decomposition
    H = Z T Z**T, where T is an upper quasi-triangular matrix (the
    Schur form), and Z is the orthogonal matrix of Schur vectors\&.

    Optionally Z may be postmultiplied into an input orthogonal
    matrix Q so that this routine can give the Schur factorization
    of a matrix A which has been reduced to the Hessenberg form H
    by the orthogonal matrix Q:  A = Q*H*Q**T = (QZ)*T*(QZ)**T\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIWANTT\fP 
.PP
.nf
          WANTT is LOGICAL
          = \&.TRUE\&. : the full Schur form T is required;
          = \&.FALSE\&.: only eigenvalues are required\&.
.fi
.PP
.br
\fIWANTZ\fP 
.PP
.nf
          WANTZ is LOGICAL
          = \&.TRUE\&. : the matrix of Schur vectors Z is required;
          = \&.FALSE\&.: Schur vectors are not required\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
           The order of the matrix H\&.  N >= 0\&.
.fi
.PP
.br
\fIILO\fP 
.PP
.nf
          ILO is INTEGER
.fi
.PP
.br
\fIIHI\fP 
.PP
.nf
          IHI is INTEGER
           It is assumed that H is already upper triangular in rows
           and columns 1:ILO-1 and IHI+1:N and, if ILO > 1,
           H(ILO,ILO-1) is zero\&. ILO and IHI are normally set by a
           previous call to SGEBAL, and then passed to SGEHRD when the
           matrix output by SGEBAL is reduced to Hessenberg form\&.
           Otherwise, ILO and IHI should be set to 1 and N,
           respectively\&.  If N > 0, then 1 <= ILO <= IHI <= N\&.
           If N = 0, then ILO = 1 and IHI = 0\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
           On entry, the upper Hessenberg matrix H\&.
           On exit, if INFO = 0 and WANTT is \&.TRUE\&., then H contains
           the upper quasi-triangular matrix T from the Schur
           decomposition (the Schur form); 2-by-2 diagonal blocks
           (corresponding to complex conjugate pairs of eigenvalues)
           are returned in standard form, with H(i,i) = H(i+1,i+1)
           and H(i+1,i)*H(i,i+1) < 0\&. If INFO = 0 and WANTT is
           \&.FALSE\&., then the contents of H are unspecified on exit\&.
           (The output value of H when INFO > 0 is given under the
           description of INFO below\&.)

           This subroutine may explicitly set H(i,j) = 0 for i > j and
           j = 1, 2, \&.\&.\&. ILO-1 or j = IHI+1, IHI+2, \&.\&.\&. N\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
           The leading dimension of the array H\&. LDH >= max(1,N)\&.
.fi
.PP
.br
\fIWR\fP 
.PP
.nf
          WR is REAL array, dimension (IHI)
.fi
.PP
.br
\fIWI\fP 
.PP
.nf
          WI is REAL array, dimension (IHI)
           The real and imaginary parts, respectively, of the computed
           eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI)
           and WI(ILO:IHI)\&. If two eigenvalues are computed as a
           complex conjugate pair, they are stored in consecutive
           elements of WR and WI, say the i-th and (i+1)th, with
           WI(i) > 0 and WI(i+1) < 0\&. If WANTT is \&.TRUE\&., then
           the eigenvalues are stored in the same order as on the
           diagonal of the Schur form returned in H, with
           WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 diagonal
           block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and
           WI(i+1) = -WI(i)\&.
.fi
.PP
.br
\fIILOZ\fP 
.PP
.nf
          ILOZ is INTEGER
.fi
.PP
.br
\fIIHIZ\fP 
.PP
.nf
          IHIZ is INTEGER
           Specify the rows of Z to which transformations must be
           applied if WANTZ is \&.TRUE\&.\&.
           1 <= ILOZ <= ILO; IHI <= IHIZ <= N\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ,IHI)
           If WANTZ is \&.FALSE\&., then Z is not referenced\&.
           If WANTZ is \&.TRUE\&., then Z(ILO:IHI,ILOZ:IHIZ) is
           replaced by Z(ILO:IHI,ILOZ:IHIZ)*U where U is the
           orthogonal Schur factor of H(ILO:IHI,ILO:IHI)\&.
           (The output value of Z when INFO > 0 is given under
           the description of INFO below\&.)
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
           The leading dimension of the array Z\&.  if WANTZ is \&.TRUE\&.
           then LDZ >= MAX(1,IHIZ)\&.  Otherwise, LDZ >= 1\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension LWORK
           On exit, if LWORK = -1, WORK(1) returns an estimate of
           the optimal value for LWORK\&.
.fi
.PP
.br
\fILWORK\fP 
.PP
.nf
          LWORK is INTEGER
           The dimension of the array WORK\&.  LWORK >= max(1,N)
           is sufficient, but LWORK typically as large as 6*N may
           be required for optimal performance\&.  A workspace query
           to determine the optimal workspace size is recommended\&.

           If LWORK = -1, then SLAQR0 does a workspace query\&.
           In this case, SLAQR0 checks the input parameters and
           estimates the optimal workspace size for the given
           values of N, ILO and IHI\&.  The estimate is returned
           in WORK(1)\&.  No error message related to LWORK is
           issued by XERBLA\&.  Neither H nor Z are accessed\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
             = 0:  successful exit
             > 0:  if INFO = i, SLAQR0 failed to compute all of
                the eigenvalues\&.  Elements 1:ilo-1 and i+1:n of WR
                and WI contain those eigenvalues which have been
                successfully computed\&.  (Failures are rare\&.)

                If INFO > 0 and WANT is \&.FALSE\&., then on exit,
                the remaining unconverged eigenvalues are the eigen-
                values of the upper Hessenberg matrix rows and
                columns ILO through INFO of the final, output
                value of H\&.

                If INFO > 0 and WANTT is \&.TRUE\&., then on exit

           (*)  (initial value of H)*U  = U*(final value of H)

                where U is an orthogonal matrix\&.  The final
                value of H is upper Hessenberg and quasi-triangular
                in rows and columns INFO+1 through IHI\&.

                If INFO > 0 and WANTZ is \&.TRUE\&., then on exit

                  (final value of Z(ILO:IHI,ILOZ:IHIZ)
                   =  (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U

                where U is the orthogonal matrix in (*) (regard-
                less of the value of WANTT\&.)

                If INFO > 0 and WANTZ is \&.FALSE\&., then Z is not
                accessed\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA 
.RE
.PP
\fBReferences:\fP
.RS 4

.PP
.nf
  K\&. Braman, R\&. Byers and R\&. Mathias, The Multi-Shift QR
  Algorithm Part I: Maintaining Well Focused Shifts, and Level 3
  Performance, SIAM Journal of Matrix Analysis, volume 23, pages
  929--947, 2002\&.

.fi
.PP
 
.br
 K\&. Braman, R\&. Byers and R\&. Mathias, The Multi-Shift QR Algorithm Part II: Aggressive Early Deflation, SIAM Journal of Matrix Analysis, volume 23, pages 948--973, 2002\&. 
.RE
.PP

.SS "subroutine slaqr1 (integer N, real, dimension( ldh, * ) H, integer LDH, real SR1, real SI1, real SR2, real SI2, real, dimension( * ) V)"

.PP
\fBSLAQR1\fP sets a scalar multiple of the first column of the product of 2-by-2 or 3-by-3 matrix H and specified shifts\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
      Given a 2-by-2 or 3-by-3 matrix H, SLAQR1 sets v to a
      scalar multiple of the first column of the product

      (*)  K = (H - (sr1 + i*si1)*I)*(H - (sr2 + i*si2)*I)

      scaling to avoid overflows and most underflows\&. It
      is assumed that either

              1) sr1 = sr2 and si1 = -si2
          or
              2) si1 = si2 = 0\&.

      This is useful for starting double implicit shift bulges
      in the QR algorithm\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
              Order of the matrix H\&. N must be either 2 or 3\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
              The 2-by-2 or 3-by-3 matrix H in (*)\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
              The leading dimension of H as declared in
              the calling procedure\&.  LDH >= N
.fi
.PP
.br
\fISR1\fP 
.PP
.nf
          SR1 is REAL
.fi
.PP
.br
\fISI1\fP 
.PP
.nf
          SI1 is REAL
.fi
.PP
.br
\fISR2\fP 
.PP
.nf
          SR2 is REAL
.fi
.PP
.br
\fISI2\fP 
.PP
.nf
          SI2 is REAL
              The shifts in (*)\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension (N)
              A scalar multiple of the first column of the
              matrix K in (*)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA 
.RE
.PP

.SS "subroutine slaqr2 (logical WANTT, logical WANTZ, integer N, integer KTOP, integer KBOT, integer NW, real, dimension( ldh, * ) H, integer LDH, integer ILOZ, integer IHIZ, real, dimension( ldz, * ) Z, integer LDZ, integer NS, integer ND, real, dimension( * ) SR, real, dimension( * ) SI, real, dimension( ldv, * ) V, integer LDV, integer NH, real, dimension( ldt, * ) T, integer LDT, integer NV, real, dimension( ldwv, * ) WV, integer LDWV, real, dimension( * ) WORK, integer LWORK)"

.PP
\fBSLAQR2\fP performs the orthogonal similarity transformation of a Hessenberg matrix to detect and deflate fully converged eigenvalues from a trailing principal submatrix (aggressive early deflation)\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
    SLAQR2 is identical to SLAQR3 except that it avoids
    recursion by calling SLAHQR instead of SLAQR4\&.

    Aggressive early deflation:

    This subroutine accepts as input an upper Hessenberg matrix
    H and performs an orthogonal similarity transformation
    designed to detect and deflate fully converged eigenvalues from
    a trailing principal submatrix\&.  On output H has been over-
    written by a new Hessenberg matrix that is a perturbation of
    an orthogonal similarity transformation of H\&.  It is to be
    hoped that the final version of H has many zero subdiagonal
    entries\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIWANTT\fP 
.PP
.nf
          WANTT is LOGICAL
          If \&.TRUE\&., then the Hessenberg matrix H is fully updated
          so that the quasi-triangular Schur factor may be
          computed (in cooperation with the calling subroutine)\&.
          If \&.FALSE\&., then only enough of H is updated to preserve
          the eigenvalues\&.
.fi
.PP
.br
\fIWANTZ\fP 
.PP
.nf
          WANTZ is LOGICAL
          If \&.TRUE\&., then the orthogonal matrix Z is updated so
          so that the orthogonal Schur factor may be computed
          (in cooperation with the calling subroutine)\&.
          If \&.FALSE\&., then Z is not referenced\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix H and (if WANTZ is \&.TRUE\&.) the
          order of the orthogonal matrix Z\&.
.fi
.PP
.br
\fIKTOP\fP 
.PP
.nf
          KTOP is INTEGER
          It is assumed that either KTOP = 1 or H(KTOP,KTOP-1)=0\&.
          KBOT and KTOP together determine an isolated block
          along the diagonal of the Hessenberg matrix\&.
.fi
.PP
.br
\fIKBOT\fP 
.PP
.nf
          KBOT is INTEGER
          It is assumed without a check that either
          KBOT = N or H(KBOT+1,KBOT)=0\&.  KBOT and KTOP together
          determine an isolated block along the diagonal of the
          Hessenberg matrix\&.
.fi
.PP
.br
\fINW\fP 
.PP
.nf
          NW is INTEGER
          Deflation window size\&.  1 <= NW <= (KBOT-KTOP+1)\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
          On input the initial N-by-N section of H stores the
          Hessenberg matrix undergoing aggressive early deflation\&.
          On output H has been transformed by an orthogonal
          similarity transformation, perturbed, and the returned
          to Hessenberg form that (it is to be hoped) has some
          zero subdiagonal entries\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
          Leading dimension of H just as declared in the calling
          subroutine\&.  N <= LDH
.fi
.PP
.br
\fIILOZ\fP 
.PP
.nf
          ILOZ is INTEGER
.fi
.PP
.br
\fIIHIZ\fP 
.PP
.nf
          IHIZ is INTEGER
          Specify the rows of Z to which transformations must be
          applied if WANTZ is \&.TRUE\&.\&. 1 <= ILOZ <= IHIZ <= N\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ,N)
          IF WANTZ is \&.TRUE\&., then on output, the orthogonal
          similarity transformation mentioned above has been
          accumulated into Z(ILOZ:IHIZ,ILOZ:IHIZ) from the right\&.
          If WANTZ is \&.FALSE\&., then Z is unreferenced\&.
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
          The leading dimension of Z just as declared in the
          calling subroutine\&.  1 <= LDZ\&.
.fi
.PP
.br
\fINS\fP 
.PP
.nf
          NS is INTEGER
          The number of unconverged (ie approximate) eigenvalues
          returned in SR and SI that may be used as shifts by the
          calling subroutine\&.
.fi
.PP
.br
\fIND\fP 
.PP
.nf
          ND is INTEGER
          The number of converged eigenvalues uncovered by this
          subroutine\&.
.fi
.PP
.br
\fISR\fP 
.PP
.nf
          SR is REAL array, dimension (KBOT)
.fi
.PP
.br
\fISI\fP 
.PP
.nf
          SI is REAL array, dimension (KBOT)
          On output, the real and imaginary parts of approximate
          eigenvalues that may be used for shifts are stored in
          SR(KBOT-ND-NS+1) through SR(KBOT-ND) and
          SI(KBOT-ND-NS+1) through SI(KBOT-ND), respectively\&.
          The real and imaginary parts of converged eigenvalues
          are stored in SR(KBOT-ND+1) through SR(KBOT) and
          SI(KBOT-ND+1) through SI(KBOT), respectively\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension (LDV,NW)
          An NW-by-NW work array\&.
.fi
.PP
.br
\fILDV\fP 
.PP
.nf
          LDV is INTEGER
          The leading dimension of V just as declared in the
          calling subroutine\&.  NW <= LDV
.fi
.PP
.br
\fINH\fP 
.PP
.nf
          NH is INTEGER
          The number of columns of T\&.  NH >= NW\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,NW)
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of T just as declared in the
          calling subroutine\&.  NW <= LDT
.fi
.PP
.br
\fINV\fP 
.PP
.nf
          NV is INTEGER
          The number of rows of work array WV available for
          workspace\&.  NV >= NW\&.
.fi
.PP
.br
\fIWV\fP 
.PP
.nf
          WV is REAL array, dimension (LDWV,NW)
.fi
.PP
.br
\fILDWV\fP 
.PP
.nf
          LDWV is INTEGER
          The leading dimension of W just as declared in the
          calling subroutine\&.  NW <= LDV
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (LWORK)
          On exit, WORK(1) is set to an estimate of the optimal value
          of LWORK for the given values of N, NW, KTOP and KBOT\&.
.fi
.PP
.br
\fILWORK\fP 
.PP
.nf
          LWORK is INTEGER
          The dimension of the work array WORK\&.  LWORK = 2*NW
          suffices, but greater efficiency may result from larger
          values of LWORK\&.

          If LWORK = -1, then a workspace query is assumed; SLAQR2
          only estimates the optimal workspace size for the given
          values of N, NW, KTOP and KBOT\&.  The estimate is returned
          in WORK(1)\&.  No error message related to LWORK is issued
          by XERBLA\&.  Neither H nor Z are accessed\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA 
.RE
.PP

.SS "subroutine slaqr3 (logical WANTT, logical WANTZ, integer N, integer KTOP, integer KBOT, integer NW, real, dimension( ldh, * ) H, integer LDH, integer ILOZ, integer IHIZ, real, dimension( ldz, * ) Z, integer LDZ, integer NS, integer ND, real, dimension( * ) SR, real, dimension( * ) SI, real, dimension( ldv, * ) V, integer LDV, integer NH, real, dimension( ldt, * ) T, integer LDT, integer NV, real, dimension( ldwv, * ) WV, integer LDWV, real, dimension( * ) WORK, integer LWORK)"

.PP
\fBSLAQR3\fP performs the orthogonal similarity transformation of a Hessenberg matrix to detect and deflate fully converged eigenvalues from a trailing principal submatrix (aggressive early deflation)\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
    Aggressive early deflation:

    SLAQR3 accepts as input an upper Hessenberg matrix
    H and performs an orthogonal similarity transformation
    designed to detect and deflate fully converged eigenvalues from
    a trailing principal submatrix\&.  On output H has been over-
    written by a new Hessenberg matrix that is a perturbation of
    an orthogonal similarity transformation of H\&.  It is to be
    hoped that the final version of H has many zero subdiagonal
    entries\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIWANTT\fP 
.PP
.nf
          WANTT is LOGICAL
          If \&.TRUE\&., then the Hessenberg matrix H is fully updated
          so that the quasi-triangular Schur factor may be
          computed (in cooperation with the calling subroutine)\&.
          If \&.FALSE\&., then only enough of H is updated to preserve
          the eigenvalues\&.
.fi
.PP
.br
\fIWANTZ\fP 
.PP
.nf
          WANTZ is LOGICAL
          If \&.TRUE\&., then the orthogonal matrix Z is updated so
          so that the orthogonal Schur factor may be computed
          (in cooperation with the calling subroutine)\&.
          If \&.FALSE\&., then Z is not referenced\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix H and (if WANTZ is \&.TRUE\&.) the
          order of the orthogonal matrix Z\&.
.fi
.PP
.br
\fIKTOP\fP 
.PP
.nf
          KTOP is INTEGER
          It is assumed that either KTOP = 1 or H(KTOP,KTOP-1)=0\&.
          KBOT and KTOP together determine an isolated block
          along the diagonal of the Hessenberg matrix\&.
.fi
.PP
.br
\fIKBOT\fP 
.PP
.nf
          KBOT is INTEGER
          It is assumed without a check that either
          KBOT = N or H(KBOT+1,KBOT)=0\&.  KBOT and KTOP together
          determine an isolated block along the diagonal of the
          Hessenberg matrix\&.
.fi
.PP
.br
\fINW\fP 
.PP
.nf
          NW is INTEGER
          Deflation window size\&.  1 <= NW <= (KBOT-KTOP+1)\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
          On input the initial N-by-N section of H stores the
          Hessenberg matrix undergoing aggressive early deflation\&.
          On output H has been transformed by an orthogonal
          similarity transformation, perturbed, and the returned
          to Hessenberg form that (it is to be hoped) has some
          zero subdiagonal entries\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
          Leading dimension of H just as declared in the calling
          subroutine\&.  N <= LDH
.fi
.PP
.br
\fIILOZ\fP 
.PP
.nf
          ILOZ is INTEGER
.fi
.PP
.br
\fIIHIZ\fP 
.PP
.nf
          IHIZ is INTEGER
          Specify the rows of Z to which transformations must be
          applied if WANTZ is \&.TRUE\&.\&. 1 <= ILOZ <= IHIZ <= N\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ,N)
          IF WANTZ is \&.TRUE\&., then on output, the orthogonal
          similarity transformation mentioned above has been
          accumulated into Z(ILOZ:IHIZ,ILOZ:IHIZ) from the right\&.
          If WANTZ is \&.FALSE\&., then Z is unreferenced\&.
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
          The leading dimension of Z just as declared in the
          calling subroutine\&.  1 <= LDZ\&.
.fi
.PP
.br
\fINS\fP 
.PP
.nf
          NS is INTEGER
          The number of unconverged (ie approximate) eigenvalues
          returned in SR and SI that may be used as shifts by the
          calling subroutine\&.
.fi
.PP
.br
\fIND\fP 
.PP
.nf
          ND is INTEGER
          The number of converged eigenvalues uncovered by this
          subroutine\&.
.fi
.PP
.br
\fISR\fP 
.PP
.nf
          SR is REAL array, dimension (KBOT)
.fi
.PP
.br
\fISI\fP 
.PP
.nf
          SI is REAL array, dimension (KBOT)
          On output, the real and imaginary parts of approximate
          eigenvalues that may be used for shifts are stored in
          SR(KBOT-ND-NS+1) through SR(KBOT-ND) and
          SI(KBOT-ND-NS+1) through SI(KBOT-ND), respectively\&.
          The real and imaginary parts of converged eigenvalues
          are stored in SR(KBOT-ND+1) through SR(KBOT) and
          SI(KBOT-ND+1) through SI(KBOT), respectively\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension (LDV,NW)
          An NW-by-NW work array\&.
.fi
.PP
.br
\fILDV\fP 
.PP
.nf
          LDV is INTEGER
          The leading dimension of V just as declared in the
          calling subroutine\&.  NW <= LDV
.fi
.PP
.br
\fINH\fP 
.PP
.nf
          NH is INTEGER
          The number of columns of T\&.  NH >= NW\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,NW)
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of T just as declared in the
          calling subroutine\&.  NW <= LDT
.fi
.PP
.br
\fINV\fP 
.PP
.nf
          NV is INTEGER
          The number of rows of work array WV available for
          workspace\&.  NV >= NW\&.
.fi
.PP
.br
\fIWV\fP 
.PP
.nf
          WV is REAL array, dimension (LDWV,NW)
.fi
.PP
.br
\fILDWV\fP 
.PP
.nf
          LDWV is INTEGER
          The leading dimension of W just as declared in the
          calling subroutine\&.  NW <= LDV
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (LWORK)
          On exit, WORK(1) is set to an estimate of the optimal value
          of LWORK for the given values of N, NW, KTOP and KBOT\&.
.fi
.PP
.br
\fILWORK\fP 
.PP
.nf
          LWORK is INTEGER
          The dimension of the work array WORK\&.  LWORK = 2*NW
          suffices, but greater efficiency may result from larger
          values of LWORK\&.

          If LWORK = -1, then a workspace query is assumed; SLAQR3
          only estimates the optimal workspace size for the given
          values of N, NW, KTOP and KBOT\&.  The estimate is returned
          in WORK(1)\&.  No error message related to LWORK is issued
          by XERBLA\&.  Neither H nor Z are accessed\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA 
.RE
.PP

.SS "subroutine slaqr4 (logical WANTT, logical WANTZ, integer N, integer ILO, integer IHI, real, dimension( ldh, * ) H, integer LDH, real, dimension( * ) WR, real, dimension( * ) WI, integer ILOZ, integer IHIZ, real, dimension( ldz, * ) Z, integer LDZ, real, dimension( * ) WORK, integer LWORK, integer INFO)"

.PP
\fBSLAQR4\fP computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
    SLAQR4 implements one level of recursion for SLAQR0\&.
    It is a complete implementation of the small bulge multi-shift
    QR algorithm\&.  It may be called by SLAQR0 and, for large enough
    deflation window size, it may be called by SLAQR3\&.  This
    subroutine is identical to SLAQR0 except that it calls SLAQR2
    instead of SLAQR3\&.

    SLAQR4 computes the eigenvalues of a Hessenberg matrix H
    and, optionally, the matrices T and Z from the Schur decomposition
    H = Z T Z**T, where T is an upper quasi-triangular matrix (the
    Schur form), and Z is the orthogonal matrix of Schur vectors\&.

    Optionally Z may be postmultiplied into an input orthogonal
    matrix Q so that this routine can give the Schur factorization
    of a matrix A which has been reduced to the Hessenberg form H
    by the orthogonal matrix Q:  A = Q*H*Q**T = (QZ)*T*(QZ)**T\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIWANTT\fP 
.PP
.nf
          WANTT is LOGICAL
          = \&.TRUE\&. : the full Schur form T is required;
          = \&.FALSE\&.: only eigenvalues are required\&.
.fi
.PP
.br
\fIWANTZ\fP 
.PP
.nf
          WANTZ is LOGICAL
          = \&.TRUE\&. : the matrix of Schur vectors Z is required;
          = \&.FALSE\&.: Schur vectors are not required\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
           The order of the matrix H\&.  N >= 0\&.
.fi
.PP
.br
\fIILO\fP 
.PP
.nf
          ILO is INTEGER
.fi
.PP
.br
\fIIHI\fP 
.PP
.nf
          IHI is INTEGER
           It is assumed that H is already upper triangular in rows
           and columns 1:ILO-1 and IHI+1:N and, if ILO > 1,
           H(ILO,ILO-1) is zero\&. ILO and IHI are normally set by a
           previous call to SGEBAL, and then passed to SGEHRD when the
           matrix output by SGEBAL is reduced to Hessenberg form\&.
           Otherwise, ILO and IHI should be set to 1 and N,
           respectively\&.  If N > 0, then 1 <= ILO <= IHI <= N\&.
           If N = 0, then ILO = 1 and IHI = 0\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
           On entry, the upper Hessenberg matrix H\&.
           On exit, if INFO = 0 and WANTT is \&.TRUE\&., then H contains
           the upper quasi-triangular matrix T from the Schur
           decomposition (the Schur form); 2-by-2 diagonal blocks
           (corresponding to complex conjugate pairs of eigenvalues)
           are returned in standard form, with H(i,i) = H(i+1,i+1)
           and H(i+1,i)*H(i,i+1) < 0\&. If INFO = 0 and WANTT is
           \&.FALSE\&., then the contents of H are unspecified on exit\&.
           (The output value of H when INFO > 0 is given under the
           description of INFO below\&.)

           This subroutine may explicitly set H(i,j) = 0 for i > j and
           j = 1, 2, \&.\&.\&. ILO-1 or j = IHI+1, IHI+2, \&.\&.\&. N\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
           The leading dimension of the array H\&. LDH >= max(1,N)\&.
.fi
.PP
.br
\fIWR\fP 
.PP
.nf
          WR is REAL array, dimension (IHI)
.fi
.PP
.br
\fIWI\fP 
.PP
.nf
          WI is REAL array, dimension (IHI)
           The real and imaginary parts, respectively, of the computed
           eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI)
           and WI(ILO:IHI)\&. If two eigenvalues are computed as a
           complex conjugate pair, they are stored in consecutive
           elements of WR and WI, say the i-th and (i+1)th, with
           WI(i) > 0 and WI(i+1) < 0\&. If WANTT is \&.TRUE\&., then
           the eigenvalues are stored in the same order as on the
           diagonal of the Schur form returned in H, with
           WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 diagonal
           block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and
           WI(i+1) = -WI(i)\&.
.fi
.PP
.br
\fIILOZ\fP 
.PP
.nf
          ILOZ is INTEGER
.fi
.PP
.br
\fIIHIZ\fP 
.PP
.nf
          IHIZ is INTEGER
           Specify the rows of Z to which transformations must be
           applied if WANTZ is \&.TRUE\&.\&.
           1 <= ILOZ <= ILO; IHI <= IHIZ <= N\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ,IHI)
           If WANTZ is \&.FALSE\&., then Z is not referenced\&.
           If WANTZ is \&.TRUE\&., then Z(ILO:IHI,ILOZ:IHIZ) is
           replaced by Z(ILO:IHI,ILOZ:IHIZ)*U where U is the
           orthogonal Schur factor of H(ILO:IHI,ILO:IHI)\&.
           (The output value of Z when INFO > 0 is given under
           the description of INFO below\&.)
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
           The leading dimension of the array Z\&.  if WANTZ is \&.TRUE\&.
           then LDZ >= MAX(1,IHIZ)\&.  Otherwise, LDZ >= 1\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension LWORK
           On exit, if LWORK = -1, WORK(1) returns an estimate of
           the optimal value for LWORK\&.
.fi
.PP
.br
\fILWORK\fP 
.PP
.nf
          LWORK is INTEGER
           The dimension of the array WORK\&.  LWORK >= max(1,N)
           is sufficient, but LWORK typically as large as 6*N may
           be required for optimal performance\&.  A workspace query
           to determine the optimal workspace size is recommended\&.

           If LWORK = -1, then SLAQR4 does a workspace query\&.
           In this case, SLAQR4 checks the input parameters and
           estimates the optimal workspace size for the given
           values of N, ILO and IHI\&.  The estimate is returned
           in WORK(1)\&.  No error message related to LWORK is
           issued by XERBLA\&.  Neither H nor Z are accessed\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
 \\verbatim
          INFO is INTEGER
             = 0:  successful exit
             > 0:  if INFO = i, SLAQR4 failed to compute all of
                the eigenvalues\&.  Elements 1:ilo-1 and i+1:n of WR
                and WI contain those eigenvalues which have been
                successfully computed\&.  (Failures are rare\&.)

                If INFO > 0 and WANT is \&.FALSE\&., then on exit,
                the remaining unconverged eigenvalues are the eigen-
                values of the upper Hessenberg matrix rows and
                columns ILO through INFO of the final, output
                value of H\&.

                If INFO > 0 and WANTT is \&.TRUE\&., then on exit

           (*)  (initial value of H)*U  = U*(final value of H)

                where U is a orthogonal matrix\&.  The final
                value of  H is upper Hessenberg and triangular in
                rows and columns INFO+1 through IHI\&.

                If INFO > 0 and WANTZ is \&.TRUE\&., then on exit

                  (final value of Z(ILO:IHI,ILOZ:IHIZ)
                   =  (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U

                where U is the orthogonal matrix in (*) (regard-
                less of the value of WANTT\&.)

                If INFO > 0 and WANTZ is \&.FALSE\&., then Z is not
                accessed\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA 
.RE
.PP
\fBReferences:\fP
.RS 4

.PP
.nf
  K\&. Braman, R\&. Byers and R\&. Mathias, The Multi-Shift QR
  Algorithm Part I: Maintaining Well Focused Shifts, and Level 3
  Performance, SIAM Journal of Matrix Analysis, volume 23, pages
  929--947, 2002\&.

.fi
.PP
 
.br
 K\&. Braman, R\&. Byers and R\&. Mathias, The Multi-Shift QR Algorithm Part II: Aggressive Early Deflation, SIAM Journal of Matrix Analysis, volume 23, pages 948--973, 2002\&. 
.RE
.PP

.SS "subroutine slaqr5 (logical WANTT, logical WANTZ, integer KACC22, integer N, integer KTOP, integer KBOT, integer NSHFTS, real, dimension( * ) SR, real, dimension( * ) SI, real, dimension( ldh, * ) H, integer LDH, integer ILOZ, integer IHIZ, real, dimension( ldz, * ) Z, integer LDZ, real, dimension( ldv, * ) V, integer LDV, real, dimension( ldu, * ) U, integer LDU, integer NV, real, dimension( ldwv, * ) WV, integer LDWV, integer NH, real, dimension( ldwh, * ) WH, integer LDWH)"

.PP
\fBSLAQR5\fP performs a single small-bulge multi-shift QR sweep\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
    SLAQR5, called by SLAQR0, performs a
    single small-bulge multi-shift QR sweep\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIWANTT\fP 
.PP
.nf
          WANTT is LOGICAL
             WANTT = \&.true\&. if the quasi-triangular Schur factor
             is being computed\&.  WANTT is set to \&.false\&. otherwise\&.
.fi
.PP
.br
\fIWANTZ\fP 
.PP
.nf
          WANTZ is LOGICAL
             WANTZ = \&.true\&. if the orthogonal Schur factor is being
             computed\&.  WANTZ is set to \&.false\&. otherwise\&.
.fi
.PP
.br
\fIKACC22\fP 
.PP
.nf
          KACC22 is INTEGER with value 0, 1, or 2\&.
             Specifies the computation mode of far-from-diagonal
             orthogonal updates\&.
        = 0: SLAQR5 does not accumulate reflections and does not
             use matrix-matrix multiply to update far-from-diagonal
             matrix entries\&.
        = 1: SLAQR5 accumulates reflections and uses matrix-matrix
             multiply to update the far-from-diagonal matrix entries\&.
        = 2: Same as KACC22 = 1\&. This option used to enable exploiting
             the 2-by-2 structure during matrix multiplications, but
             this is no longer supported\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
             N is the order of the Hessenberg matrix H upon which this
             subroutine operates\&.
.fi
.PP
.br
\fIKTOP\fP 
.PP
.nf
          KTOP is INTEGER
.fi
.PP
.br
\fIKBOT\fP 
.PP
.nf
          KBOT is INTEGER
             These are the first and last rows and columns of an
             isolated diagonal block upon which the QR sweep is to be
             applied\&. It is assumed without a check that
                       either KTOP = 1  or   H(KTOP,KTOP-1) = 0
             and
                       either KBOT = N  or   H(KBOT+1,KBOT) = 0\&.
.fi
.PP
.br
\fINSHFTS\fP 
.PP
.nf
          NSHFTS is INTEGER
             NSHFTS gives the number of simultaneous shifts\&.  NSHFTS
             must be positive and even\&.
.fi
.PP
.br
\fISR\fP 
.PP
.nf
          SR is REAL array, dimension (NSHFTS)
.fi
.PP
.br
\fISI\fP 
.PP
.nf
          SI is REAL array, dimension (NSHFTS)
             SR contains the real parts and SI contains the imaginary
             parts of the NSHFTS shifts of origin that define the
             multi-shift QR sweep\&.  On output SR and SI may be
             reordered\&.
.fi
.PP
.br
\fIH\fP 
.PP
.nf
          H is REAL array, dimension (LDH,N)
             On input H contains a Hessenberg matrix\&.  On output a
             multi-shift QR sweep with shifts SR(J)+i*SI(J) is applied
             to the isolated diagonal block in rows and columns KTOP
             through KBOT\&.
.fi
.PP
.br
\fILDH\fP 
.PP
.nf
          LDH is INTEGER
             LDH is the leading dimension of H just as declared in the
             calling procedure\&.  LDH >= MAX(1,N)\&.
.fi
.PP
.br
\fIILOZ\fP 
.PP
.nf
          ILOZ is INTEGER
.fi
.PP
.br
\fIIHIZ\fP 
.PP
.nf
          IHIZ is INTEGER
             Specify the rows of Z to which transformations must be
             applied if WANTZ is \&.TRUE\&.\&. 1 <= ILOZ <= IHIZ <= N
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ,IHIZ)
             If WANTZ = \&.TRUE\&., then the QR Sweep orthogonal
             similarity transformation is accumulated into
             Z(ILOZ:IHIZ,ILOZ:IHIZ) from the right\&.
             If WANTZ = \&.FALSE\&., then Z is unreferenced\&.
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
             LDA is the leading dimension of Z just as declared in
             the calling procedure\&. LDZ >= N\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension (LDV,NSHFTS/2)
.fi
.PP
.br
\fILDV\fP 
.PP
.nf
          LDV is INTEGER
             LDV is the leading dimension of V as declared in the
             calling procedure\&.  LDV >= 3\&.
.fi
.PP
.br
\fIU\fP 
.PP
.nf
          U is REAL array, dimension (LDU,2*NSHFTS)
.fi
.PP
.br
\fILDU\fP 
.PP
.nf
          LDU is INTEGER
             LDU is the leading dimension of U just as declared in the
             in the calling subroutine\&.  LDU >= 2*NSHFTS\&.
.fi
.PP
.br
\fINV\fP 
.PP
.nf
          NV is INTEGER
             NV is the number of rows in WV agailable for workspace\&.
             NV >= 1\&.
.fi
.PP
.br
\fIWV\fP 
.PP
.nf
          WV is REAL array, dimension (LDWV,2*NSHFTS)
.fi
.PP
.br
\fILDWV\fP 
.PP
.nf
          LDWV is INTEGER
             LDWV is the leading dimension of WV as declared in the
             in the calling subroutine\&.  LDWV >= NV\&.
.fi
.PP
 
.br
\fINH\fP 
.PP
.nf
          NH is INTEGER
             NH is the number of columns in array WH available for
             workspace\&. NH >= 1\&.
.fi
.PP
.br
\fIWH\fP 
.PP
.nf
          WH is REAL array, dimension (LDWH,NH)
.fi
.PP
.br
\fILDWH\fP 
.PP
.nf
          LDWH is INTEGER
             Leading dimension of WH just as declared in the
             calling procedure\&.  LDWH >= 2*NSHFTS\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA
.RE
.PP
Lars Karlsson, Daniel Kressner, and Bruno Lang
.PP
Thijs Steel, Department of Computer science, KU Leuven, Belgium 
.PP
\fBReferences:\fP
.RS 4
K\&. Braman, R\&. Byers and R\&. Mathias, The Multi-Shift QR Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 Performance, SIAM Journal of Matrix Analysis, volume 23, pages 929--947, 2002\&.
.RE
.PP
Lars Karlsson, Daniel Kressner, and Bruno Lang, Optimally packed chains of bulges in multishift QR algorithms\&. ACM Trans\&. Math\&. Softw\&. 40, 2, Article 12 (February 2014)\&. 
.SS "subroutine slaqsb (character UPLO, integer N, integer KD, real, dimension( ldab, * ) AB, integer LDAB, real, dimension( * ) S, real SCOND, real AMAX, character EQUED)"

.PP
\fBSLAQSB\fP scales a symmetric/Hermitian band matrix, using scaling factors computed by spbequ\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAQSB equilibrates a symmetric band matrix A using the scaling
 factors in the vector S\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the upper or lower triangular part of the
          symmetric matrix A is stored\&.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.
.fi
.PP
.br
\fIKD\fP 
.PP
.nf
          KD is INTEGER
          The number of super-diagonals of the matrix A if UPLO = 'U',
          or the number of sub-diagonals if UPLO = 'L'\&.  KD >= 0\&.
.fi
.PP
.br
\fIAB\fP 
.PP
.nf
          AB is REAL array, dimension (LDAB,N)
          On entry, the upper or lower triangle of the symmetric band
          matrix A, stored in the first KD+1 rows of the array\&.  The
          j-th column of A is stored in the j-th column of the array AB
          as follows:
          if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
          if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd)\&.

          On exit, if INFO = 0, the triangular factor U or L from the
          Cholesky factorization A = U**T*U or A = L*L**T of the band
          matrix A, in the same storage format as A\&.
.fi
.PP
.br
\fILDAB\fP 
.PP
.nf
          LDAB is INTEGER
          The leading dimension of the array AB\&.  LDAB >= KD+1\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is REAL array, dimension (N)
          The scale factors for A\&.
.fi
.PP
.br
\fISCOND\fP 
.PP
.nf
          SCOND is REAL
          Ratio of the smallest S(i) to the largest S(i)\&.
.fi
.PP
.br
\fIAMAX\fP 
.PP
.nf
          AMAX is REAL
          Absolute value of largest matrix entry\&.
.fi
.PP
.br
\fIEQUED\fP 
.PP
.nf
          EQUED is CHARACTER*1
          Specifies whether or not equilibration was done\&.
          = 'N':  No equilibration\&.
          = 'Y':  Equilibration was done, i\&.e\&., A has been replaced by
                  diag(S) * A * diag(S)\&.
.fi
.PP
 
.RE
.PP
\fBInternal Parameters:\fP
.RS 4

.PP
.nf
  THRESH is a threshold value used to decide if scaling should be done
  based on the ratio of the scaling factors\&.  If SCOND < THRESH,
  scaling is done\&.

  LARGE and SMALL are threshold values used to decide if scaling should
  be done based on the absolute size of the largest matrix element\&.
  If AMAX > LARGE or AMAX < SMALL, scaling is done\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slaqsp (character UPLO, integer N, real, dimension( * ) AP, real, dimension( * ) S, real SCOND, real AMAX, character EQUED)"

.PP
\fBSLAQSP\fP scales a symmetric/Hermitian matrix in packed storage, using scaling factors computed by sppequ\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAQSP equilibrates a symmetric matrix A using the scaling factors
 in the vector S\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the upper or lower triangular part of the
          symmetric matrix A is stored\&.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.
.fi
.PP
.br
\fIAP\fP 
.PP
.nf
          AP is REAL array, dimension (N*(N+1)/2)
          On entry, the upper or lower triangle of the symmetric matrix
          A, packed columnwise in a linear array\&.  The j-th column of A
          is stored in the array AP as follows:
          if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
          if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n\&.

          On exit, the equilibrated matrix:  diag(S) * A * diag(S), in
          the same storage format as A\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is REAL array, dimension (N)
          The scale factors for A\&.
.fi
.PP
.br
\fISCOND\fP 
.PP
.nf
          SCOND is REAL
          Ratio of the smallest S(i) to the largest S(i)\&.
.fi
.PP
.br
\fIAMAX\fP 
.PP
.nf
          AMAX is REAL
          Absolute value of largest matrix entry\&.
.fi
.PP
.br
\fIEQUED\fP 
.PP
.nf
          EQUED is CHARACTER*1
          Specifies whether or not equilibration was done\&.
          = 'N':  No equilibration\&.
          = 'Y':  Equilibration was done, i\&.e\&., A has been replaced by
                  diag(S) * A * diag(S)\&.
.fi
.PP
 
.RE
.PP
\fBInternal Parameters:\fP
.RS 4

.PP
.nf
  THRESH is a threshold value used to decide if scaling should be done
  based on the ratio of the scaling factors\&.  If SCOND < THRESH,
  scaling is done\&.

  LARGE and SMALL are threshold values used to decide if scaling should
  be done based on the absolute size of the largest matrix element\&.
  If AMAX > LARGE or AMAX < SMALL, scaling is done\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slaqtr (logical LTRAN, logical LREAL, integer N, real, dimension( ldt, * ) T, integer LDT, real, dimension( * ) B, real W, real SCALE, real, dimension( * ) X, real, dimension( * ) WORK, integer INFO)"

.PP
\fBSLAQTR\fP solves a real quasi-triangular system of equations, or a complex quasi-triangular system of special form, in real arithmetic\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAQTR solves the real quasi-triangular system

              op(T)*p = scale*c,               if LREAL = \&.TRUE\&.

 or the complex quasi-triangular systems

            op(T + iB)*(p+iq) = scale*(c+id),  if LREAL = \&.FALSE\&.

 in real arithmetic, where T is upper quasi-triangular\&.
 If LREAL = \&.FALSE\&., then the first diagonal block of T must be
 1 by 1, B is the specially structured matrix

                B = [ b(1) b(2) \&.\&.\&. b(n) ]
                    [       w            ]
                    [           w        ]
                    [              \&.     ]
                    [                 w  ]

 op(A) = A or A**T, A**T denotes the transpose of
 matrix A\&.

 On input, X = [ c ]\&.  On output, X = [ p ]\&.
               [ d ]                  [ q ]

 This subroutine is designed for the condition number estimation
 in routine STRSNA\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fILTRAN\fP 
.PP
.nf
          LTRAN is LOGICAL
          On entry, LTRAN specifies the option of conjugate transpose:
             = \&.FALSE\&.,    op(T+i*B) = T+i*B,
             = \&.TRUE\&.,     op(T+i*B) = (T+i*B)**T\&.
.fi
.PP
.br
\fILREAL\fP 
.PP
.nf
          LREAL is LOGICAL
          On entry, LREAL specifies the input matrix structure:
             = \&.FALSE\&.,    the input is complex
             = \&.TRUE\&.,     the input is real
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          On entry, N specifies the order of T+i*B\&. N >= 0\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,N)
          On entry, T contains a matrix in Schur canonical form\&.
          If LREAL = \&.FALSE\&., then the first diagonal block of T must
          be 1 by 1\&.
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of the matrix T\&. LDT >= max(1,N)\&.
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL array, dimension (N)
          On entry, B contains the elements to form the matrix
          B as described above\&.
          If LREAL = \&.TRUE\&., B is not referenced\&.
.fi
.PP
.br
\fIW\fP 
.PP
.nf
          W is REAL
          On entry, W is the diagonal element of the matrix B\&.
          If LREAL = \&.TRUE\&., W is not referenced\&.
.fi
.PP
.br
\fISCALE\fP 
.PP
.nf
          SCALE is REAL
          On exit, SCALE is the scale factor\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (2*N)
          On entry, X contains the right hand side of the system\&.
          On exit, X is overwritten by the solution\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (N)
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          On exit, INFO is set to
             0: successful exit\&.
               1: the some diagonal 1 by 1 block has been perturbed by
                  a small number SMIN to keep nonsingularity\&.
               2: the some diagonal 2 by 2 block has been perturbed by
                  a small number in SLALN2 to keep nonsingularity\&.
          NOTE: In the interests of speed, this routine does not
                check the inputs for errors\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slar1v (integer N, integer B1, integer BN, real LAMBDA, real, dimension( * ) D, real, dimension( * ) L, real, dimension( * ) LD, real, dimension( * ) LLD, real PIVMIN, real GAPTOL, real, dimension( * ) Z, logical WANTNC, integer NEGCNT, real ZTZ, real MINGMA, integer R, integer, dimension( * ) ISUPPZ, real NRMINV, real RESID, real RQCORR, real, dimension( * ) WORK)"

.PP
\fBSLAR1V\fP computes the (scaled) r-th column of the inverse of the submatrix in rows b1 through bn of the tridiagonal matrix LDLT - λI\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAR1V computes the (scaled) r-th column of the inverse of
 the sumbmatrix in rows B1 through BN of the tridiagonal matrix
 L D L**T - sigma I\&. When sigma is close to an eigenvalue, the
 computed vector is an accurate eigenvector\&. Usually, r corresponds
 to the index where the eigenvector is largest in magnitude\&.
 The following steps accomplish this computation :
 (a) Stationary qd transform,  L D L**T - sigma I = L(+) D(+) L(+)**T,
 (b) Progressive qd transform, L D L**T - sigma I = U(-) D(-) U(-)**T,
 (c) Computation of the diagonal elements of the inverse of
     L D L**T - sigma I by combining the above transforms, and choosing
     r as the index where the diagonal of the inverse is (one of the)
     largest in magnitude\&.
 (d) Computation of the (scaled) r-th column of the inverse using the
     twisted factorization obtained by combining the top part of the
     the stationary and the bottom part of the progressive transform\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
           The order of the matrix L D L**T\&.
.fi
.PP
.br
\fIB1\fP 
.PP
.nf
          B1 is INTEGER
           First index of the submatrix of L D L**T\&.
.fi
.PP
.br
\fIBN\fP 
.PP
.nf
          BN is INTEGER
           Last index of the submatrix of L D L**T\&.
.fi
.PP
.br
\fILAMBDA\fP 
.PP
.nf
          LAMBDA is REAL
           The shift\&. In order to compute an accurate eigenvector,
           LAMBDA should be a good approximation to an eigenvalue
           of L D L**T\&.
.fi
.PP
.br
\fIL\fP 
.PP
.nf
          L is REAL array, dimension (N-1)
           The (n-1) subdiagonal elements of the unit bidiagonal matrix
           L, in elements 1 to N-1\&.
.fi
.PP
.br
\fID\fP 
.PP
.nf
          D is REAL array, dimension (N)
           The n diagonal elements of the diagonal matrix D\&.
.fi
.PP
.br
\fILD\fP 
.PP
.nf
          LD is REAL array, dimension (N-1)
           The n-1 elements L(i)*D(i)\&.
.fi
.PP
.br
\fILLD\fP 
.PP
.nf
          LLD is REAL array, dimension (N-1)
           The n-1 elements L(i)*L(i)*D(i)\&.
.fi
.PP
.br
\fIPIVMIN\fP 
.PP
.nf
          PIVMIN is REAL
           The minimum pivot in the Sturm sequence\&.
.fi
.PP
.br
\fIGAPTOL\fP 
.PP
.nf
          GAPTOL is REAL
           Tolerance that indicates when eigenvector entries are negligible
           w\&.r\&.t\&. their contribution to the residual\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (N)
           On input, all entries of Z must be set to 0\&.
           On output, Z contains the (scaled) r-th column of the
           inverse\&. The scaling is such that Z(R) equals 1\&.
.fi
.PP
.br
\fIWANTNC\fP 
.PP
.nf
          WANTNC is LOGICAL
           Specifies whether NEGCNT has to be computed\&.
.fi
.PP
.br
\fINEGCNT\fP 
.PP
.nf
          NEGCNT is INTEGER
           If WANTNC is \&.TRUE\&. then NEGCNT = the number of pivots < pivmin
           in the  matrix factorization L D L**T, and NEGCNT = -1 otherwise\&.
.fi
.PP
.br
\fIZTZ\fP 
.PP
.nf
          ZTZ is REAL
           The square of the 2-norm of Z\&.
.fi
.PP
.br
\fIMINGMA\fP 
.PP
.nf
          MINGMA is REAL
           The reciprocal of the largest (in magnitude) diagonal
           element of the inverse of L D L**T - sigma I\&.
.fi
.PP
.br
\fIR\fP 
.PP
.nf
          R is INTEGER
           The twist index for the twisted factorization used to
           compute Z\&.
           On input, 0 <= R <= N\&. If R is input as 0, R is set to
           the index where (L D L**T - sigma I)^{-1} is largest
           in magnitude\&. If 1 <= R <= N, R is unchanged\&.
           On output, R contains the twist index used to compute Z\&.
           Ideally, R designates the position of the maximum entry in the
           eigenvector\&.
.fi
.PP
.br
\fIISUPPZ\fP 
.PP
.nf
          ISUPPZ is INTEGER array, dimension (2)
           The support of the vector in Z, i\&.e\&., the vector Z is
           nonzero only in elements ISUPPZ(1) through ISUPPZ( 2 )\&.
.fi
.PP
.br
\fINRMINV\fP 
.PP
.nf
          NRMINV is REAL
           NRMINV = 1/SQRT( ZTZ )
.fi
.PP
.br
\fIRESID\fP 
.PP
.nf
          RESID is REAL
           The residual of the FP vector\&.
           RESID = ABS( MINGMA )/SQRT( ZTZ )
.fi
.PP
.br
\fIRQCORR\fP 
.PP
.nf
          RQCORR is REAL
           The Rayleigh Quotient correction to LAMBDA\&.
           RQCORR = MINGMA*TMP
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (4*N)
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Beresford Parlett, University of California, Berkeley, USA 
.br
 Jim Demmel, University of California, Berkeley, USA 
.br
 Inderjit Dhillon, University of Texas, Austin, USA 
.br
 Osni Marques, LBNL/NERSC, USA 
.br
 Christof Voemel, University of California, Berkeley, USA 
.RE
.PP

.SS "subroutine slar2v (integer N, real, dimension( * ) X, real, dimension( * ) Y, real, dimension( * ) Z, integer INCX, real, dimension( * ) C, real, dimension( * ) S, integer INCC)"

.PP
\fBSLAR2V\fP applies a vector of plane rotations with real cosines and real sines from both sides to a sequence of 2-by-2 symmetric/Hermitian matrices\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAR2V applies a vector of real plane rotations from both sides to
 a sequence of 2-by-2 real symmetric matrices, defined by the elements
 of the vectors x, y and z\&. For i = 1,2,\&.\&.\&.,n

    ( x(i)  z(i) ) := (  c(i)  s(i) ) ( x(i)  z(i) ) ( c(i) -s(i) )
    ( z(i)  y(i) )    ( -s(i)  c(i) ) ( z(i)  y(i) ) ( s(i)  c(i) )
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of plane rotations to be applied\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array,
                         dimension (1+(N-1)*INCX)
          The vector x\&.
.fi
.PP
.br
\fIY\fP 
.PP
.nf
          Y is REAL array,
                         dimension (1+(N-1)*INCX)
          The vector y\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array,
                         dimension (1+(N-1)*INCX)
          The vector z\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between elements of X, Y and Z\&. INCX > 0\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL array, dimension (1+(N-1)*INCC)
          The cosines of the plane rotations\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is REAL array, dimension (1+(N-1)*INCC)
          The sines of the plane rotations\&.
.fi
.PP
.br
\fIINCC\fP 
.PP
.nf
          INCC is INTEGER
          The increment between elements of C and S\&. INCC > 0\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slarf (character SIDE, integer M, integer N, real, dimension( * ) V, integer INCV, real TAU, real, dimension( ldc, * ) C, integer LDC, real, dimension( * ) WORK)"

.PP
\fBSLARF\fP applies an elementary reflector to a general rectangular matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARF applies a real elementary reflector H to a real m by n matrix
 C, from either the left or the right\&. H is represented in the form

       H = I - tau * v * v**T

 where tau is a real scalar and v is a real vector\&.

 If tau = 0, then H is taken to be the unit matrix\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'L': form  H * C
          = 'R': form  C * H
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix C\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix C\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension
                     (1 + (M-1)*abs(INCV)) if SIDE = 'L'
                  or (1 + (N-1)*abs(INCV)) if SIDE = 'R'
          The vector v in the representation of H\&. V is not used if
          TAU = 0\&.
.fi
.PP
.br
\fIINCV\fP 
.PP
.nf
          INCV is INTEGER
          The increment between elements of v\&. INCV <> 0\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL
          The value tau in the representation of H\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL array, dimension (LDC,N)
          On entry, the m by n matrix C\&.
          On exit, C is overwritten by the matrix H * C if SIDE = 'L',
          or C * H if SIDE = 'R'\&.
.fi
.PP
.br
\fILDC\fP 
.PP
.nf
          LDC is INTEGER
          The leading dimension of the array C\&. LDC >= max(1,M)\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension
                         (N) if SIDE = 'L'
                      or (M) if SIDE = 'R'
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slarfb (character SIDE, character TRANS, character DIRECT, character STOREV, integer M, integer N, integer K, real, dimension( ldv, * ) V, integer LDV, real, dimension( ldt, * ) T, integer LDT, real, dimension( ldc, * ) C, integer LDC, real, dimension( ldwork, * ) WORK, integer LDWORK)"

.PP
\fBSLARFB\fP applies a block reflector or its transpose to a general rectangular matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARFB applies a real block reflector H or its transpose H**T to a
 real m by n matrix C, from either the left or the right\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'L': apply H or H**T from the Left
          = 'R': apply H or H**T from the Right
.fi
.PP
.br
\fITRANS\fP 
.PP
.nf
          TRANS is CHARACTER*1
          = 'N': apply H (No transpose)
          = 'T': apply H**T (Transpose)
.fi
.PP
.br
\fIDIRECT\fP 
.PP
.nf
          DIRECT is CHARACTER*1
          Indicates how H is formed from a product of elementary
          reflectors
          = 'F': H = H(1) H(2) \&. \&. \&. H(k) (Forward)
          = 'B': H = H(k) \&. \&. \&. H(2) H(1) (Backward)
.fi
.PP
.br
\fISTOREV\fP 
.PP
.nf
          STOREV is CHARACTER*1
          Indicates how the vectors which define the elementary
          reflectors are stored:
          = 'C': Columnwise
          = 'R': Rowwise
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix C\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix C\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER
          The order of the matrix T (= the number of elementary
          reflectors whose product defines the block reflector)\&.
          If SIDE = 'L', M >= K >= 0;
          if SIDE = 'R', N >= K >= 0\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension
                                (LDV,K) if STOREV = 'C'
                                (LDV,M) if STOREV = 'R' and SIDE = 'L'
                                (LDV,N) if STOREV = 'R' and SIDE = 'R'
          The matrix V\&. See Further Details\&.
.fi
.PP
.br
\fILDV\fP 
.PP
.nf
          LDV is INTEGER
          The leading dimension of the array V\&.
          If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
          if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
          if STOREV = 'R', LDV >= K\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,K)
          The triangular k by k matrix T in the representation of the
          block reflector\&.
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of the array T\&. LDT >= K\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL array, dimension (LDC,N)
          On entry, the m by n matrix C\&.
          On exit, C is overwritten by H*C or H**T*C or C*H or C*H**T\&.
.fi
.PP
.br
\fILDC\fP 
.PP
.nf
          LDC is INTEGER
          The leading dimension of the array C\&. LDC >= max(1,M)\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (LDWORK,K)
.fi
.PP
.br
\fILDWORK\fP 
.PP
.nf
          LDWORK is INTEGER
          The leading dimension of the array WORK\&.
          If SIDE = 'L', LDWORK >= max(1,N);
          if SIDE = 'R', LDWORK >= max(1,M)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  The shape of the matrix V and the storage of the vectors which define
  the H(i) is best illustrated by the following example with n = 5 and
  k = 3\&. The elements equal to 1 are not stored; the corresponding
  array elements are modified but restored on exit\&. The rest of the
  array is not used\&.

  DIRECT = 'F' and STOREV = 'C':         DIRECT = 'F' and STOREV = 'R':

               V = (  1       )                 V = (  1 v1 v1 v1 v1 )
                   ( v1  1    )                     (     1 v2 v2 v2 )
                   ( v1 v2  1 )                     (        1 v3 v3 )
                   ( v1 v2 v3 )
                   ( v1 v2 v3 )

  DIRECT = 'B' and STOREV = 'C':         DIRECT = 'B' and STOREV = 'R':

               V = ( v1 v2 v3 )                 V = ( v1 v1  1       )
                   ( v1 v2 v3 )                     ( v2 v2 v2  1    )
                   (  1 v2 v3 )                     ( v3 v3 v3 v3  1 )
                   (     1 v3 )
                   (        1 )
.fi
.PP
 
.RE
.PP

.SS "subroutine slarfg (integer N, real ALPHA, real, dimension( * ) X, integer INCX, real TAU)"

.PP
\fBSLARFG\fP generates an elementary reflector (Householder matrix)\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARFG generates a real elementary reflector H of order n, such
 that

       H * ( alpha ) = ( beta ),   H**T * H = I\&.
           (   x   )   (   0  )

 where alpha and beta are scalars, and x is an (n-1)-element real
 vector\&. H is represented in the form

       H = I - tau * ( 1 ) * ( 1 v**T ) ,
                     ( v )

 where tau is a real scalar and v is a real (n-1)-element
 vector\&.

 If the elements of x are all zero, then tau = 0 and H is taken to be
 the unit matrix\&.

 Otherwise  1 <= tau <= 2\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the elementary reflector\&.
.fi
.PP
.br
\fIALPHA\fP 
.PP
.nf
          ALPHA is REAL
          On entry, the value alpha\&.
          On exit, it is overwritten with the value beta\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension
                         (1+(N-2)*abs(INCX))
          On entry, the vector x\&.
          On exit, it is overwritten with the vector v\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between elements of X\&. INCX > 0\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL
          The value tau\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slarfgp (integer N, real ALPHA, real, dimension( * ) X, integer INCX, real TAU)"

.PP
\fBSLARFGP\fP generates an elementary reflector (Householder matrix) with non-negative beta\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARFGP generates a real elementary reflector H of order n, such
 that

       H * ( alpha ) = ( beta ),   H**T * H = I\&.
           (   x   )   (   0  )

 where alpha and beta are scalars, beta is non-negative, and x is
 an (n-1)-element real vector\&.  H is represented in the form

       H = I - tau * ( 1 ) * ( 1 v**T ) ,
                     ( v )

 where tau is a real scalar and v is a real (n-1)-element
 vector\&.

 If the elements of x are all zero, then tau = 0 and H is taken to be
 the unit matrix\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the elementary reflector\&.
.fi
.PP
.br
\fIALPHA\fP 
.PP
.nf
          ALPHA is REAL
          On entry, the value alpha\&.
          On exit, it is overwritten with the value beta\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension
                         (1+(N-2)*abs(INCX))
          On entry, the vector x\&.
          On exit, it is overwritten with the vector v\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between elements of X\&. INCX > 0\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL
          The value tau\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slarft (character DIRECT, character STOREV, integer N, integer K, real, dimension( ldv, * ) V, integer LDV, real, dimension( * ) TAU, real, dimension( ldt, * ) T, integer LDT)"

.PP
\fBSLARFT\fP forms the triangular factor T of a block reflector H = I - vtvH  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARFT forms the triangular factor T of a real block reflector H
 of order n, which is defined as a product of k elementary reflectors\&.

 If DIRECT = 'F', H = H(1) H(2) \&. \&. \&. H(k) and T is upper triangular;

 If DIRECT = 'B', H = H(k) \&. \&. \&. H(2) H(1) and T is lower triangular\&.

 If STOREV = 'C', the vector which defines the elementary reflector
 H(i) is stored in the i-th column of the array V, and

    H  =  I - V * T * V**T

 If STOREV = 'R', the vector which defines the elementary reflector
 H(i) is stored in the i-th row of the array V, and

    H  =  I - V**T * T * V
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIDIRECT\fP 
.PP
.nf
          DIRECT is CHARACTER*1
          Specifies the order in which the elementary reflectors are
          multiplied to form the block reflector:
          = 'F': H = H(1) H(2) \&. \&. \&. H(k) (Forward)
          = 'B': H = H(k) \&. \&. \&. H(2) H(1) (Backward)
.fi
.PP
.br
\fISTOREV\fP 
.PP
.nf
          STOREV is CHARACTER*1
          Specifies how the vectors which define the elementary
          reflectors are stored (see also Further Details):
          = 'C': columnwise
          = 'R': rowwise
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the block reflector H\&. N >= 0\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER
          The order of the triangular factor T (= the number of
          elementary reflectors)\&. K >= 1\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension
                               (LDV,K) if STOREV = 'C'
                               (LDV,N) if STOREV = 'R'
          The matrix V\&. See further details\&.
.fi
.PP
.br
\fILDV\fP 
.PP
.nf
          LDV is INTEGER
          The leading dimension of the array V\&.
          If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL array, dimension (K)
          TAU(i) must contain the scalar factor of the elementary
          reflector H(i)\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,K)
          The k by k triangular factor T of the block reflector\&.
          If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
          lower triangular\&. The rest of the array is not used\&.
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of the array T\&. LDT >= K\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  The shape of the matrix V and the storage of the vectors which define
  the H(i) is best illustrated by the following example with n = 5 and
  k = 3\&. The elements equal to 1 are not stored\&.

  DIRECT = 'F' and STOREV = 'C':         DIRECT = 'F' and STOREV = 'R':

               V = (  1       )                 V = (  1 v1 v1 v1 v1 )
                   ( v1  1    )                     (     1 v2 v2 v2 )
                   ( v1 v2  1 )                     (        1 v3 v3 )
                   ( v1 v2 v3 )
                   ( v1 v2 v3 )

  DIRECT = 'B' and STOREV = 'C':         DIRECT = 'B' and STOREV = 'R':

               V = ( v1 v2 v3 )                 V = ( v1 v1  1       )
                   ( v1 v2 v3 )                     ( v2 v2 v2  1    )
                   (  1 v2 v3 )                     ( v3 v3 v3 v3  1 )
                   (     1 v3 )
                   (        1 )
.fi
.PP
 
.RE
.PP

.SS "subroutine slarfx (character SIDE, integer M, integer N, real, dimension( * ) V, real TAU, real, dimension( ldc, * ) C, integer LDC, real, dimension( * ) WORK)"

.PP
\fBSLARFX\fP applies an elementary reflector to a general rectangular matrix, with loop unrolling when the reflector has order ≤ 10\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARFX applies a real elementary reflector H to a real m by n
 matrix C, from either the left or the right\&. H is represented in the
 form

       H = I - tau * v * v**T

 where tau is a real scalar and v is a real vector\&.

 If tau = 0, then H is taken to be the unit matrix

 This version uses inline code if H has order < 11\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'L': form  H * C
          = 'R': form  C * H
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix C\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix C\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension (M) if SIDE = 'L'
                                     or (N) if SIDE = 'R'
          The vector v in the representation of H\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL
          The value tau in the representation of H\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL array, dimension (LDC,N)
          On entry, the m by n matrix C\&.
          On exit, C is overwritten by the matrix H * C if SIDE = 'L',
          or C * H if SIDE = 'R'\&.
.fi
.PP
.br
\fILDC\fP 
.PP
.nf
          LDC is INTEGER
          The leading dimension of the array C\&. LDC >= (1,M)\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension
                      (N) if SIDE = 'L'
                      or (M) if SIDE = 'R'
          WORK is not referenced if H has order < 11\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slarfy (character UPLO, integer N, real, dimension( * ) V, integer INCV, real TAU, real, dimension( ldc, * ) C, integer LDC, real, dimension( * ) WORK)"

.PP
\fBSLARFY\fP 
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARFY applies an elementary reflector, or Householder matrix, H,
 to an n x n symmetric matrix C, from both the left and the right\&.

 H is represented in the form

    H = I - tau * v * v'

 where  tau  is a scalar and  v  is a vector\&.

 If  tau  is  zero, then  H  is taken to be the unit matrix\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the upper or lower triangular part of the
          symmetric matrix C is stored\&.
          = 'U':  Upper triangle
          = 'L':  Lower triangle
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of rows and columns of the matrix C\&.  N >= 0\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension
                  (1 + (N-1)*abs(INCV))
          The vector v as described above\&.
.fi
.PP
.br
\fIINCV\fP 
.PP
.nf
          INCV is INTEGER
          The increment between successive elements of v\&.  INCV must
          not be zero\&.
.fi
.PP
.br
\fITAU\fP 
.PP
.nf
          TAU is REAL
          The value tau as described above\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL array, dimension (LDC, N)
          On entry, the matrix C\&.
          On exit, C is overwritten by H * C * H'\&.
.fi
.PP
.br
\fILDC\fP 
.PP
.nf
          LDC is INTEGER
          The leading dimension of the array C\&.  LDC >= max( 1, N )\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (N)
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slargv (integer N, real, dimension( * ) X, integer INCX, real, dimension( * ) Y, integer INCY, real, dimension( * ) C, integer INCC)"

.PP
\fBSLARGV\fP generates a vector of plane rotations with real cosines and real sines\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARGV generates a vector of real plane rotations, determined by
 elements of the real vectors x and y\&. For i = 1,2,\&.\&.\&.,n

    (  c(i)  s(i) ) ( x(i) ) = ( a(i) )
    ( -s(i)  c(i) ) ( y(i) ) = (   0  )
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of plane rotations to be generated\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array,
                         dimension (1+(N-1)*INCX)
          On entry, the vector x\&.
          On exit, x(i) is overwritten by a(i), for i = 1,\&.\&.\&.,n\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between elements of X\&. INCX > 0\&.
.fi
.PP
.br
\fIY\fP 
.PP
.nf
          Y is REAL array,
                         dimension (1+(N-1)*INCY)
          On entry, the vector y\&.
          On exit, the sines of the plane rotations\&.
.fi
.PP
.br
\fIINCY\fP 
.PP
.nf
          INCY is INTEGER
          The increment between elements of Y\&. INCY > 0\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL array, dimension (1+(N-1)*INCC)
          The cosines of the plane rotations\&.
.fi
.PP
.br
\fIINCC\fP 
.PP
.nf
          INCC is INTEGER
          The increment between elements of C\&. INCC > 0\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slarrv (integer N, real VL, real VU, real, dimension( * ) D, real, dimension( * ) L, real PIVMIN, integer, dimension( * ) ISPLIT, integer M, integer DOL, integer DOU, real MINRGP, real RTOL1, real RTOL2, real, dimension( * ) W, real, dimension( * ) WERR, real, dimension( * ) WGAP, integer, dimension( * ) IBLOCK, integer, dimension( * ) INDEXW, real, dimension( * ) GERS, real, dimension( ldz, * ) Z, integer LDZ, integer, dimension( * ) ISUPPZ, real, dimension( * ) WORK, integer, dimension( * ) IWORK, integer INFO)"

.PP
\fBSLARRV\fP computes the eigenvectors of the tridiagonal matrix T = L D LT given L, D and the eigenvalues of L D LT\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARRV computes the eigenvectors of the tridiagonal matrix
 T = L D L**T given L, D and APPROXIMATIONS to the eigenvalues of L D L**T\&.
 The input eigenvalues should have been computed by SLARRE\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix\&.  N >= 0\&.
.fi
.PP
.br
\fIVL\fP 
.PP
.nf
          VL is REAL
          Lower bound of the interval that contains the desired
          eigenvalues\&. VL < VU\&. Needed to compute gaps on the left or right
          end of the extremal eigenvalues in the desired RANGE\&.
.fi
.PP
.br
\fIVU\fP 
.PP
.nf
          VU is REAL
          Upper bound of the interval that contains the desired
          eigenvalues\&. VL < VU\&. 
          Note: VU is currently not used by this implementation of SLARRV, VU is
          passed to SLARRV because it could be used compute gaps on the right end
          of the extremal eigenvalues\&. However, with not much initial accuracy in
          LAMBDA and VU, the formula can lead to an overestimation of the right gap
          and thus to inadequately early RQI 'convergence'\&. This is currently
          prevented this by forcing a small right gap\&. And so it turns out that VU
          is currently not used by this implementation of SLARRV\&.
.fi
.PP
.br
\fID\fP 
.PP
.nf
          D is REAL array, dimension (N)
          On entry, the N diagonal elements of the diagonal matrix D\&.
          On exit, D may be overwritten\&.
.fi
.PP
.br
\fIL\fP 
.PP
.nf
          L is REAL array, dimension (N)
          On entry, the (N-1) subdiagonal elements of the unit
          bidiagonal matrix L are in elements 1 to N-1 of L
          (if the matrix is not split\&.) At the end of each block
          is stored the corresponding shift as given by SLARRE\&.
          On exit, L is overwritten\&.
.fi
.PP
.br
\fIPIVMIN\fP 
.PP
.nf
          PIVMIN is REAL
          The minimum pivot allowed in the Sturm sequence\&.
.fi
.PP
.br
\fIISPLIT\fP 
.PP
.nf
          ISPLIT is INTEGER array, dimension (N)
          The splitting points, at which T breaks up into blocks\&.
          The first block consists of rows/columns 1 to
          ISPLIT( 1 ), the second of rows/columns ISPLIT( 1 )+1
          through ISPLIT( 2 ), etc\&.
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The total number of input eigenvalues\&.  0 <= M <= N\&.
.fi
.PP
.br
\fIDOL\fP 
.PP
.nf
          DOL is INTEGER
.fi
.PP
.br
\fIDOU\fP 
.PP
.nf
          DOU is INTEGER
          If the user wants to compute only selected eigenvectors from all
          the eigenvalues supplied, he can specify an index range DOL:DOU\&.
          Or else the setting DOL=1, DOU=M should be applied\&.
          Note that DOL and DOU refer to the order in which the eigenvalues
          are stored in W\&.
          If the user wants to compute only selected eigenpairs, then
          the columns DOL-1 to DOU+1 of the eigenvector space Z contain the
          computed eigenvectors\&. All other columns of Z are set to zero\&.
.fi
.PP
.br
\fIMINRGP\fP 
.PP
.nf
          MINRGP is REAL
.fi
.PP
.br
\fIRTOL1\fP 
.PP
.nf
          RTOL1 is REAL
.fi
.PP
.br
\fIRTOL2\fP 
.PP
.nf
          RTOL2 is REAL
           Parameters for bisection\&.
           An interval [LEFT,RIGHT] has converged if
           RIGHT-LEFT < MAX( RTOL1*GAP, RTOL2*MAX(|LEFT|,|RIGHT|) )
.fi
.PP
.br
\fIW\fP 
.PP
.nf
          W is REAL array, dimension (N)
          The first M elements of W contain the APPROXIMATE eigenvalues for
          which eigenvectors are to be computed\&.  The eigenvalues
          should be grouped by split-off block and ordered from
          smallest to largest within the block ( The output array
          W from SLARRE is expected here )\&. Furthermore, they are with
          respect to the shift of the corresponding root representation
          for their block\&. On exit, W holds the eigenvalues of the
          UNshifted matrix\&.
.fi
.PP
.br
\fIWERR\fP 
.PP
.nf
          WERR is REAL array, dimension (N)
          The first M elements contain the semiwidth of the uncertainty
          interval of the corresponding eigenvalue in W
.fi
.PP
.br
\fIWGAP\fP 
.PP
.nf
          WGAP is REAL array, dimension (N)
          The separation from the right neighbor eigenvalue in W\&.
.fi
.PP
.br
\fIIBLOCK\fP 
.PP
.nf
          IBLOCK is INTEGER array, dimension (N)
          The indices of the blocks (submatrices) associated with the
          corresponding eigenvalues in W; IBLOCK(i)=1 if eigenvalue
          W(i) belongs to the first block from the top, =2 if W(i)
          belongs to the second block, etc\&.
.fi
.PP
.br
\fIINDEXW\fP 
.PP
.nf
          INDEXW is INTEGER array, dimension (N)
          The indices of the eigenvalues within each block (submatrix);
          for example, INDEXW(i)= 10 and IBLOCK(i)=2 imply that the
          i-th eigenvalue W(i) is the 10-th eigenvalue in the second block\&.
.fi
.PP
.br
\fIGERS\fP 
.PP
.nf
          GERS is REAL array, dimension (2*N)
          The N Gerschgorin intervals (the i-th Gerschgorin interval
          is (GERS(2*i-1), GERS(2*i))\&. The Gerschgorin intervals should
          be computed from the original UNshifted matrix\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ, max(1,M) )
          If INFO = 0, the first M columns of Z contain the
          orthonormal eigenvectors of the matrix T
          corresponding to the input eigenvalues, with the i-th
          column of Z holding the eigenvector associated with W(i)\&.
          Note: the user must ensure that at least max(1,M) columns are
          supplied in the array Z\&.
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
          The leading dimension of the array Z\&.  LDZ >= 1, and if
          JOBZ = 'V', LDZ >= max(1,N)\&.
.fi
.PP
.br
\fIISUPPZ\fP 
.PP
.nf
          ISUPPZ is INTEGER array, dimension ( 2*max(1,M) )
          The support of the eigenvectors in Z, i\&.e\&., the indices
          indicating the nonzero elements in Z\&. The I-th eigenvector
          is nonzero only in elements ISUPPZ( 2*I-1 ) through
          ISUPPZ( 2*I )\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (12*N)
.fi
.PP
.br
\fIIWORK\fP 
.PP
.nf
          IWORK is INTEGER array, dimension (7*N)
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit

          > 0:  A problem occurred in SLARRV\&.
          < 0:  One of the called subroutines signaled an internal problem\&.
                Needs inspection of the corresponding parameter IINFO
                for further information\&.

          =-1:  Problem in SLARRB when refining a child's eigenvalues\&.
          =-2:  Problem in SLARRF when computing the RRR of a child\&.
                When a child is inside a tight cluster, it can be difficult
                to find an RRR\&. A partial remedy from the user's point of
                view is to make the parameter MINRGP smaller and recompile\&.
                However, as the orthogonality of the computed vectors is
                proportional to 1/MINRGP, the user should be aware that
                he might be trading in precision when he decreases MINRGP\&.
          =-3:  Problem in SLARRB when refining a single eigenvalue
                after the Rayleigh correction was rejected\&.
          = 5:  The Rayleigh Quotient Iteration failed to converge to
                full accuracy in MAXITR steps\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Beresford Parlett, University of California, Berkeley, USA 
.br
 Jim Demmel, University of California, Berkeley, USA 
.br
 Inderjit Dhillon, University of Texas, Austin, USA 
.br
 Osni Marques, LBNL/NERSC, USA 
.br
 Christof Voemel, University of California, Berkeley, USA 
.RE
.PP

.SS "subroutine slartv (integer N, real, dimension( * ) X, integer INCX, real, dimension( * ) Y, integer INCY, real, dimension( * ) C, real, dimension( * ) S, integer INCC)"

.PP
\fBSLARTV\fP applies a vector of plane rotations with real cosines and real sines to the elements of a pair of vectors\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLARTV applies a vector of real plane rotations to elements of the
 real vectors x and y\&. For i = 1,2,\&.\&.\&.,n

    ( x(i) ) := (  c(i)  s(i) ) ( x(i) )
    ( y(i) )    ( -s(i)  c(i) ) ( y(i) )
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of plane rotations to be applied\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array,
                         dimension (1+(N-1)*INCX)
          The vector x\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between elements of X\&. INCX > 0\&.
.fi
.PP
.br
\fIY\fP 
.PP
.nf
          Y is REAL array,
                         dimension (1+(N-1)*INCY)
          The vector y\&.
.fi
.PP
.br
\fIINCY\fP 
.PP
.nf
          INCY is INTEGER
          The increment between elements of Y\&. INCY > 0\&.
.fi
.PP
.br
\fIC\fP 
.PP
.nf
          C is REAL array, dimension (1+(N-1)*INCC)
          The cosines of the plane rotations\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is REAL array, dimension (1+(N-1)*INCC)
          The sines of the plane rotations\&.
.fi
.PP
.br
\fIINCC\fP 
.PP
.nf
          INCC is INTEGER
          The increment between elements of C and S\&. INCC > 0\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slaswp (integer N, real, dimension( lda, * ) A, integer LDA, integer K1, integer K2, integer, dimension( * ) IPIV, integer INCX)"

.PP
\fBSLASWP\fP performs a series of row interchanges on a general rectangular matrix\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLASWP performs a series of row interchanges on the matrix A\&.
 One row interchange is initiated for each of rows K1 through K2 of A\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix A\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          On entry, the matrix of column dimension N to which the row
          interchanges will be applied\&.
          On exit, the permuted matrix\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.
.fi
.PP
.br
\fIK1\fP 
.PP
.nf
          K1 is INTEGER
          The first element of IPIV for which a row interchange will
          be done\&.
.fi
.PP
.br
\fIK2\fP 
.PP
.nf
          K2 is INTEGER
          (K2-K1+1) is the number of elements of IPIV for which a row
          interchange will be done\&.
.fi
.PP
.br
\fIIPIV\fP 
.PP
.nf
          IPIV is INTEGER array, dimension (K1+(K2-K1)*abs(INCX))
          The vector of pivot indices\&. Only the elements in positions
          K1 through K1+(K2-K1)*abs(INCX) of IPIV are accessed\&.
          IPIV(K1+(K-K1)*abs(INCX)) = L implies rows K and L are to be
          interchanged\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between successive values of IPIV\&. If INCX
          is negative, the pivots are applied in reverse order\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  Modified by
   R\&. C\&. Whaley, Computer Science Dept\&., Univ\&. of Tenn\&., Knoxville, USA
.fi
.PP
 
.RE
.PP

.SS "subroutine slatbs (character UPLO, character TRANS, character DIAG, character NORMIN, integer N, integer KD, real, dimension( ldab, * ) AB, integer LDAB, real, dimension( * ) X, real SCALE, real, dimension( * ) CNORM, integer INFO)"

.PP
\fBSLATBS\fP solves a triangular banded system of equations\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLATBS solves one of the triangular systems

    A *x = s*b  or  A**T*x = s*b

 with scaling to prevent overflow, where A is an upper or lower
 triangular band matrix\&.  Here A**T denotes the transpose of A, x and b
 are n-element vectors, and s is a scaling factor, usually less than
 or equal to 1, chosen so that the components of x will be less than
 the overflow threshold\&.  If the unscaled problem will not cause
 overflow, the Level 2 BLAS routine STBSV is called\&.  If the matrix A
 is singular (A(j,j) = 0 for some j), then s is set to 0 and a
 non-trivial solution to A*x = 0 is returned\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the matrix A is upper or lower triangular\&.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fITRANS\fP 
.PP
.nf
          TRANS is CHARACTER*1
          Specifies the operation applied to A\&.
          = 'N':  Solve A * x = s*b  (No transpose)
          = 'T':  Solve A**T* x = s*b  (Transpose)
          = 'C':  Solve A**T* x = s*b  (Conjugate transpose = Transpose)
.fi
.PP
.br
\fIDIAG\fP 
.PP
.nf
          DIAG is CHARACTER*1
          Specifies whether or not the matrix A is unit triangular\&.
          = 'N':  Non-unit triangular
          = 'U':  Unit triangular
.fi
.PP
.br
\fINORMIN\fP 
.PP
.nf
          NORMIN is CHARACTER*1
          Specifies whether CNORM has been set or not\&.
          = 'Y':  CNORM contains the column norms on entry
          = 'N':  CNORM is not set on entry\&.  On exit, the norms will
                  be computed and stored in CNORM\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.
.fi
.PP
.br
\fIKD\fP 
.PP
.nf
          KD is INTEGER
          The number of subdiagonals or superdiagonals in the
          triangular matrix A\&.  KD >= 0\&.
.fi
.PP
.br
\fIAB\fP 
.PP
.nf
          AB is REAL array, dimension (LDAB,N)
          The upper or lower triangular band matrix A, stored in the
          first KD+1 rows of the array\&. The j-th column of A is stored
          in the j-th column of the array AB as follows:
          if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
          if UPLO = 'L', AB(1+i-j,j)    = A(i,j) for j<=i<=min(n,j+kd)\&.
.fi
.PP
.br
\fILDAB\fP 
.PP
.nf
          LDAB is INTEGER
          The leading dimension of the array AB\&.  LDAB >= KD+1\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (N)
          On entry, the right hand side b of the triangular system\&.
          On exit, X is overwritten by the solution vector x\&.
.fi
.PP
.br
\fISCALE\fP 
.PP
.nf
          SCALE is REAL
          The scaling factor s for the triangular system
             A * x = s*b  or  A**T* x = s*b\&.
          If SCALE = 0, the matrix A is singular or badly scaled, and
          the vector x is an exact or approximate solution to A*x = 0\&.
.fi
.PP
.br
\fICNORM\fP 
.PP
.nf
          CNORM is REAL array, dimension (N)

          If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
          contains the norm of the off-diagonal part of the j-th column
          of A\&.  If TRANS = 'N', CNORM(j) must be greater than or equal
          to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
          must be greater than or equal to the 1-norm\&.

          If NORMIN = 'N', CNORM is an output argument and CNORM(j)
          returns the 1-norm of the offdiagonal part of the j-th column
          of A\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit
          < 0:  if INFO = -k, the k-th argument had an illegal value
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  A rough bound on x is computed; if that is less than overflow, STBSV
  is called, otherwise, specific code is used which checks for possible
  overflow or divide-by-zero at every operation\&.

  A columnwise scheme is used for solving A*x = b\&.  The basic algorithm
  if A is lower triangular is

       x[1:n] := b[1:n]
       for j = 1, \&.\&.\&., n
            x(j) := x(j) / A(j,j)
            x[j+1:n] := x[j+1:n] - x(j) * A[j+1:n,j]
       end

  Define bounds on the components of x after j iterations of the loop:
     M(j) = bound on x[1:j]
     G(j) = bound on x[j+1:n]
  Initially, let M(0) = 0 and G(0) = max{x(i), i=1,\&.\&.\&.,n}\&.

  Then for iteration j+1 we have
     M(j+1) <= G(j) / | A(j+1,j+1) |
     G(j+1) <= G(j) + M(j+1) * | A[j+2:n,j+1] |
            <= G(j) ( 1 + CNORM(j+1) / | A(j+1,j+1) | )

  where CNORM(j+1) is greater than or equal to the infinity-norm of
  column j+1 of A, not counting the diagonal\&.  Hence

     G(j) <= G(0) product ( 1 + CNORM(i) / | A(i,i) | )
                  1<=i<=j
  and

     |x(j)| <= ( G(0) / |A(j,j)| ) product ( 1 + CNORM(i) / |A(i,i)| )
                                   1<=i< j

  Since |x(j)| <= M(j), we use the Level 2 BLAS routine STBSV if the
  reciprocal of the largest M(j), j=1,\&.\&.,n, is larger than
  max(underflow, 1/overflow)\&.

  The bound on x(j) is also used to determine when a step in the
  columnwise method can be performed without fear of overflow\&.  If
  the computed bound is greater than a large constant, x is scaled to
  prevent overflow, but if the bound overflows, x is set to 0, x(j) to
  1, and scale to 0, and a non-trivial solution to A*x = 0 is found\&.

  Similarly, a row-wise scheme is used to solve A**T*x = b\&.  The basic
  algorithm for A upper triangular is

       for j = 1, \&.\&.\&., n
            x(j) := ( b(j) - A[1:j-1,j]**T * x[1:j-1] ) / A(j,j)
       end

  We simultaneously compute two bounds
       G(j) = bound on ( b(i) - A[1:i-1,i]**T * x[1:i-1] ), 1<=i<=j
       M(j) = bound on x(i), 1<=i<=j

  The initial values are G(0) = 0, M(0) = max{b(i), i=1,\&.\&.,n}, and we
  add the constraint G(j) >= G(j-1) and M(j) >= M(j-1) for j >= 1\&.
  Then the bound on x(j) is

       M(j) <= M(j-1) * ( 1 + CNORM(j) ) / | A(j,j) |

            <= M(0) * product ( ( 1 + CNORM(i) ) / |A(i,i)| )
                      1<=i<=j

  and we can safely call STBSV if 1/M(n) and 1/G(n) are both greater
  than max(underflow, 1/overflow)\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine slatdf (integer IJOB, integer N, real, dimension( ldz, * ) Z, integer LDZ, real, dimension( * ) RHS, real RDSUM, real RDSCAL, integer, dimension( * ) IPIV, integer, dimension( * ) JPIV)"

.PP
\fBSLATDF\fP uses the LU factorization of the n-by-n matrix computed by sgetc2 and computes a contribution to the reciprocal Dif-estimate\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLATDF uses the LU factorization of the n-by-n matrix Z computed by
 SGETC2 and computes a contribution to the reciprocal Dif-estimate
 by solving Z * x = b for x, and choosing the r\&.h\&.s\&. b such that
 the norm of x is as large as possible\&. On entry RHS = b holds the
 contribution from earlier solved sub-systems, and on return RHS = x\&.

 The factorization of Z returned by SGETC2 has the form Z = P*L*U*Q,
 where P and Q are permutation matrices\&. L is lower triangular with
 unit diagonal elements and U is upper triangular\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIIJOB\fP 
.PP
.nf
          IJOB is INTEGER
          IJOB = 2: First compute an approximative null-vector e
              of Z using SGECON, e is normalized and solve for
              Zx = +-e - f with the sign giving the greater value
              of 2-norm(x)\&. About 5 times as expensive as Default\&.
          IJOB \&.ne\&. 2: Local look ahead strategy where all entries of
              the r\&.h\&.s\&. b is chosen as either +1 or -1 (Default)\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix Z\&.
.fi
.PP
.br
\fIZ\fP 
.PP
.nf
          Z is REAL array, dimension (LDZ, N)
          On entry, the LU part of the factorization of the n-by-n
          matrix Z computed by SGETC2:  Z = P * L * U * Q
.fi
.PP
.br
\fILDZ\fP 
.PP
.nf
          LDZ is INTEGER
          The leading dimension of the array Z\&.  LDA >= max(1, N)\&.
.fi
.PP
.br
\fIRHS\fP 
.PP
.nf
          RHS is REAL array, dimension N\&.
          On entry, RHS contains contributions from other subsystems\&.
          On exit, RHS contains the solution of the subsystem with
          entries according to the value of IJOB (see above)\&.
.fi
.PP
.br
\fIRDSUM\fP 
.PP
.nf
          RDSUM is REAL
          On entry, the sum of squares of computed contributions to
          the Dif-estimate under computation by STGSYL, where the
          scaling factor RDSCAL (see below) has been factored out\&.
          On exit, the corresponding sum of squares updated with the
          contributions from the current sub-system\&.
          If TRANS = 'T' RDSUM is not touched\&.
          NOTE: RDSUM only makes sense when STGSY2 is called by STGSYL\&.
.fi
.PP
.br
\fIRDSCAL\fP 
.PP
.nf
          RDSCAL is REAL
          On entry, scaling factor used to prevent overflow in RDSUM\&.
          On exit, RDSCAL is updated w\&.r\&.t\&. the current contributions
          in RDSUM\&.
          If TRANS = 'T', RDSCAL is not touched\&.
          NOTE: RDSCAL only makes sense when STGSY2 is called by
                STGSYL\&.
.fi
.PP
.br
\fIIPIV\fP 
.PP
.nf
          IPIV is INTEGER array, dimension (N)\&.
          The pivot indices; for 1 <= i <= N, row i of the
          matrix has been interchanged with row IPIV(i)\&.
.fi
.PP
.br
\fIJPIV\fP 
.PP
.nf
          JPIV is INTEGER array, dimension (N)\&.
          The pivot indices; for 1 <= j <= N, column j of the
          matrix has been interchanged with column JPIV(j)\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4
This routine is a further developed implementation of algorithm BSOLVE in [1] using complete pivoting in the LU factorization\&. 
.RE
.PP
\fBContributors:\fP
.RS 4
Bo Kagstrom and Peter Poromaa, Department of Computing Science, Umea University, S-901 87 Umea, Sweden\&. 
.RE
.PP
\fBReferences:\fP
.RS 4

.PP
.nf
  [1] Bo Kagstrom and Lars Westin,
      Generalized Schur Methods with Condition Estimators for
      Solving the Generalized Sylvester Equation, IEEE Transactions
      on Automatic Control, Vol\&. 34, No\&. 7, July 1989, pp 745-751\&.

  [2] Peter Poromaa,
      On Efficient and Robust Estimators for the Separation
      between two Regular Matrix Pairs with Applications in
      Condition Estimation\&. Report IMINF-95\&.05, Departement of
      Computing Science, Umea University, S-901 87 Umea, Sweden, 1995\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine slatps (character UPLO, character TRANS, character DIAG, character NORMIN, integer N, real, dimension( * ) AP, real, dimension( * ) X, real SCALE, real, dimension( * ) CNORM, integer INFO)"

.PP
\fBSLATPS\fP solves a triangular system of equations with the matrix held in packed storage\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLATPS solves one of the triangular systems

    A *x = s*b  or  A**T*x = s*b

 with scaling to prevent overflow, where A is an upper or lower
 triangular matrix stored in packed form\&.  Here A**T denotes the
 transpose of A, x and b are n-element vectors, and s is a scaling
 factor, usually less than or equal to 1, chosen so that the
 components of x will be less than the overflow threshold\&.  If the
 unscaled problem will not cause overflow, the Level 2 BLAS routine
 STPSV is called\&. If the matrix A is singular (A(j,j) = 0 for some j),
 then s is set to 0 and a non-trivial solution to A*x = 0 is returned\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the matrix A is upper or lower triangular\&.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fITRANS\fP 
.PP
.nf
          TRANS is CHARACTER*1
          Specifies the operation applied to A\&.
          = 'N':  Solve A * x = s*b  (No transpose)
          = 'T':  Solve A**T* x = s*b  (Transpose)
          = 'C':  Solve A**T* x = s*b  (Conjugate transpose = Transpose)
.fi
.PP
.br
\fIDIAG\fP 
.PP
.nf
          DIAG is CHARACTER*1
          Specifies whether or not the matrix A is unit triangular\&.
          = 'N':  Non-unit triangular
          = 'U':  Unit triangular
.fi
.PP
.br
\fINORMIN\fP 
.PP
.nf
          NORMIN is CHARACTER*1
          Specifies whether CNORM has been set or not\&.
          = 'Y':  CNORM contains the column norms on entry
          = 'N':  CNORM is not set on entry\&.  On exit, the norms will
                  be computed and stored in CNORM\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.
.fi
.PP
.br
\fIAP\fP 
.PP
.nf
          AP is REAL array, dimension (N*(N+1)/2)
          The upper or lower triangular matrix A, packed columnwise in
          a linear array\&.  The j-th column of A is stored in the array
          AP as follows:
          if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
          if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (N)
          On entry, the right hand side b of the triangular system\&.
          On exit, X is overwritten by the solution vector x\&.
.fi
.PP
.br
\fISCALE\fP 
.PP
.nf
          SCALE is REAL
          The scaling factor s for the triangular system
             A * x = s*b  or  A**T* x = s*b\&.
          If SCALE = 0, the matrix A is singular or badly scaled, and
          the vector x is an exact or approximate solution to A*x = 0\&.
.fi
.PP
.br
\fICNORM\fP 
.PP
.nf
          CNORM is REAL array, dimension (N)

          If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
          contains the norm of the off-diagonal part of the j-th column
          of A\&.  If TRANS = 'N', CNORM(j) must be greater than or equal
          to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
          must be greater than or equal to the 1-norm\&.

          If NORMIN = 'N', CNORM is an output argument and CNORM(j)
          returns the 1-norm of the offdiagonal part of the j-th column
          of A\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit
          < 0:  if INFO = -k, the k-th argument had an illegal value
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  A rough bound on x is computed; if that is less than overflow, STPSV
  is called, otherwise, specific code is used which checks for possible
  overflow or divide-by-zero at every operation\&.

  A columnwise scheme is used for solving A*x = b\&.  The basic algorithm
  if A is lower triangular is

       x[1:n] := b[1:n]
       for j = 1, \&.\&.\&., n
            x(j) := x(j) / A(j,j)
            x[j+1:n] := x[j+1:n] - x(j) * A[j+1:n,j]
       end

  Define bounds on the components of x after j iterations of the loop:
     M(j) = bound on x[1:j]
     G(j) = bound on x[j+1:n]
  Initially, let M(0) = 0 and G(0) = max{x(i), i=1,\&.\&.\&.,n}\&.

  Then for iteration j+1 we have
     M(j+1) <= G(j) / | A(j+1,j+1) |
     G(j+1) <= G(j) + M(j+1) * | A[j+2:n,j+1] |
            <= G(j) ( 1 + CNORM(j+1) / | A(j+1,j+1) | )

  where CNORM(j+1) is greater than or equal to the infinity-norm of
  column j+1 of A, not counting the diagonal\&.  Hence

     G(j) <= G(0) product ( 1 + CNORM(i) / | A(i,i) | )
                  1<=i<=j
  and

     |x(j)| <= ( G(0) / |A(j,j)| ) product ( 1 + CNORM(i) / |A(i,i)| )
                                   1<=i< j

  Since |x(j)| <= M(j), we use the Level 2 BLAS routine STPSV if the
  reciprocal of the largest M(j), j=1,\&.\&.,n, is larger than
  max(underflow, 1/overflow)\&.

  The bound on x(j) is also used to determine when a step in the
  columnwise method can be performed without fear of overflow\&.  If
  the computed bound is greater than a large constant, x is scaled to
  prevent overflow, but if the bound overflows, x is set to 0, x(j) to
  1, and scale to 0, and a non-trivial solution to A*x = 0 is found\&.

  Similarly, a row-wise scheme is used to solve A**T*x = b\&.  The basic
  algorithm for A upper triangular is

       for j = 1, \&.\&.\&., n
            x(j) := ( b(j) - A[1:j-1,j]**T * x[1:j-1] ) / A(j,j)
       end

  We simultaneously compute two bounds
       G(j) = bound on ( b(i) - A[1:i-1,i]**T * x[1:i-1] ), 1<=i<=j
       M(j) = bound on x(i), 1<=i<=j

  The initial values are G(0) = 0, M(0) = max{b(i), i=1,\&.\&.,n}, and we
  add the constraint G(j) >= G(j-1) and M(j) >= M(j-1) for j >= 1\&.
  Then the bound on x(j) is

       M(j) <= M(j-1) * ( 1 + CNORM(j) ) / | A(j,j) |

            <= M(0) * product ( ( 1 + CNORM(i) ) / |A(i,i)| )
                      1<=i<=j

  and we can safely call STPSV if 1/M(n) and 1/G(n) are both greater
  than max(underflow, 1/overflow)\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine slatrs (character UPLO, character TRANS, character DIAG, character NORMIN, integer N, real, dimension( lda, * ) A, integer LDA, real, dimension( * ) X, real SCALE, real, dimension( * ) CNORM, integer INFO)"

.PP
\fBSLATRS\fP solves a triangular system of equations with the scale factor set to prevent overflow\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLATRS solves one of the triangular systems

    A *x = s*b  or  A**T*x = s*b

 with scaling to prevent overflow\&.  Here A is an upper or lower
 triangular matrix, A**T denotes the transpose of A, x and b are
 n-element vectors, and s is a scaling factor, usually less than
 or equal to 1, chosen so that the components of x will be less than
 the overflow threshold\&.  If the unscaled problem will not cause
 overflow, the Level 2 BLAS routine STRSV is called\&.  If the matrix A
 is singular (A(j,j) = 0 for some j), then s is set to 0 and a
 non-trivial solution to A*x = 0 is returned\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the matrix A is upper or lower triangular\&.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fITRANS\fP 
.PP
.nf
          TRANS is CHARACTER*1
          Specifies the operation applied to A\&.
          = 'N':  Solve A * x = s*b  (No transpose)
          = 'T':  Solve A**T* x = s*b  (Transpose)
          = 'C':  Solve A**T* x = s*b  (Conjugate transpose = Transpose)
.fi
.PP
.br
\fIDIAG\fP 
.PP
.nf
          DIAG is CHARACTER*1
          Specifies whether or not the matrix A is unit triangular\&.
          = 'N':  Non-unit triangular
          = 'U':  Unit triangular
.fi
.PP
.br
\fINORMIN\fP 
.PP
.nf
          NORMIN is CHARACTER*1
          Specifies whether CNORM has been set or not\&.
          = 'Y':  CNORM contains the column norms on entry
          = 'N':  CNORM is not set on entry\&.  On exit, the norms will
                  be computed and stored in CNORM\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrix A\&.  N >= 0\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          The triangular matrix A\&.  If UPLO = 'U', the leading n by n
          upper triangular part of the array A contains the upper
          triangular matrix, and the strictly lower triangular part of
          A is not referenced\&.  If UPLO = 'L', the leading n by n lower
          triangular part of the array A contains the lower triangular
          matrix, and the strictly upper triangular part of A is not
          referenced\&.  If DIAG = 'U', the diagonal elements of A are
          also not referenced and are assumed to be 1\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= max (1,N)\&.
.fi
.PP
.br
\fIX\fP 
.PP
.nf
          X is REAL array, dimension (N)
          On entry, the right hand side b of the triangular system\&.
          On exit, X is overwritten by the solution vector x\&.
.fi
.PP
.br
\fISCALE\fP 
.PP
.nf
          SCALE is REAL
          The scaling factor s for the triangular system
             A * x = s*b  or  A**T* x = s*b\&.
          If SCALE = 0, the matrix A is singular or badly scaled, and
          the vector x is an exact or approximate solution to A*x = 0\&.
.fi
.PP
.br
\fICNORM\fP 
.PP
.nf
          CNORM is REAL array, dimension (N)

          If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
          contains the norm of the off-diagonal part of the j-th column
          of A\&.  If TRANS = 'N', CNORM(j) must be greater than or equal
          to the infinity-norm, and if TRANS = 'T' or 'C', CNORM(j)
          must be greater than or equal to the 1-norm\&.

          If NORMIN = 'N', CNORM is an output argument and CNORM(j)
          returns the 1-norm of the offdiagonal part of the j-th column
          of A\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit
          < 0:  if INFO = -k, the k-th argument had an illegal value
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  A rough bound on x is computed; if that is less than overflow, STRSV
  is called, otherwise, specific code is used which checks for possible
  overflow or divide-by-zero at every operation\&.

  A columnwise scheme is used for solving A*x = b\&.  The basic algorithm
  if A is lower triangular is

       x[1:n] := b[1:n]
       for j = 1, \&.\&.\&., n
            x(j) := x(j) / A(j,j)
            x[j+1:n] := x[j+1:n] - x(j) * A[j+1:n,j]
       end

  Define bounds on the components of x after j iterations of the loop:
     M(j) = bound on x[1:j]
     G(j) = bound on x[j+1:n]
  Initially, let M(0) = 0 and G(0) = max{x(i), i=1,\&.\&.\&.,n}\&.

  Then for iteration j+1 we have
     M(j+1) <= G(j) / | A(j+1,j+1) |
     G(j+1) <= G(j) + M(j+1) * | A[j+2:n,j+1] |
            <= G(j) ( 1 + CNORM(j+1) / | A(j+1,j+1) | )

  where CNORM(j+1) is greater than or equal to the infinity-norm of
  column j+1 of A, not counting the diagonal\&.  Hence

     G(j) <= G(0) product ( 1 + CNORM(i) / | A(i,i) | )
                  1<=i<=j
  and

     |x(j)| <= ( G(0) / |A(j,j)| ) product ( 1 + CNORM(i) / |A(i,i)| )
                                   1<=i< j

  Since |x(j)| <= M(j), we use the Level 2 BLAS routine STRSV if the
  reciprocal of the largest M(j), j=1,\&.\&.,n, is larger than
  max(underflow, 1/overflow)\&.

  The bound on x(j) is also used to determine when a step in the
  columnwise method can be performed without fear of overflow\&.  If
  the computed bound is greater than a large constant, x is scaled to
  prevent overflow, but if the bound overflows, x is set to 0, x(j) to
  1, and scale to 0, and a non-trivial solution to A*x = 0 is found\&.

  Similarly, a row-wise scheme is used to solve A**T*x = b\&.  The basic
  algorithm for A upper triangular is

       for j = 1, \&.\&.\&., n
            x(j) := ( b(j) - A[1:j-1,j]**T * x[1:j-1] ) / A(j,j)
       end

  We simultaneously compute two bounds
       G(j) = bound on ( b(i) - A[1:i-1,i]**T * x[1:i-1] ), 1<=i<=j
       M(j) = bound on x(i), 1<=i<=j

  The initial values are G(0) = 0, M(0) = max{b(i), i=1,\&.\&.,n}, and we
  add the constraint G(j) >= G(j-1) and M(j) >= M(j-1) for j >= 1\&.
  Then the bound on x(j) is

       M(j) <= M(j-1) * ( 1 + CNORM(j) ) / | A(j,j) |

            <= M(0) * product ( ( 1 + CNORM(i) ) / |A(i,i)| )
                      1<=i<=j

  and we can safely call STRSV if 1/M(n) and 1/G(n) are both greater
  than max(underflow, 1/overflow)\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine slauu2 (character UPLO, integer N, real, dimension( lda, * ) A, integer LDA, integer INFO)"

.PP
\fBSLAUU2\fP computes the product UUH or LHL, where U and L are upper or lower triangular matrices (unblocked algorithm)\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAUU2 computes the product U * U**T or L**T * L, where the triangular
 factor U or L is stored in the upper or lower triangular part of
 the array A\&.

 If UPLO = 'U' or 'u' then the upper triangle of the result is stored,
 overwriting the factor U in A\&.
 If UPLO = 'L' or 'l' then the lower triangle of the result is stored,
 overwriting the factor L in A\&.

 This is the unblocked form of the algorithm, calling Level 2 BLAS\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the triangular factor stored in the array A
          is upper or lower triangular:
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the triangular factor U or L\&.  N >= 0\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          On entry, the triangular factor U or L\&.
          On exit, if UPLO = 'U', the upper triangle of A is
          overwritten with the upper triangle of the product U * U**T;
          if UPLO = 'L', the lower triangle of A is overwritten with
          the lower triangle of the product L**T * L\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= max(1,N)\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0: successful exit
          < 0: if INFO = -k, the k-th argument had an illegal value
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine slauum (character UPLO, integer N, real, dimension( lda, * ) A, integer LDA, integer INFO)"

.PP
\fBSLAUUM\fP computes the product UUH or LHL, where U and L are upper or lower triangular matrices (blocked algorithm)\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SLAUUM computes the product U * U**T or L**T * L, where the triangular
 factor U or L is stored in the upper or lower triangular part of
 the array A\&.

 If UPLO = 'U' or 'u' then the upper triangle of the result is stored,
 overwriting the factor U in A\&.
 If UPLO = 'L' or 'l' then the lower triangle of the result is stored,
 overwriting the factor L in A\&.

 This is the blocked form of the algorithm, calling Level 3 BLAS\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIUPLO\fP 
.PP
.nf
          UPLO is CHARACTER*1
          Specifies whether the triangular factor stored in the array A
          is upper or lower triangular:
          = 'U':  Upper triangular
          = 'L':  Lower triangular
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the triangular factor U or L\&.  N >= 0\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension (LDA,N)
          On entry, the triangular factor U or L\&.
          On exit, if UPLO = 'U', the upper triangle of A is
          overwritten with the upper triangle of the product U * U**T;
          if UPLO = 'L', the lower triangle of A is overwritten with
          the lower triangle of the product L**T * L\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.  LDA >= max(1,N)\&.
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0: successful exit
          < 0: if INFO = -k, the k-th argument had an illegal value
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine srscl (integer N, real SA, real, dimension( * ) SX, integer INCX)"

.PP
\fBSRSCL\fP multiplies a vector by the reciprocal of a real scalar\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 SRSCL multiplies an n-element real vector x by the real scalar 1/a\&.
 This is done without overflow or underflow as long as
 the final result x/a does not overflow or underflow\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of components of the vector x\&.
.fi
.PP
.br
\fISA\fP 
.PP
.nf
          SA is REAL
          The scalar a which is used to divide each component of x\&.
          SA must be >= 0, or the subroutine will divide by zero\&.
.fi
.PP
.br
\fISX\fP 
.PP
.nf
          SX is REAL array, dimension
                         (1+(N-1)*abs(INCX))
          The n-element vector x\&.
.fi
.PP
.br
\fIINCX\fP 
.PP
.nf
          INCX is INTEGER
          The increment between successive values of the vector SX\&.
          > 0:  SX(1) = X(1) and SX(1+(i-1)*INCX) = x(i),     1< i<= n
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine stprfb (character SIDE, character TRANS, character DIRECT, character STOREV, integer M, integer N, integer K, integer L, real, dimension( ldv, * ) V, integer LDV, real, dimension( ldt, * ) T, integer LDT, real, dimension( lda, * ) A, integer LDA, real, dimension( ldb, * ) B, integer LDB, real, dimension( ldwork, * ) WORK, integer LDWORK)"

.PP
\fBSTPRFB\fP applies a real 'triangular-pentagonal' block reflector to a real matrix, which is composed of two blocks\&.  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 STPRFB applies a real 'triangular-pentagonal' block reflector H or its
 transpose H**T to a real matrix C, which is composed of two
 blocks A and B, either from the left or right\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'L': apply H or H**T from the Left
          = 'R': apply H or H**T from the Right
.fi
.PP
.br
\fITRANS\fP 
.PP
.nf
          TRANS is CHARACTER*1
          = 'N': apply H (No transpose)
          = 'T': apply H**T (Transpose)
.fi
.PP
.br
\fIDIRECT\fP 
.PP
.nf
          DIRECT is CHARACTER*1
          Indicates how H is formed from a product of elementary
          reflectors
          = 'F': H = H(1) H(2) \&. \&. \&. H(k) (Forward)
          = 'B': H = H(k) \&. \&. \&. H(2) H(1) (Backward)
.fi
.PP
.br
\fISTOREV\fP 
.PP
.nf
          STOREV is CHARACTER*1
          Indicates how the vectors which define the elementary
          reflectors are stored:
          = 'C': Columns
          = 'R': Rows
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of rows of the matrix B\&.
          M >= 0\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The number of columns of the matrix B\&.
          N >= 0\&.
.fi
.PP
.br
\fIK\fP 
.PP
.nf
          K is INTEGER
          The order of the matrix T, i\&.e\&. the number of elementary
          reflectors whose product defines the block reflector\&.
          K >= 0\&.
.fi
.PP
.br
\fIL\fP 
.PP
.nf
          L is INTEGER
          The order of the trapezoidal part of V\&.
          K >= L >= 0\&.  See Further Details\&.
.fi
.PP
.br
\fIV\fP 
.PP
.nf
          V is REAL array, dimension
                                (LDV,K) if STOREV = 'C'
                                (LDV,M) if STOREV = 'R' and SIDE = 'L'
                                (LDV,N) if STOREV = 'R' and SIDE = 'R'
          The pentagonal matrix V, which contains the elementary reflectors
          H(1), H(2), \&.\&.\&., H(K)\&.  See Further Details\&.
.fi
.PP
.br
\fILDV\fP 
.PP
.nf
          LDV is INTEGER
          The leading dimension of the array V\&.
          If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
          if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
          if STOREV = 'R', LDV >= K\&.
.fi
.PP
.br
\fIT\fP 
.PP
.nf
          T is REAL array, dimension (LDT,K)
          The triangular K-by-K matrix T in the representation of the
          block reflector\&.
.fi
.PP
.br
\fILDT\fP 
.PP
.nf
          LDT is INTEGER
          The leading dimension of the array T\&.
          LDT >= K\&.
.fi
.PP
.br
\fIA\fP 
.PP
.nf
          A is REAL array, dimension
          (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'
          On entry, the K-by-N or M-by-K matrix A\&.
          On exit, A is overwritten by the corresponding block of
          H*C or H**T*C or C*H or C*H**T\&.  See Further Details\&.
.fi
.PP
.br
\fILDA\fP 
.PP
.nf
          LDA is INTEGER
          The leading dimension of the array A\&.
          If SIDE = 'L', LDA >= max(1,K);
          If SIDE = 'R', LDA >= max(1,M)\&.
.fi
.PP
.br
\fIB\fP 
.PP
.nf
          B is REAL array, dimension (LDB,N)
          On entry, the M-by-N matrix B\&.
          On exit, B is overwritten by the corresponding block of
          H*C or H**T*C or C*H or C*H**T\&.  See Further Details\&.
.fi
.PP
.br
\fILDB\fP 
.PP
.nf
          LDB is INTEGER
          The leading dimension of the array B\&.
          LDB >= max(1,M)\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension
          (LDWORK,N) if SIDE = 'L',
          (LDWORK,K) if SIDE = 'R'\&.
.fi
.PP
.br
\fILDWORK\fP 
.PP
.nf
          LDWORK is INTEGER
          The leading dimension of the array WORK\&.
          If SIDE = 'L', LDWORK >= K;
          if SIDE = 'R', LDWORK >= M\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  The matrix C is a composite matrix formed from blocks A and B\&.
  The block B is of size M-by-N; if SIDE = 'R', A is of size M-by-K,
  and if SIDE = 'L', A is of size K-by-N\&.

  If SIDE = 'R' and DIRECT = 'F', C = [A B]\&.

  If SIDE = 'L' and DIRECT = 'F', C = [A]
                                      [B]\&.

  If SIDE = 'R' and DIRECT = 'B', C = [B A]\&.

  If SIDE = 'L' and DIRECT = 'B', C = [B]
                                      [A]\&.

  The pentagonal matrix V is composed of a rectangular block V1 and a
  trapezoidal block V2\&.  The size of the trapezoidal block is determined by
  the parameter L, where 0<=L<=K\&.  If L=K, the V2 block of V is triangular;
  if L=0, there is no trapezoidal block, thus V = V1 is rectangular\&.

  If DIRECT = 'F' and STOREV = 'C':  V = [V1]
                                         [V2]
     - V2 is upper trapezoidal (first L rows of K-by-K upper triangular)

  If DIRECT = 'F' and STOREV = 'R':  V = [V1 V2]

     - V2 is lower trapezoidal (first L columns of K-by-K lower triangular)

  If DIRECT = 'B' and STOREV = 'C':  V = [V2]
                                         [V1]
     - V2 is lower trapezoidal (last L rows of K-by-K lower triangular)

  If DIRECT = 'B' and STOREV = 'R':  V = [V2 V1]

     - V2 is upper trapezoidal (last L columns of K-by-K upper triangular)

  If STOREV = 'C' and SIDE = 'L', V is M-by-K with V2 L-by-K\&.

  If STOREV = 'C' and SIDE = 'R', V is N-by-K with V2 L-by-K\&.

  If STOREV = 'R' and SIDE = 'L', V is K-by-M with V2 K-by-L\&.

  If STOREV = 'R' and SIDE = 'R', V is K-by-N with V2 K-by-L\&.
.fi
.PP
 
.RE
.PP

.SH "Author"
.PP 
Generated automatically by Doxygen for LAPACK from the source code\&.