181 SUBROUTINE sporfs( UPLO, N, NRHS, A, LDA, AF, LDAF, B, LDB, X,
182 $ LDX, FERR, BERR, WORK, IWORK, INFO )
190 INTEGER INFO, LDA, LDAF, LDB, LDX, N, NRHS
194 REAL A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
195 $ berr( * ), ferr( * ), work( * ), x( ldx, * )
202 parameter( itmax = 5 )
204 parameter( zero = 0.0e+0 )
206 parameter( one = 1.0e+0 )
208 parameter( two = 2.0e+0 )
210 parameter( three = 3.0e+0 )
214 INTEGER COUNT, I, J, K, KASE, NZ
215 REAL EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
229 EXTERNAL lsame, slamch
236 upper = lsame( uplo,
'U' )
237 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
239 ELSE IF( n.LT.0 )
THEN
241 ELSE IF( nrhs.LT.0 )
THEN
243 ELSE IF( lda.LT.max( 1, n ) )
THEN
245 ELSE IF( ldaf.LT.max( 1, n ) )
THEN
247 ELSE IF( ldb.LT.max( 1, n ) )
THEN
249 ELSE IF( ldx.LT.max( 1, n ) )
THEN
253 CALL xerbla(
'SPORFS', -info )
259 IF( n.EQ.0 .OR. nrhs.EQ.0 )
THEN
270 eps = slamch(
'Epsilon' )
271 safmin = slamch(
'Safe minimum' )
287 CALL scopy( n, b( 1, j ), 1, work( n+1 ), 1 )
288 CALL ssymv( uplo, n, -one, a, lda, x( 1, j ), 1, one,
301 work( i ) = abs( b( i, j ) )
309 xk = abs( x( k, j ) )
311 work( i ) = work( i ) + abs( a( i, k ) )*xk
312 s = s + abs( a( i, k ) )*abs( x( i, j ) )
314 work( k ) = work( k ) + abs( a( k, k ) )*xk + s
319 xk = abs( x( k, j ) )
320 work( k ) = work( k ) + abs( a( k, k ) )*xk
322 work( i ) = work( i ) + abs( a( i, k ) )*xk
323 s = s + abs( a( i, k ) )*abs( x( i, j ) )
325 work( k ) = work( k ) + s
330 IF( work( i ).GT.safe2 )
THEN
331 s = max( s, abs( work( n+i ) ) / work( i ) )
333 s = max( s, ( abs( work( n+i ) )+safe1 ) /
334 $ ( work( i )+safe1 ) )
345 IF( berr( j ).GT.eps .AND. two*berr( j ).LE.lstres .AND.
346 $ count.LE.itmax )
THEN
350 CALL spotrs( uplo, n, 1, af, ldaf, work( n+1 ), n, info )
351 CALL saxpy( n, one, work( n+1 ), 1, x( 1, j ), 1 )
380 IF( work( i ).GT.safe2 )
THEN
381 work( i ) = abs( work( n+i ) ) + nz*eps*work( i )
383 work( i ) = abs( work( n+i ) ) + nz*eps*work( i ) + safe1
389 CALL slacn2( n, work( 2*n+1 ), work( n+1 ), iwork, ferr( j ),
396 CALL spotrs( uplo, n, 1, af, ldaf, work( n+1 ), n, info )
398 work( n+i ) = work( i )*work( n+i )
400 ELSE IF( kase.EQ.2 )
THEN
405 work( n+i ) = work( i )*work( n+i )
407 CALL spotrs( uplo, n, 1, af, ldaf, work( n+1 ), n, info )
416 lstres = max( lstres, abs( x( i, j ) ) )
419 $ ferr( j ) = ferr( j ) / lstres
subroutine xerbla(SRNAME, INFO)
XERBLA
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 sporfs(UPLO, N, NRHS, A, LDA, AF, LDAF, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
SPORFS
subroutine spotrs(UPLO, N, NRHS, A, LDA, B, LDB, INFO)
SPOTRS
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine saxpy(N, SA, SX, INCX, SY, INCY)
SAXPY
subroutine ssymv(UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
SSYMV