|
|
| |
| # lines: |
174 | | # code: |
174 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 12 |
| # Callers: | 1 |
| # Callings: | 0 |
| # Words: | 89 |
| # Keywords: | 66 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
DDTTRSV solves one of the systems of equations
L * X = B, L**T * X = B, or L**H * X = B,
U * X = B, U**T * X = B, or U**H * X = B,
with factors of the tridiagonal matrix A from the LU factorization
computed by DDTTRF.
Arguments
=========
UPLO (input) CHARACTER*1
Specifies whether to solve with L or U.
TRANS (input) CHARACTER
Specifies the form of the system of equations:
= 'N': A * X = B (No transpose)
= 'T': A**T * X = B (Transpose)
= 'C': A**H * X = B (Conjugate transpose)
N (input) INTEGER
The order of the matrix A. N >= 0.
NRHS (input) INTEGER
The number of right hand sides, i.e., the number of columns
of the matrix B. NRHS >= 0.
DL (input) COMPLEX array, dimension (N-1)
The (n-1) multipliers that define the matrix L from the
LU factorization of A.
D (input) COMPLEX array, dimension (N)
The n diagonal elements of the upper triangular matrix U from
the LU factorization of A.
DU (input) COMPLEX array, dimension (N-1)
The (n-1) elements of the first superdiagonal of U.
B (input/output) COMPLEX array, dimension (LDB,NRHS)
On entry, the right hand side matrix B.
On exit, B is overwritten by the solution matrix X.
LDB (input) INTEGER
The leading dimension of the array B. LDB >= max(1,N).
INFO (output) INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
=====================================================================
.. Local Scalars ..
|
|
|
|
001 SUBROUTINE DDTTRSV( UPLO , TRANS , N , NRHS , DL , D , DU ,
002 $B , LDB , INFO )
003
004 * Written by Andrew J. Cleary , University of Tennessee.
005 * August , 1996.
006 * Modified from DGTTRS :
007 * -- LAPACK routine(preliminary version) --
008 * Univ. of Tennessee , Univ. of California Berkeley , NAG Ltd. ,
009 * Courant Institute , Argonne National Lab , and Rice University
010
011 * .. Scalar Arguments ..
012 CHARACTER UPLO , TRANS
013 INTEGER INFO , LDB , N , NRHS
014 LOGICAL LOWER , NOTRAN
015 INTEGER I , J
016 * ..
017 * .. External Functions ..
018 LOGICAL LSAME
019 EXTERNAL LSAME
020 * ..
021 * .. External Subroutines ..
022 EXTERNAL XERBLA
023 * ..
024 * .. Intrinsic Functions ..
025 INTRINSIC CONJG , MAX
026 * ..
027 * .. Executable Statements ..
028
029 INFO = 0
030 NOTRAN = LSAME( TRANS , 'N' )
031 LOWER = LSAME( UPLO , 'L' )
032 IF( .NOT.LOWER .AND. .NOT.LSAME( UPLO , 'U' ) ) THEN
032
033 INFO = - 1
034 ELSE IF( .NOT.NOTRAN .AND. .NOT.LSAME( TRANS , 'T' ) .AND. .NOT.
034
035 $ LSAME( TRANS , 'C' ) ) THEN
036 INFO = - 2
037 ELSE IF( N.LT.0 ) THEN
037
038 INFO = - 3
039 ELSE IF( NRHS.LT.0 ) THEN
039
040 INFO = - 4
041 ELSE IF( LDB.LT.MAX( N , 1 ) ) THEN
041
042 INFO = - 9
043 END IF
044 IF( INFO.NE.0 ) THEN
044
045 CALL XERBLA( 'DDTTRSV' , - INFO )
046 RETURN
047 END IF
048
049 * Quick return if possible
050
051 IF( N.EQ.0 .OR. NRHS.EQ.0 )
051
052 $ RETURN
053
054 IF( NOTRAN ) THEN
055
055
056 IF( LOWER ) THEN
057 * Solve L*X = B , overwriting B with X.
058
058
059 DO 35 J = 1 , NRHS
060
061 * Solve L*x = b.
062
062
063 DO 10 I = 1 , N - 1
063
064 B( I + 1 , J ) = B( I + 1 , J ) - DL( I )*B( I , J )
065 10 CONTINUE
066 35 CONTINUE
067
067
068 ELSE
069 * Solve U*x = b.
070
070
071 DO 30 J = 1 , NRHS
071
072 B( N , J ) = B( N , J ) / D( N )
073 IF( N.GT.1 )
073
074 $ B( N - 1 , J ) =( B( N - 1 , J ) - DU( N - 1 )*B( N , J ) ) /
075 $ D( N - 1 )
076 DO 20 I = N - 2 , 1 , - 1
076
077 B( I , J ) =( B( I , J ) - DU( I )*B( I + 1 , J ) ) / D( I )
078 20 CONTINUE
079 30 CONTINUE
080
080
081 ENDIF
082
083 ELSE
084
084
085 IF( .NOT. LOWER ) THEN
086 * Solve U**T * X = B , overwriting B with X.
087
087
088 DO 65 J = 1 , NRHS
089
090 * Solve U**T * x = b.
091
091
092 B( 1 , J ) = B( 1 , J ) / D( 1 )
093 IF( N.GT.1 )
093
094 $ B( 2 , J ) =( B( 2 , J ) - DU( 1 )*B( 1 , J ) ) / D( 2 )
095 DO 40 I = 3 , N
095
096 B( I , J ) =( B( I , J ) - DU( I - 1 )*B( I - 1 , J ) ) / D( I )
097 40 CONTINUE
098 65 CONTINUE
099
099
100 ELSE
101
102 * Solve L**T * X = B , overwriting B with X.
102
103 DO 60 J = 1 , NRHS
104
105 * Solve L**T * x = b.
106
106
107 DO 50 I = N - 1 , 1 , - 1
107
108 B( I , J ) = B( I , J ) - DL( I )*B( I + 1 , J )
109 50 CONTINUE
110 60 CONTINUE
110
111 ENDIF
112 END IF
113
114 * End of DDTTRSV
115
116 END24
27
|
|
Variables in Routine DDTTRSV()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| CHARACTER | 2 | 2 |
| INTEGER | 6 | 24 |
| LOGICAL | 3 | 3 |
| REAL | 1 | 4 |
| TOTAL | 12 | 33 |
List of Variables
CHARACTER
INTEGER
LOGICAL
REAL
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | B | <--- | BB( I, J ) = B( I, J ) - DL( I )*B( I+1, J ){2B( I+1, J ) = B( I+1, J ) - DL( I )*B( I, J ), 3B( N, J ) = B( N, J ) / D( N ), 4B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J ) ) / D( I ), 5B( 1, J ) = B( 1, J ) / D( 1 ), 6B( I, J ) = ( B( I, J )-DU( I-1 )*B( I-1, J ) ) / D( I )}, IB( I, J ) = B( I, J ) - DL( I )*B( I+1, J ){2B( I+1, J ) = B( I+1, J ) - DL( I )*B( I, J ), 3B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J ) ) / D( I ), 4B( I, J ) = ( B( I, J )-DU( I-1 )*B( I-1, J ) ) / D( I )}, JB( I, J ) = B( I, J ) - DL( I )*B( I+1, J ){2B( I+1, J ) = B( I+1, J ) - DL( I )*B( I, J ), 3B( N, J ) = B( N, J ) / D( N ), 4B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J ) ) / D( I ), 5B( 1, J ) = B( 1, J ) / D( 1 ), 6B( I, J ) = ( B( I, J )-DU( I-1 )*B( I-1, J ) ) / D( I )}, NB( N, J ) = B( N, J ) / D( N ) |
| I | <--- | NDO 50 I = N - 1, 1, -1{2DO 10 I = 1, N - 1, 3DO 20 I = N - 2, 1, -1, 4DO 40 I = 3, N} |
| J | <--- | NRHSDO 60 J = 1, NRHS{2DO 35 J = 1, NRHS, 3DO 30 J = 1, NRHS, 4DO 65 J = 1, NRHS} |
| LOWER | <--- | UPLOLOWER = LSAME( UPLO, 'L' ), LSAMELOWER = LSAME( UPLO, 'L' ) |
| NOTRAN | <--- | TRANSNOTRAN = LSAME( TRANS, 'N' ), LSAMENOTRAN = LSAME( TRANS, 'N' ), NNOTRAN = LSAME( TRANS, 'N' ) |
|
|
Analysis elements of the routine DDTTRSV() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | I , INFO , J , LOWER , NOTRAN |
|
Active variables |
| | | B , D , DL , DU , I , INFO , J , LDB , LOWER , LSAME , N , NOTRAN , NRHS , TRANS , UPLO |
|
Accessed arrays [ array name : associated index ] |
| | B | : 1, J , 1, J , 2, J , I, J , I, J , I, J , I, J , I+1, J , I+1, J , I+1, J , I-1, J , N, J , N, J , N-1, J |
| | D | : 1 , 2 , I , I , N , N-1 |
| | DL | : I , I |
| | DU | : 1 , I , I-1 , N-1 |
| | LSAME | : TRANS, 'C' , TRANS, 'N' , TRANS, 'T' , UPLO, 'L' , UPLO, 'U' |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 35 J = 1 , NRHS ) , ( 10 I = 1 , N - 1 ) , ( 30 J = 1 , NRHS ) , ( 20 I = N - 2 , 1 , - 1 ) , ( 65 J = 1 , NRHS ) , ( 40 I = 3 , N ) , ( 60 J = 1 , NRHS ) , ( 50 I = N - 1 , 1 , - 1 ) |
| | if | : ( (.NOT.LOWER .AND. .NOT.LSAME( UPLO , 'U' ) ) ) , ( (.NOT.NOTRAN .AND. .NOT.LSAME( TRANS , 'T' ) .AND. .NOT. ) , ( N.LT.0 ) , ( NRHS.LT.0 ) , ( (LDB.LT.MAX( N , 1 ) ) ) , ( INFO.NE.0 ) , ( possible ) , ( N.EQ.0 .OR. NRHS.EQ.0 ) , ( NOTRAN ) , ( LOWER ) , ( N.GT.1 ) , ( .NOT. LOWER ) , ( N.GT.1 ) |
|
| List of variables | B I INFO J LDB LOWER LSAME
| N NOTRAN NRHS TRANS UPLO | | close
| |
B
I
INFO
J
LDB
LOWER
LSAME
N
NOTRAN
NRHS
TRANS
UPLO
| |