|
|
| |
| # lines: |
174 | | # code: |
174 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 14 |
| # Callers: | 0 |
| # Callings: | 0 |
| # Words: | 52 |
| # Keywords: | 30 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
Ddbtrf 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) DOUBLE PRECISION 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 ..
|
|
|
|
001 SUBROUTINE DDBTF2( 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 DOUBLE PRECISION ONE , ZERO
012 PARAMETER( ONE = 1.0D + 0 )
013 PARAMETER( ZERO = 0.0D + 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 DGER , DSCAL , DSWAP
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( 'DDBTF2' , - INFO )
051 * ECA RETURN
052 * ECA END IF
053
054 * Quick return if possible
055
056 IF( M.EQ.0 .OR. N.EQ.0 )
056
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
070
071 KM = MIN( KL , M - J )
072 JP = 1
073 IF( AB( KV + 1 , J ).NE.ZERO ) THEN
073
074 JU = MAX( JU , MIN( J + KU , N ) )
075
076 IF( KM.GT.0 ) THEN
077
078 * Compute multipliers.
079
079
080 CALL DSCAL( 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
084
085 CALL DGER( 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
091
092 IF( INFO.EQ.0 )
092
093 $ INFO = J
094 END IF
095 40 CONTINUE
095
096 RETURN
097
098 * End of DDBTF2
099
100 END22
8
|
|
Variables in Routine DDBTF2()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| DOUBLE PRECISION | 2 | 8 |
| INTEGER | 12 | 48 |
| TOTAL | 14 | 56 |
List of Variables
DOUBLE PRECISION
INTEGER
| INFO | ISAMAX | J | JP | JU |
| KL | KM | KU | KV | LDAB |
| M | N | | | |
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | J | <--- | MDO 40 J = 1, MIN( M, N ), NDO 40 J = 1, MIN( M, N ) |
| JU | <--- | NJU = MAX( JU, MIN( J+KU, N ) ), JJU = MAX( JU, MIN( J+KU, N ) ), JUJU = MAX( JU, MIN( J+KU, N ) ), KUJU = MAX( JU, MIN( J+KU, N ) ) |
| KM | <--- | MKM = MIN( KL, M-J ), JKM = MIN( KL, M-J ), KLKM = MIN( KL, M-J ) |
| KV | <--- | KUKV = KU |
|
|
Analysis elements of the routine DDBTF2() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | INFO , J , JP , JU , KM , KV , ONE , ZERO |
|
Active variables |
| | | AB , INFO , ISAMAX , J , JP , JU , KL , KM , KU , KV , LDAB , M , N , ONE , ZERO |
|
Accessed arrays [ array name : associated index ] |
| | AB | : KU, J+1 , KU+1, J , KU+1, J+1 , KU+2, J , KU+2, J , KV+1, J |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 40 J = 1 , MIN( M , N ) ) |
| | for | : ( singularity. KM is the number of ) |
| | if | : ( M.LT.0 ) , ( N.LT.0 ) , ( KL.LT.0 ) , ( KU.LT.0 ) , ( LDAB.LT.KL + KV + 1 ) , ( INFO.NE.0 ) , ( possible ) , ( M.EQ.0 .OR. N.EQ.0 ) , ( (AB( KV + 1 , J ).NE.ZERO ) ) , ( KM.GT.0 ) , ( JU.GT.J ) , ( INFO.EQ.0 ) |
|
| List of variables | INFO ISAMAX J JP JU KL KM
| KU KV LDAB M N ONE ZERO | | close
| |
INFO
ISAMAX
J
JP
JU
KL
KM
KU
KV
LDAB
M
N
ONE
ZERO
| |