Routine: SDBTF2()  File: SRC\sdbtf2.f

 
 
# lines: 174
  # code: 174
  # comment: 0
  # blank:0
# Variables:14
# Callers:0
# Callings:0
# Words:51
# Keywords:30
 

 

..
     .. Array Arguments ..
     ..
  Purpose
  =======
  Sdbtrf 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) REAL               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 SDBTF2( 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  *     ..
015  *     .. Local Scalars ..
016        INTEGER J , JP , JU , KM , KV
017  *     ..
018  *     .. External Functions ..
019        INTEGER ISAMAX
020        EXTERNAL ISAMAX
021  *     ..
022  *     .. External Subroutines ..
023        EXTERNAL SGER , SSCAL , SSWAP
024  *     ..
025  *     .. Intrinsic Functions ..
026        INTRINSIC MAX , MIN
027  *     ..
028  *     .. Executable Statements ..
029  
030  *     KV is the number of superdiagonals in the factor U , allowing for
031  *     fill - in.
032  
033        KV = KU
034  
035  *     Test the input parameters.
036  
037        INFO = 0
038  *     ECA  IF( M.LT.0 ) THEN
039  *     ECA     INFO = - 1
040  *     ECA  ELSE IF( N.LT.0 ) THEN
041  *     ECA     INFO = - 2
042  *     ECA  ELSE IF( KL.LT.0 ) THEN
043  *     ECA     INFO = - 3
044  *     ECA  ELSE IF( KU.LT.0 ) THEN
045  *     ECA     INFO = - 4
046  *     ECA  ELSE IF( LDAB.LT.KL + KV + 1 ) THEN
047  *     ECA     INFO = - 6
048  *     ECA  END IF
049  *     ECA  IF( INFO.NE.0 ) THEN
050  *     ECA     CALL XERBLA( 'SDBTF2' , - INFO )
051  *     ECA     RETURN
052  *     ECA  END IF
053  
054  *     Quick return if possible
055  
056        IF( M.EQ.0 .OR. N.EQ.0 )
057       $    RETURN
058  
059  *         Gaussian elimination without partial pivoting
060  
061  *         JU is the index of the last column affected by the current stage
062  *         of the factorization.
063  
064            JU = 1
065  
066            DO 40 J = 1 , MIN( M , N )
067  
068  *             Test for singularity. KM is the number of
069  *             subdiagonal elements in the current column.
070  
071                KM = MIN( KL , M - J )
072                JP = 1
073                IF( AB( KV + 1 , J ).NE.ZERO ) THEN
074                    JU = MAX( JU , MIN( J + KU , N ) )
075  
076                    IF( KM.GT.0 ) THEN
077  
078  *                     Compute multipliers.
079  
080                        CALL SSCAL( KM , ONE / AB( KU + 1 , J ) , AB( KU + 2 , J ) , 1 )
081  
082  *                     Update trailing submatrix within the band.
083  
084                        IF( JU.GT.J ) THEN
085                            CALL SGER( KM , JU - J , - ONE , AB( KU + 2 , J ) , 1 ,
086       $                    AB( KU , J + 1 ) , LDAB - 1 , AB( KU + 1 , J + 1 ) ,
087       $                    LDAB - 1 )
088                        END IF
089                    END IF
090                ELSE
091  
092                    IF( INFO.EQ.0 )
093       $                INFO = J
094                    END IF
095     40     CONTINUE
096            RETURN
097  
098  *         End of SDBTF2
099  
100        END