# sgbco.f

          SUBROUTINE SGBCO (ABD, LDA, N, ML, MU, IPVT, RCOND, Z)
    C***BEGIN PROLOGUE  SGBCO
    C***PURPOSE  Factor a band matrix by Gaussian elimination and
    C            estimate the condition number of the matrix.
    C***LIBRARY   SLATEC (LINPACK)
    C***CATEGORY  D2A2
    C***TYPE      SINGLE PRECISION (SGBCO-S, DGBCO-D, CGBCO-C)
    C***KEYWORDS  BANDED, CONDITION NUMBER, LINEAR ALGEBRA, LINPACK,
    C             MATRIX FACTORIZATION
    C***AUTHOR  Moler, C. B., (U. of New Mexico)
    C***DESCRIPTION
    C
    C     SBGCO factors a real band matrix by Gaussian
    C     elimination and estimates the condition of the matrix.
    C
    C     If  RCOND  is not needed, SGBFA is slightly faster.
    C     To solve  A*X = B , follow SBGCO by SGBSL.
    C     To compute  INVERSE(A)*C , follow SBGCO by SGBSL.
    C     To compute  DETERMINANT(A) , follow SBGCO by SGBDI.
    C
    C     On Entry
    C
    C        ABD     REAL(LDA, N)
    C                contains the matrix in band storage.  The columns
    C                of the matrix are stored in the columns of  ABD  and
    C                the diagonals of the matrix are stored in rows
    C                ML+1 through 2*ML+MU+1 of  ABD .
    C                See the comments below for details.
    C
    C        LDA     INTEGER
    C                the leading dimension of the array  ABD .
    C                LDA must be .GE. 2*ML + MU + 1 .
    C
    C        N       INTEGER
    C                the order of the original matrix.
    C
    C        ML      INTEGER
    C                number of diagonals below the main diagonal.
    C                0 .LE. ML .LT. N .
    C
    C        MU      INTEGER
    C                number of diagonals above the main diagonal.
    C                0 .LE. MU .LT. N .
    C                More efficient if  ML .LE. MU .
    C
    C     On Return
    C
    C        ABD     an upper triangular matrix in band storage and
    C                the multipliers which were used to obtain it.
    C                The factorization can be written  A = L*U  where
    C                L  is a product of permutation and unit lower
    C                triangular matrices and  U  is upper triangular.
    C
    C        IPVT    INTEGER(N)
    C                an integer vector of pivot indices.
    C
    C        RCOND   REAL
    C                an estimate of the reciprocal condition of  A .
    C                For the system  A*X = B , relative perturbations
    C                in  A  and  B  of size  EPSILON  may cause
    C                relative perturbations in  X  of size  EPSILON/RCOND .
    C                If  RCOND  is so small that the logical expression
    C                           1.0 + RCOND .EQ. 1.0
    C                is true, then  A  may be singular to working
    C                precision.  In particular,  RCOND  is zero  if
    C                exact singularity is detected or the estimate
    C                underflows.
    C
    C        Z       REAL(N)
    C                a work vector whose contents are usually unimportant.
    C                If  A  is close to a singular matrix, then  Z  is
    C                an approximate null vector in the sense that
    C                NORM(A*Z) = RCOND*NORM(A)*NORM(Z) .
    C
    C     Band Storage
    C
    C           If  A  is a band matrix, the following program segment
    C           will set up the input.
    C
    C                   ML = (band width below the diagonal)
    C                   MU = (band width above the diagonal)
    C                   M = ML + MU + 1
    C                   DO 20 J = 1, N
    C                      I1 = MAX(1, J-MU)
    C                      I2 = MIN(N, J+ML)
    C                      DO 10 I = I1, I2
    C                         K = I - J + M
    C                         ABD(K,J) = A(I,J)
    C                10    CONTINUE
    C                20 CONTINUE
    C
    C           This uses rows  ML+1  through  2*ML+MU+1  of  ABD .
    C           In addition, the first  ML  rows in  ABD  are used for
    C           elements generated during the triangularization.
    C           The total number of rows needed in  ABD  is  2*ML+MU+1 .
    C           The  ML+MU by ML+MU  upper left triangle and the
    C           ML by ML  lower right triangle are not referenced.
    C
    C     Example:  If the original matrix is
    C
    C           11 12 13  0  0  0
    C           21 22 23 24  0  0
    C            0 32 33 34 35  0
    C            0  0 43 44 45 46
    C            0  0  0 54 55 56
    C            0  0  0  0 65 66
    C
    C      then  N = 6, ML = 1, MU = 2, LDA .GE. 5  and ABD should contain
    C
    C            *  *  *  +  +  +  , * = not used
    C            *  * 13 24 35 46  , + = used for pivoting
    C            * 12 23 34 45 56
    C           11 22 33 44 55 66
    C           21 32 43 54 65  *
    C
    C***REFERENCES  J. J. Dongarra, J. R. Bunch, C. B. Moler, and G. W.
    C                 Stewart, LINPACK Users' Guide, SIAM, 1979.
    C***ROUTINES CALLED  SASUM, SAXPY, SDOT, SGBFA, SSCAL
    C***REVISION HISTORY  (YYMMDD)
    C   780814  DATE WRITTEN
    C   890531  Changed all specific intrinsics to generic.  (WRB)
    C   890831  Modified array declarations.  (WRB)
    C   890831  REVISION DATE from Version 3.2
    C   891214  Prologue converted to Version 4.0 format.  (BAB)
    C   900326  Removed duplicate information from DESCRIPTION section.
    C           (WRB)
    C   920501  Reformatted the REFERENCES section.  (WRB)
    C***END PROLOGUE  SGBCO