138 SUBROUTINE cgbtrs( TRANS, N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB,
148 INTEGER INFO, KL, KU, LDAB, LDB, N, NRHS
152 COMPLEX AB( ldab, * ), B( ldb, * )
159 parameter ( one = ( 1.0e+0, 0.0e+0 ) )
162 LOGICAL LNOTI, NOTRAN
163 INTEGER I, J, KD, L, LM
180 notran = lsame( trans,
'N' )
181 IF( .NOT.notran .AND. .NOT.lsame( trans,
'T' ) .AND. .NOT.
182 $ lsame( trans,
'C' ) )
THEN
184 ELSE IF( n.LT.0 )
THEN
186 ELSE IF( kl.LT.0 )
THEN
188 ELSE IF( ku.LT.0 )
THEN
190 ELSE IF( nrhs.LT.0 )
THEN
192 ELSE IF( ldab.LT.( 2*kl+ku+1 ) )
THEN
194 ELSE IF( ldb.LT.max( 1, n ) )
THEN
198 CALL xerbla(
'CGBTRS', -info )
204 IF( n.EQ.0 .OR. nrhs.EQ.0 )
226 $
CALL cswap( nrhs, b( l, 1 ), ldb, b( j, 1 ), ldb )
227 CALL cgeru( lm, nrhs, -one, ab( kd+1, j ), 1, b( j, 1 ),
228 $ ldb, b( j+1, 1 ), ldb )
236 CALL ctbsv(
'Upper',
'No transpose',
'Non-unit', n, kl+ku,
237 $ ab, ldab, b( 1, i ), 1 )
240 ELSE IF( lsame( trans,
'T' ) )
THEN
248 CALL ctbsv(
'Upper',
'Transpose',
'Non-unit', n, kl+ku, ab,
249 $ ldab, b( 1, i ), 1 )
255 DO 40 j = n - 1, 1, -1
257 CALL cgemv(
'Transpose', lm, nrhs, -one, b( j+1, 1 ),
258 $ ldb, ab( kd+1, j ), 1, one, b( j, 1 ), ldb )
261 $
CALL cswap( nrhs, b( l, 1 ), ldb, b( j, 1 ), ldb )
273 CALL ctbsv(
'Upper',
'Conjugate transpose',
'Non-unit', n,
274 $ kl+ku, ab, ldab, b( 1, i ), 1 )
280 DO 60 j = n - 1, 1, -1
282 CALL clacgv( nrhs, b( j, 1 ), ldb )
283 CALL cgemv(
'Conjugate transpose', lm, nrhs, -one,
284 $ b( j+1, 1 ), ldb, ab( kd+1, j ), 1, one,
286 CALL clacgv( nrhs, b( j, 1 ), ldb )
289 $
CALL cswap( nrhs, b( l, 1 ), ldb, b( j, 1 ), ldb )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CGEMV
subroutine clacgv(N, X, INCX)
CLACGV conjugates a complex vector.
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine ctbsv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
CTBSV
subroutine cgeru(M, N, ALPHA, X, INCX, Y, INCY, A, LDA)
CGERU
subroutine cgbtrs(TRANS, N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB, INFO)
CGBTRS