200      SUBROUTINE dgbrfs( TRANS, N, KL, KU, NRHS, AB, LDAB, AFB,
 
  202     $                   IPIV, B, LDB, X, LDX, FERR, BERR, WORK, IWORK,
 
  211      INTEGER            INFO, KL, KU, LDAB, LDAFB, LDB, LDX, N, NRHS
 
  214      INTEGER            IPIV( * ), IWORK( * )
 
  215      DOUBLE PRECISION   AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
 
  216     $                   BERR( * ), FERR( * ), WORK( * ), X( LDX, * )
 
  223      PARAMETER          ( ITMAX = 5 )
 
  224      double precision   zero
 
  225      parameter( zero = 0.0d+0 )
 
  227      parameter( one = 1.0d+0 )
 
  229      parameter( two = 2.0d+0 )
 
  230      DOUBLE PRECISION   THREE
 
  231      parameter( three = 3.0d+0 )
 
  236      INTEGER            COUNT, I, J, K, KASE, KK, NZ
 
  237      DOUBLE PRECISION   EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
 
  247      INTRINSIC          abs, max, min
 
  251      DOUBLE PRECISION   DLAMCH
 
  252      EXTERNAL           LSAME, DLAMCH
 
  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( 
'DGBRFS', -info )
 
  287      IF( n.EQ.0 .OR. nrhs.EQ.0 ) 
THEN 
  303      nz = min( kl+ku+2, n+1 )
 
  304      eps = dlamch( 
'Epsilon' )
 
  305      safmin = dlamch( 
'Safe minimum' )
 
  322         CALL dcopy( n, b( 1, j ), 1, work( n+1 ), 1 )
 
  323         CALL dgbmv( trans, n, n, kl, ku, -one, ab, ldab, x( 1, j ),
 
  325     $               one, work( n+1 ), 1 )
 
  337            work( i ) = abs( b( i, j ) )
 
  345               xk = abs( x( k, j ) )
 
  346               DO 40 i = max( 1, k-ku ), min( n, k+kl )
 
  347                  work( i ) = work( i ) + abs( ab( kk+i, k ) )*xk
 
  354               DO 60 i = max( 1, k-ku ), min( n, k+kl )
 
  355                  s = s + abs( ab( kk+i, k ) )*abs( x( i, j ) )
 
  357               work( k ) = work( k ) + s
 
  362            IF( work( i ).GT.safe2 ) 
THEN 
  363               s = max( s, abs( work( n+i ) ) / work( i ) )
 
  365               s = max( s, ( abs( work( n+i ) )+safe1 ) /
 
  366     $             ( work( i )+safe1 ) )
 
  377         IF( berr( j ).GT.eps .AND. two*berr( j ).LE.lstres .AND.
 
  378     $       count.LE.itmax ) 
THEN 
  382            CALL dgbtrs( trans, n, kl, ku, 1, afb, ldafb, ipiv,
 
  383     $                   work( n+1 ), n, info )
 
  384            CALL daxpy( n, one, work( n+1 ), 1, x( 1, j ), 1 )
 
  413            IF( work( i ).GT.safe2 ) 
THEN 
  414               work( i ) = abs( work( n+i ) ) + nz*eps*work( i )
 
  416               work( i ) = abs( work( n+i ) ) + nz*eps*work( i ) + safe1
 
  422         CALL dlacn2( n, work( 2*n+1 ), work( n+1 ), iwork,
 
  430               CALL dgbtrs( transt, n, kl, ku, 1, afb, ldafb, ipiv,
 
  431     $                      work( n+1 ), n, info )
 
  433                  work( n+i ) = work( n+i )*work( i )
 
  440                  work( n+i ) = work( n+i )*work( i )
 
  442               CALL dgbtrs( trans, n, kl, ku, 1, afb, ldafb, ipiv,
 
  443     $                      work( n+1 ), n, info )
 
  452            lstres = max( lstres, abs( x( i, j ) ) )
 
  455     $      ferr( j ) = ferr( j ) / lstres
 
 
subroutine dgbrfs(trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, b, ldb, x, ldx, ferr, berr, work, iwork, info)
DGBRFS