Routine: CDBTF2()  File: SRC\cdbtf2.f

 
 
# lines: 177
  # code: 177
  # comment: 0
  # blank:0
# Variables:16
# Callers:0
# Callings:0
# Words:54
# Keywords:31
 

 

..
     .. Array Arguments ..
     ..
  Purpose
  =======
  Cdbtrf computes an LU factorization of a real m-by-n band matrix A
  without using partial pivoting with row interchanges.
  This is the unblocked version of the algorithm, calling Level 2 BLAS.
  Arguments
  =========
  M       (input) INTEGER
          The number of rows of the matrix A.  M >= 0.
  N       (input) INTEGER
          The number of columns of the matrix A.  N >= 0.
  KL      (input) INTEGER
          The number of subdiagonals within the band of A.  KL >= 0.
  KU      (input) INTEGER
          The number of superdiagonals within the band of A.  KU >= 0.
  AB      (input/output) COMPLEX            array, dimension (LDAB,N)
          On entry, the matrix A in band storage, in rows KL+1 to
          2*KL+KU+1; rows 1 to KL of the array need not be set.
          The j-th column of A is stored in the j-th column of the
          array AB as follows:
          AB(kl+ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl)
          On exit, details of the factorization: U is stored as an
          upper triangular band matrix with KL+KU superdiagonals in
          rows 1 to KL+KU+1, and the multipliers used during the
          factorization are stored in rows KL+KU+2 to 2*KL+KU+1.
          See below for further details.
  LDAB    (input) INTEGER
          The leading dimension of the array AB.  LDAB >= 2*KL+KU+1.
  INFO    (output) INTEGER
          = 0: successful exit
          < 0: if INFO = -i, the i-th argument had an illegal value
          > 0: if INFO = +i, U(i,i) is exactly zero. The factorization
               has been completed, but the factor U is exactly
               singular, and division by zero will occur if it is used
               to solve a system of equations.
  Further Details
  ===============
  The band storage scheme is illustrated by the following example, when
  M = N = 6, KL = 2, KU = 1:
  On entry:                       On exit:
      *   a12  a23  a34  a45  a56      *   u12  u23  u34  u45  u56
     a11  a22  a33  a44  a55  a66     u11  u22  u33  u44  u55  u66
     a21  a32  a43  a54  a65   *      m21  m32  m43  m54  m65   *
     a31  a42  a53  a64   *    *      m31  m42  m53  m64   *    *
  Array elements marked * are not used by the routine; elements marked
  + need not be set on entry, but are required by the routine to store
  elements of U, because of fill-in resulting from the row
  interchanges.
  =====================================================================
     .. Parameters ..

 
Display dynamic version Find AutoScroll Reload FontSize: - + Hide Comments Hide Blanks Frame FullScreen MailPrint

 
001        SUBROUTINE CDBTF2( M , N , KL , KU , AB , LDAB , INFO )
002  
003  *     Modified by Andrew J. Cleary in November , 96 from :
004  *     -- LAPACK auxiliary routine(preliminary version) --
005  *     Univ. of Tennessee , Univ. of California Berkeley , NAG Ltd. ,
006  *     Courant Institute , Argonne National Lab , and Rice University
007  *     August 6 , 1991
008  
009  *     .. Scalar Arguments ..
010        INTEGER INFO , KL , KU , LDAB , M , N
011        REAL ONE , ZERO
012        PARAMETER( ONE = 1.0E + 0 )
013        PARAMETER( ZERO = 0.0E + 0 )
014        COMPLEX CONE , CZERO
015        PARAMETER( CONE =( 1.0E + 0 , 0.0E + 0 ) )
016        PARAMETER( CZERO =( 0.0E + 0 , 0.0E + 0 ) )
017  *     ..
018  *     .. Local Scalars ..
019        INTEGER J , JP , JU , KM , KV
020  *     ..
021  *     .. External Functions ..
022        INTEGER ISAMAX
023        EXTERNAL ISAMAX
024  *     ..
025  *     .. External Subroutines ..
026        EXTERNAL CGERU , CSCAL , CSWAP
027  *     ..
028  *     .. Intrinsic Functions ..
029        INTRINSIC MAX , MIN
030  *     ..
031  *     .. Executable Statements ..
032  
033  *     KV is the number of superdiagonals in the factor U , allowing for
034  *     fill - in.
035  
036        KV = KU
037  
038  *     Test the input parameters.
039  
040        INFO = 0
041  *     ECA  IF( M.LT.0 ) THEN
042  *     ECA     INFO = - 1
043  *     ECA  ELSE IF( N.LT.0 ) THEN
044  *     ECA     INFO = - 2
045  *     ECA  ELSE IF( KL.LT.0 ) THEN
046  *     ECA     INFO = - 3
047  *     ECA  ELSE IF( KU.LT.0 ) THEN
048  *     ECA     INFO = - 4
049  *     ECA  ELSE IF( LDAB.LT.KL + KV + 1 ) THEN
050  *     ECA     INFO = - 6
051  *     ECA  END IF
052  *     ECA  IF( INFO.NE.0 ) THEN
053  *     ECA     CALL XERBLA( 'CDBTF2' , - INFO )
054  *     ECA     RETURN
055  *     ECA  END IF
056  
057  *     Quick return if possible
058  
059        IF( M.EQ.0 .OR. N.EQ.0 )
060       $    RETURN
061  
062  *         Gaussian elimination without partial pivoting
063  
064  *         JU is the index of the last column affected by the current stage
065  *         of the factorization.
066  
067            JU = 1
068  
069            DO 40 J = 1 , MIN( M , N )
070  
071  *             Test for singularity. KM is the number of
072  *             subdiagonal elements in the current column.
073  
074                KM = MIN( KL , M - J )
075                JP = 1
076                IF( AB( KV + 1 , J ).NE.ZERO ) THEN
077                    JU = MAX( JU , MIN( J + KU , N ) )
078  
079                    IF( KM.GT.0 ) THEN
080  
081  *                     Compute multipliers.
082  
083                        CALL CSCAL( KM , ONE / AB( KU + 1 , J ) , AB( KU + 2 , J ) , 1 )
084  
085  *                     Update trailing submatrix within the band.
086  
087                        IF( JU.GT.J ) THEN
088                            CALL CGERU( KM , JU - J , - CONE , AB( KU + 2 , J ) , 1 ,
089       $                    AB( KU , J + 1 ) , LDAB - 1 , AB( KU + 1 , J + 1 ) ,
090       $                    LDAB - 1 )
091                        END IF
092                    END IF
093                ELSE
094  
095                    IF( INFO.EQ.0 )
096       $                INFO = J
097                    END IF
098     40     CONTINUE
099            RETURN
100  
101  *         End of CDBTF2
102  
103        END