178 SUBROUTINE zsprfs( UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX,
179 $ FERR, BERR, WORK, RWORK, INFO )
187 INTEGER INFO, LDB, LDX,
191DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * )
192 COMPLEX*16 ( * ), AP( * ), B( LDB, * ), WORK( * ),
200 parameter( itmax = 5 )
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, , NZ
213 DOUBLE PRECISION EPS, LSTRES, S, SAFE1, SAFE2, , 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.LT.
ELSE IF( N0 ) THEN
246.LT.
ELSE IF( NRHS0 ) THEN
248.LT.
ELSE IF( LDBMAX( 1, N ) ) THEN
250.LT.
ELSE IF( LDXMAX( 1, N ) ) THEN
254 CALL XERBLA( 'zsprfs', -INFO )
260.EQ..OR..EQ.
IF( N0 NRHS0 ) THEN
271 EPS = DLAMCH( 'epsilon
' )
272 SAFMIN = DLAMCH( 'safe minimum
' )
288 CALL ZCOPY( N, B( 1, J ), 1, WORK, 1 )
289 CALL ZSPMV( 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 ) + CABS1( AP( KK+K-1 ) )*XK + S
323 XK = CABS1( X( K, J ) )
324 RWORK( K ) = RWORK( K ) + CABS1( AP( KK ) )*XK
327 RWORK( I ) = RWORK( I ) + CABS1( AP( IK ) )*XK
328 S = S + CABS1( AP( IK ) )*CABS1( X( I, J ) )
331 RWORK( K ) = RWORK( K ) + S
337.GT.
IF( RWORK( I )SAFE2 ) THEN
338 S = MAX( S, CABS1( WORK( I ) ) / RWORK( I ) )
340 S = MAX( S, ( CABS1( WORK( I ) )+SAFE1 ) /
341 $ ( RWORK( I )+SAFE1 ) )
352.GT..AND..LE..AND.
IF( BERR( J )EPS TWO*BERR( J )LSTRES
353.LE.
$ COUNTITMAX ) THEN
357 CALL ZSPTRS( UPLO, N, 1, AFP, IPIV, WORK, N, INFO )
358 CALL ZAXPY( N, ONE, WORK, 1, X( 1, J ), 1 )
387.GT.
IF( RWORK( I )SAFE2 ) THEN
388 RWORK( I ) = CABS1( WORK( I ) ) + NZ*EPS*RWORK( I )
390 RWORK( I ) = CABS1( WORK( I ) ) + NZ*EPS*RWORK( I ) +
397 CALL ZLACN2( N, WORK( N+1 ), WORK, FERR( J ), KASE, ISAVE )
403 CALL ZSPTRS( UPLO, N, 1, AFP, IPIV, WORK, N, INFO )
405 WORK( I ) = RWORK( I )*WORK( I )
407.EQ.
ELSE IF( KASE2 ) THEN
412 WORK( I ) = RWORK( I )*WORK( I )
414 CALL ZSPTRS( UPLO, N, 1, AFP, IPIV, WORK, N, INFO )
423 LSTRES = MAX( LSTRES, CABS1( X( I, J ) ) )
426 $ FERR( J ) = FERR( J ) / LSTRES
subroutine xerbla(srname, info)
XERBLA
subroutine zspmv(uplo, n, alpha, ap, x, incx, beta, y, incy)
ZSPMV computes a matrix-vector product for complex vectors using a complex symmetric packed matrix
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 zsprfs(uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZSPRFS
subroutine zsptrs(uplo, n, nrhs, ap, ipiv, b, ldb, info)
ZSPTRS
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zaxpy(n, za, zx, incx, zy, incy)
ZAXPY