178 SUBROUTINE zhprfs( UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX,
179 $ FERR, BERR, WORK, RWORK, INFO )
187 INTEGER INFO, LDB, LDX, N, NRHS
191 DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * )
192 COMPLEX*16 AFP( * ), AP( * ), B( ldb, * ), WORK( * ),
200 parameter( itmax = 5 )
201 DOUBLE PRECISION ZERO
202 parameter( zero = 0.0d+0 )
204 parameter( one = ( 1.0d+0, 0.0d+0 ) )
206 parameter( two = 2.0d+0 )
207 DOUBLE PRECISION THREE
208 parameter( three = 3.0d+0 )
212 INTEGER COUNT, I, IK, J, K, KASE, KK, NZ
213 DOUBLE PRECISION EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
223 INTRINSIC abs, dble, dimag, max
227 DOUBLE PRECISION DLAMCH
228 EXTERNAL lsame, dlamch
231 DOUBLE PRECISION CABS1
234 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
241 upper = lsame( uplo,
'U' )
242 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 244 ELSE IF( n.LT.0 )
THEN 246 ELSE IF( nrhs.LT.0 )
THEN 248 ELSE IF( ldb.LT.max( 1, n ) )
THEN 250 ELSE IF( ldx.LT.max( 1, n ) )
THEN 254 CALL xerbla(
'ZHPRFS', -info )
260 IF( n.EQ.0 .OR. nrhs.EQ.0 )
THEN 271 eps = dlamch(
'Epsilon' )
272 safmin = dlamch(
'Safe minimum' )
288 CALL zcopy( n, b( 1, j ), 1, work, 1 )
289 CALL zhpmv( uplo, n, -one, ap, x( 1, j ), 1, one, work, 1 )
301 rwork( i ) = cabs1( b( i, j ) )
310 xk = cabs1( x( k, j ) )
313 rwork( i ) = rwork( i ) + cabs1( ap( ik ) )*xk
314 s = s + cabs1( ap( ik ) )*cabs1( x( i, j ) )
317 rwork( k ) = rwork( k ) + abs( dble( ap( kk+k-1 ) ) )*
324 xk = cabs1( x( k, j ) )
325 rwork( k ) = rwork( k ) + abs( dble( ap( kk ) ) )*xk
328 rwork( i ) = rwork( i ) + cabs1( ap( ik ) )*xk
329 s = s + cabs1( ap( ik ) )*cabs1( x( i, j ) )
332 rwork( k ) = rwork( k ) + s
338 IF( rwork( i ).GT.safe2 )
THEN 339 s = max( s, cabs1( work( i ) ) / rwork( i ) )
341 s = max( s, ( cabs1( work( i ) )+safe1 ) /
342 $ ( rwork( i )+safe1 ) )
353 IF( berr( j ).GT.eps .AND. two*berr( j ).LE.lstres .AND.
354 $ count.LE.itmax )
THEN 358 CALL zhptrs( uplo, n, 1, afp, ipiv, work, n, info )
359 CALL zaxpy( n, one, work, 1, x( 1, j ), 1 )
388 IF( rwork( i ).GT.safe2 )
THEN 389 rwork( i ) = cabs1( work( i ) ) + nz*eps*rwork( i )
391 rwork( i ) = cabs1( work( i ) ) + nz*eps*rwork( i ) +
398 CALL zlacn2( n, work( n+1 ), work, ferr( j ), kase, isave )
404 CALL zhptrs( uplo, n, 1, afp, ipiv, work, n, info )
406 work( i ) = rwork( i )*work( i )
408 ELSE IF( kase.EQ.2 )
THEN 413 work( i ) = rwork( i )*work( i )
415 CALL zhptrs( uplo, n, 1, afp, ipiv, work, n, info )
424 lstres = max( lstres, cabs1( x( i, j ) ) )
427 $ ferr( j ) = ferr( j ) / lstres
subroutine zhpmv(UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY)
ZHPMV
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zhptrs(UPLO, N, NRHS, AP, IPIV, B, LDB, INFO)
ZHPTRS
subroutine zhprfs(UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX, FERR, BERR, WORK, RWORK, INFO)
ZHPRFS
subroutine zlacn2(N, V, X, EST, KASE, ISAVE)
ZLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...