202 SUBROUTINE sgbrfs( TRANS, N, KL, KU, NRHS, AB, LDAB, AFB, LDAFB,
203 $ IPIV, B, LDB, X, LDX, FERR, BERR, WORK, IWORK,
212 INTEGER INFO, KL, KU, LDAB, LDAFB, LDB, LDX, N, NRHS
215 INTEGER IPIV( * ), IWORK( * )
216 REAL AB( ldab, * ), AFB( ldafb, * ), B( ldb, * ),
217 $ berr( * ), ferr( * ), work( * ), x( ldx, * )
224 parameter( itmax = 5 )
226 parameter( zero = 0.0e+0 )
228 parameter( one = 1.0e+0 )
230 parameter( two = 2.0e+0 )
232 parameter( three = 3.0e+0 )
237 INTEGER COUNT, I, J, K, KASE, KK, NZ
238 REAL EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
247 INTRINSIC abs, max, min
252 EXTERNAL lsame, slamch
259 notran = lsame( trans,
'N' )
260 IF( .NOT.notran .AND. .NOT.lsame( trans,
'T' ) .AND. .NOT.
261 $ lsame( trans,
'C' ) )
THEN 263 ELSE IF( n.LT.0 )
THEN 265 ELSE IF( kl.LT.0 )
THEN 267 ELSE IF( ku.LT.0 )
THEN 269 ELSE IF( nrhs.LT.0 )
THEN 271 ELSE IF( ldab.LT.kl+ku+1 )
THEN 273 ELSE IF( ldafb.LT.2*kl+ku+1 )
THEN 275 ELSE IF( ldb.LT.max( 1, n ) )
THEN 277 ELSE IF( ldx.LT.max( 1, n ) )
THEN 281 CALL xerbla(
'SGBRFS', -info )
287 IF( n.EQ.0 .OR. nrhs.EQ.0 )
THEN 303 nz = min( kl+ku+2, n+1 )
304 eps = slamch(
'Epsilon' )
305 safmin = slamch(
'Safe minimum' )
322 CALL scopy( n, b( 1, j ), 1, work( n+1 ), 1 )
323 CALL sgbmv( trans, n, n, kl, ku, -one, ab, ldab, x( 1, j ), 1,
324 $ one, work( n+1 ), 1 )
336 work( i ) = abs( b( i, j ) )
344 xk = abs( x( k, j ) )
345 DO 40 i = max( 1, k-ku ), min( n, k+kl )
346 work( i ) = work( i ) + abs( ab( kk+i, k ) )*xk
353 DO 60 i = max( 1, k-ku ), min( n, k+kl )
354 s = s + abs( ab( kk+i, k ) )*abs( x( i, j ) )
356 work( k ) = work( k ) + s
361 IF( work( i ).GT.safe2 )
THEN 362 s = max( s, abs( work( n+i ) ) / work( i ) )
364 s = max( s, ( abs( work( n+i ) )+safe1 ) /
365 $ ( work( i )+safe1 ) )
376 IF( berr( j ).GT.eps .AND. two*berr( j ).LE.lstres .AND.
377 $ count.LE.itmax )
THEN 381 CALL sgbtrs( trans, n, kl, ku, 1, afb, ldafb, ipiv,
382 $ work( n+1 ), n, info )
383 CALL saxpy( n, one, work( n+1 ), 1, x( 1, j ), 1 )
412 IF( work( i ).GT.safe2 )
THEN 413 work( i ) = abs( work( n+i ) ) + nz*eps*work( i )
415 work( i ) = abs( work( n+i ) ) + nz*eps*work( i ) + safe1
421 CALL slacn2( n, work( 2*n+1 ), work( n+1 ), iwork, ferr( j ),
428 CALL sgbtrs( transt, n, kl, ku, 1, afb, ldafb, ipiv,
429 $ work( n+1 ), n, info )
431 work( n+i ) = work( n+i )*work( i )
438 work( n+i ) = work( n+i )*work( i )
440 CALL sgbtrs( trans, n, kl, ku, 1, afb, ldafb, ipiv,
441 $ work( n+1 ), n, info )
450 lstres = max( lstres, abs( x( i, j ) ) )
453 $ ferr( j ) = ferr( j ) / lstres
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sgbrfs(TRANS, N, KL, KU, NRHS, AB, LDAB, AFB, LDAFB, IPIV, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
SGBRFS
subroutine sgbtrs(TRANS, N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB, INFO)
SGBTRS
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
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 sgbmv(TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
SGBMV