117 SUBROUTINE zppcon( UPLO, N, AP, ANORM, RCOND, WORK, RWORK, INFO )
126 DOUBLE PRECISION ANORM, RCOND
129 DOUBLE PRECISION RWORK( * )
130 COMPLEX*16 AP( * ), WORK( * )
136 DOUBLE PRECISION ONE, ZERO
137 parameter( one = 1.0d+0, zero = 0.0d+0 )
143 DOUBLE PRECISION AINVNM, SCALE, SCALEL, SCALEU, SMLNUM
152 DOUBLE PRECISION DLAMCH
153 EXTERNAL lsame, izamax, dlamch
159 INTRINSIC abs, dble, dimag
162 DOUBLE PRECISION CABS1
165 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
172 upper = lsame( uplo,
'U' )
173 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 175 ELSE IF( n.LT.0 )
THEN 177 ELSE IF( anorm.LT.zero )
THEN 181 CALL xerbla(
'ZPPCON', -info )
191 ELSE IF( anorm.EQ.zero )
THEN 195 smlnum = dlamch(
'Safe minimum' )
202 CALL zlacn2( n, work( n+1 ), work, ainvnm, kase, isave )
208 CALL zlatps(
'Upper',
'Conjugate transpose',
'Non-unit',
209 $ normin, n, ap, work, scalel, rwork, info )
214 CALL zlatps(
'Upper',
'No transpose',
'Non-unit', normin, n,
215 $ ap, work, scaleu, rwork, info )
220 CALL zlatps(
'Lower',
'No transpose',
'Non-unit', normin, n,
221 $ ap, work, scalel, rwork, info )
226 CALL zlatps(
'Lower',
'Conjugate transpose',
'Non-unit',
227 $ normin, n, ap, work, scaleu, rwork, info )
232 scale = scalel*scaleu
233 IF( scale.NE.one )
THEN 234 ix = izamax( n, work, 1 )
235 IF( scale.LT.cabs1( work( ix ) )*smlnum .OR. scale.EQ.zero )
237 CALL zdrscl( n, scale, work, 1 )
245 $ rcond = ( one / ainvnm ) / anorm
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zlatps(UPLO, TRANS, DIAG, NORMIN, N, AP, X, SCALE, CNORM, INFO)
ZLATPS solves a triangular system of equations with the matrix held in packed storage.
subroutine zppcon(UPLO, N, AP, ANORM, RCOND, WORK, RWORK, INFO)
ZPPCON
subroutine zlacn2(N, V, X, EST, KASE, ISAVE)
ZLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine zdrscl(N, SA, SX, INCX)
ZDRSCL multiplies a vector by the reciprocal of a real scalar.