139 SUBROUTINE ctbcon( NORM, UPLO, DIAG, N, KD, AB, LDAB, RCOND,
148 CHARACTER DIAG, NORM, UPLO
149 INTEGER INFO, KD, LDAB, N
154 COMPLEX AB( LDAB, * ), WORK( * )
161 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
164 LOGICAL NOUNIT, ONENRM, UPPER
166 INTEGER IX, KASE, KASE1
167 REAL AINVNM, ANORM, SCALE, SMLNUM, XNORM
177 EXTERNAL lsame, icamax, clantb, slamch
183 INTRINSIC abs, aimag, max, real
189 cabs1( zdum ) = abs( real( zdum ) ) + abs( aimag( zdum ) )
196 upper = lsame( uplo,
'U' )
197 onenrm = norm.EQ.
'1' .OR. lsame( norm,
'O' )
198 nounit = lsame( diag,
'N' )
200 IF( .NOT.onenrm .AND. .NOT.lsame( norm,
'I' ) )
THEN
202 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
204 ELSE IF( .NOT.nounit .AND. .NOT.lsame( diag,
'U' ) )
THEN
206 ELSE IF( n.LT.0 )
THEN
208 ELSE IF( kd.LT.0 )
THEN
210 ELSE IF( ldab.LT.kd+1 )
THEN
214 CALL xerbla(
'CTBCON', -info )
226 smlnum = slamch(
'Safe minimum' )*real( max( n, 1 ) )
230 anorm = clantb( norm, uplo, diag, n, kd, ab, ldab, rwork )
234 IF( anorm.GT.zero )
THEN
247 CALL clacn2( n, work( n+1 ), work, ainvnm, kase, isave )
249 IF( kase.EQ.kase1 )
THEN
253 CALL clatbs( uplo,
'No transpose', diag, normin, n,
255 $ ab, ldab, work, scale, rwork, info )
260 CALL clatbs( uplo,
'Conjugate transpose', diag,
262 $ n, kd, ab, ldab, work, scale, rwork, info )
268 IF( scale.NE.one )
THEN
269 ix = icamax( n, work, 1 )
270 xnorm = cabs1( work( ix ) )
271 IF( scale.LT.xnorm*smlnum .OR. scale.EQ.zero )
273 CALL csrscl( n, scale, work, 1 )
281 $ rcond = ( one / anorm ) / ainvnm
subroutine clacn2(n, v, x, est, kase, isave)
CLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine clatbs(uplo, trans, diag, normin, n, kd, ab, ldab, x, scale, cnorm, info)
CLATBS solves a triangular banded system of equations.
subroutine csrscl(n, sa, sx, incx)
CSRSCL multiplies a vector by the reciprocal of a real scalar.
subroutine ctbcon(norm, uplo, diag, n, kd, ab, ldab, rcond, work, rwork, info)
CTBCON