1 SUBROUTINE cdttrsv( UPLO, TRANS, N, NRHS, DL, D, DU,
16 INTEGER INFO, LDB, N, NRHS
19 COMPLEX B( LDB, * ), D( * ), DL( * ), DU( * )
91 notran = lsame( trans,
'N' )
92 lower = lsame( uplo,
'L' )
93 IF( .NOT.lower .AND. .NOT.lsame( uplo,
'U' ) )
THEN
95 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'T' ) .AND. .NOT.
96 $ lsame( trans,
'C' ) )
THEN
98 ELSE IF( n.LT.0 )
THEN
100 ELSE IF( nrhs.LT.0 )
THEN
102 ELSE IF( ldb.LT.
max( n, 1 ) )
THEN
106 CALL xerbla(
'CDTTRSV', -info )
112 IF( n.EQ.0 .OR. nrhs.EQ.0 )
125 b( i+1, j ) = b( i+1, j ) - dl( i )*b( i, j )
126 10 CONTINUE
35 CONTINUE
*
ELSE
* Solve U*x = b.
*
DO 30 J = 1, NRHS
B( N, J ) = B( N, J ) / D( N )
IF( N.GT.1 )
$ B( N-1, J ) = ( B( N-1, J )-DU( N-1 )*B( N, J ) ) /
$ D( N-1 )
DO 20 I = N - 2, 1, -1
B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J ) ) / D( I )
20 CONTINUE
30 CONTINUE
*
ENDIF
*
ELSE IF( LSAME( TRANS, 'T' ) ) THEN
*
IF( .NOT. LOWER ) THEN
* Solve U**T * X = B, overwriting B with X.
*
DO 65 J = 1, NRHS
*
* Solve U**T * x = b.
*
B( 1, J ) = B( 1, J ) / D( 1 )
IF( N.GT.1 )
$ B( 2, J ) = ( B( 2, J )-DU( 1 )*B( 1, J ) ) / D( 2 )
DO 40 I = 3, N
B( I, J ) = ( B( I, J )-DU( I-1 )*B( I-1, J ) ) / D( I )
40 CONTINUE
65 CONTINUE
*
ELSE
*
* Solve L**T * X = B, overwriting B with X.
DO 60 J = 1, NRHS
*
* Solve L**T * x = b.
*
DO 50 I = N - 1, 1, -1
B( I, J ) = B( I, J ) - DL( I )*B( I+1, J )
50 CONTINUE
60 CONTINUE
ENDIF
ELSE
*
IF( .NOT. LOWER ) THEN
* Solve U**H * X = B, overwriting B with X.
*
DO 95 J = 1, NRHS
*
* Solve U**H * x = b.
*
B( 1, J ) = B( 1, J ) / CONJG( D( 1 ) )
IF( N.GT.1 )
$ B( 2, J ) = ( B( 2, J )-CONJG( DU( 1 ) )*B( 1, J ) ) /
$ CONJG( D( 2 ) )
DO 70 I = 3, N
B( I, J ) = ( B( I, J )
$ -CONJG( DU( I-1 ) )*B( I-1, J ) ) /
$ CONJG( D( I ) )
70 CONTINUE
95 CONTINUE
*
ELSE
*
* Solve L**H * X = B, overwriting B with X.
DO 90 J = 1, NRHS
*
* Solve L**H * x = b.
*
DO 80 I = N - 1, 1, -1
B( I, J ) = B( I, J ) - CONJG( DL( I ) )*B( I+1, J )
80 CONTINUE
90 CONTINUE
ENDIF
END IF
*
* End of CDTTRSV
*
END
CONTINUE
133 b( n, j ) = b( n, j ) / d( n )
135 $ b( n-1, j ) = ( b( n-1, j )-du( n-1 )*b( n, j ) ) /
137 DO 20 i = n - 2, 1, -1
138 b( i, j ) = ( b( i, j )-du( i )*b( i+1, j ) ) / d( i )
144 ELSE IF( lsame( trans,
'T' ) )
THEN
146 IF( .NOT. lower )
THEN
153 b( 1, j ) = b( 1, j ) / d( 1 )
155 $ b( 2, j ) = ( b( 2, j )-du( 1 )*b( 1, j ) ) / d( 2 )
157 b( i, j ) = ( b( i, j )-du( i-1 )*b( i-1, j ) ) / d( i )
168 DO 50 i = n - 1, 1, -1
169 b( i, j ) = b( i, j ) - dl( i )*b( i+1, j )
175 IF( .NOT. lower )
THEN
182 b( 1, j ) = b( 1, j ) / conjg( d( 1 ) )
184 $ b( 2, j ) = ( b( 2, j )-conjg( du( 1 ) )*b( 1, j ) ) /
187 b( i, j ) = ( b( i, j )
188 $ -conjg( du( i-1 ) )*b( i-1, j ) ) /
200 DO 80 i = n - 1, 1, -1
201 b( i, j ) = b( i, j ) - conjg( dl( i ) )*b( i+1, j )