# cnbfa.f

          SUBROUTINE CNBFA (ABE, LDA, N, ML, MU, IPVT, INFO)
    C***BEGIN PROLOGUE  CNBFA
    C***PURPOSE  Factor a band matrix by elimination.
    C***LIBRARY   SLATEC
    C***CATEGORY  D2C2
    C***TYPE      COMPLEX (SNBFA-S, DNBFA-D, CNBFA-C)
    C***KEYWORDS  BANDED, LINEAR EQUATIONS, MATRIX FACTORIZATION,
    C             NONSYMMETRIC
    C***AUTHOR  Voorhees, E. A., (LANL)
    C***DESCRIPTION
    C
    C    CNBFA factors a complex band matrix by elimination.
    C
    C     CNBFA is usually called by CNBCO, but it can be called
    C     directly with a saving in time if RCOND is not needed.
    C
    C     On Entry
    C
    C        ABE     COMPLEX(LDA, NC)
    C                contains the matrix in band storage.  The rows
    C                of the original matrix are stored in the rows
    C                of ABE and the diagonals of the original matrix
    C                are stored in columns 1 through ML+MU+1 of ABE.
    C                NC must be .GE. 2*ML+MU+1 .
    C                See the comments below for details.
    C
    C        LDA     INTEGER
    C                the leading dimension of the array ABE.
    C                LDA must be .GE. N .
    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        ABE     an upper triangular matrix in band storage
    C                and 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        INFO    INTEGER
    C                =0  normal value
    C                =K  if  U(K,K) .EQ. 0.0 .  This is not an error
    C                condition for this subroutine, but it does
    C                indicate that CNBSL will divide by zero if
    C                called.  Use RCOND in CNBCO for a reliable
    C                indication of singularity.
    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                   DO 20 I = 1, N
    C                      J1 = MAX(1, I-ML)
    C                      J2 = MIN(N, I+MU)
    C                      DO 10 J = J1, J2
    C                         K = J - I + ML + 1
    C                         ABE(I,K) = A(I,J)
    C                10    CONTINUE
    C                20 CONTINUE
    C
    C           This uses columns  1  through  ML+MU+1  of ABE .
    C           Furthermore,  ML  additional columns are needed in
    C           ABE  starting with column  ML+MU+2  for elements
    C           generated during the triangularization.  The total
    C           number of columns needed in  ABE  is  2*ML+MU+1 .
    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 ABE should contain
    C
    C            * 11 12 13  +     , * = not used
    C           21 22 23 24  +     , + = used for pivoting
    C           32 33 34 35  +
    C           43 44 45 46  +
    C           54 55 56  *  +
    C           65 66  *  *  +
    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  CAXPY, CSCAL, CSWAP, ICAMAX
    C***REVISION HISTORY  (YYMMDD)
    C   800730  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   920501  Reformatted the REFERENCES section.  (WRB)
    C***END PROLOGUE  CNBFA