171 SUBROUTINE spprfs( UPLO, N, NRHS, AP, AFP, B, LDB, X, LDX, FERR,
172 $ BERR, WORK, IWORK, INFO )
181 INTEGER INFO, LDB, LDX, N, NRHS
185 REAL AFP( * ), AP( * ), B( ldb, * ), BERR( * ),
186 $ ferr( * ), work( * ), x( ldx, * )
193 parameter( itmax = 5 )
195 parameter( zero = 0.0e+0 )
197 parameter( one = 1.0e+0 )
199 parameter( two = 2.0e+0 )
201 parameter( three = 3.0e+0 )
205 INTEGER COUNT, I, IK, J, K, KASE, KK, NZ
206 REAL EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
220 EXTERNAL lsame, slamch
227 upper = lsame( uplo,
'U' )
228 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 230 ELSE IF( n.LT.0 )
THEN 232 ELSE IF( nrhs.LT.0 )
THEN 234 ELSE IF( ldb.LT.max( 1, n ) )
THEN 236 ELSE IF( ldx.LT.max( 1, n ) )
THEN 240 CALL xerbla(
'SPPRFS', -info )
246 IF( n.EQ.0 .OR. nrhs.EQ.0 )
THEN 257 eps = slamch(
'Epsilon' )
258 safmin = slamch(
'Safe minimum' )
274 CALL scopy( n, b( 1, j ), 1, work( n+1 ), 1 )
275 CALL sspmv( uplo, n, -one, ap, x( 1, j ), 1, one, work( n+1 ),
288 work( i ) = abs( b( i, j ) )
297 xk = abs( x( k, j ) )
300 work( i ) = work( i ) + abs( ap( ik ) )*xk
301 s = s + abs( ap( ik ) )*abs( x( i, j ) )
304 work( k ) = work( k ) + abs( ap( kk+k-1 ) )*xk + s
310 xk = abs( x( k, j ) )
311 work( k ) = work( k ) + abs( ap( kk ) )*xk
314 work( i ) = work( i ) + abs( ap( ik ) )*xk
315 s = s + abs( ap( ik ) )*abs( x( i, j ) )
318 work( k ) = work( k ) + s
324 IF( work( i ).GT.safe2 )
THEN 325 s = max( s, abs( work( n+i ) ) / work( i ) )
327 s = max( s, ( abs( work( n+i ) )+safe1 ) /
328 $ ( work( i )+safe1 ) )
339 IF( berr( j ).GT.eps .AND. two*berr( j ).LE.lstres .AND.
340 $ count.LE.itmax )
THEN 344 CALL spptrs( uplo, n, 1, afp, work( n+1 ), n, info )
345 CALL saxpy( n, one, work( n+1 ), 1, x( 1, j ), 1 )
374 IF( work( i ).GT.safe2 )
THEN 375 work( i ) = abs( work( n+i ) ) + nz*eps*work( i )
377 work( i ) = abs( work( n+i ) ) + nz*eps*work( i ) + safe1
383 CALL slacn2( n, work( 2*n+1 ), work( n+1 ), iwork, ferr( j ),
390 CALL spptrs( uplo, n, 1, afp, work( n+1 ), n, info )
392 work( n+i ) = work( i )*work( n+i )
394 ELSE IF( kase.EQ.2 )
THEN 399 work( n+i ) = work( i )*work( n+i )
401 CALL spptrs( uplo, n, 1, afp, work( n+1 ), n, info )
410 lstres = max( lstres, abs( x( i, j ) ) )
413 $ ferr( j ) = ferr( j ) / lstres
subroutine spptrs(UPLO, N, NRHS, AP, B, LDB, INFO)
SPPTRS
subroutine sspmv(UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY)
SSPMV
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine saxpy(N, SA, SX, INCX, SY, INCY)
SAXPY
subroutine slacn2(N, V, X, ISGN, EST, KASE, ISAVE)
SLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine spprfs(UPLO, N, NRHS, AP, AFP, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
SPPRFS