201      SUBROUTINE zgbrfs( TRANS, N, KL, KU, NRHS, AB, LDAB, AFB,
 
  203     $                   IPIV, B, LDB, X, LDX, FERR, BERR, WORK, RWORK,
 
  212      INTEGER            INFO, KL, KU, LDAB, LDAFB, LDB, LDX, N, NRHS
 
  216      DOUBLE PRECISION   BERR( * ), FERR( * ), RWORK( * )
 
  217      COMPLEX*16         AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
 
  218     $                   work( * ), x( ldx, * )
 
  225      PARAMETER          ( ITMAX = 5 )
 
  226      double precision   zero
 
  227      parameter( zero = 0.0d+0 )
 
  229      parameter( cone = ( 1.0d+0, 0.0d+0 ) )
 
  231      parameter( two = 2.0d+0 )
 
  232      DOUBLE PRECISION   THREE
 
  233      parameter( three = 3.0d+0 )
 
  237      CHARACTER          TRANSN, TRANST
 
  238      INTEGER            COUNT, I, J, K, KASE, KK, NZ
 
  239      DOUBLE PRECISION   EPS, LSTRES, S, SAFE1, SAFE2, SAFMIN, XK
 
  250      INTRINSIC          abs, dble, dimag, max, min
 
  254      DOUBLE PRECISION   DLAMCH
 
  255      EXTERNAL           LSAME, DLAMCH
 
  258      DOUBLE PRECISION   CABS1
 
  261      cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
 
  268      notran = lsame( trans, 
'N' )
 
  269      IF( .NOT.notran .AND. .NOT.lsame( trans, 
'T' ) .AND. .NOT.
 
  270     $    lsame( trans, 
'C' ) ) 
THEN 
  272      ELSE IF( n.LT.0 ) 
THEN 
  274      ELSE IF( kl.LT.0 ) 
THEN 
  276      ELSE IF( ku.LT.0 ) 
THEN 
  278      ELSE IF( nrhs.LT.0 ) 
THEN 
  280      ELSE IF( ldab.LT.kl+ku+1 ) 
THEN 
  282      ELSE IF( ldafb.LT.2*kl+ku+1 ) 
THEN 
  284      ELSE IF( ldb.LT.max( 1, n ) ) 
THEN 
  286      ELSE IF( ldx.LT.max( 1, n ) ) 
THEN 
  290         CALL xerbla( 
'ZGBRFS', -info )
 
  296      IF( n.EQ.0 .OR. nrhs.EQ.0 ) 
THEN 
  314      nz = min( kl+ku+2, n+1 )
 
  315      eps = dlamch( 
'Epsilon' )
 
  316      safmin = dlamch( 
'Safe minimum' )
 
  333         CALL zcopy( n, b( 1, j ), 1, work, 1 )
 
  334         CALL zgbmv( trans, n, n, kl, ku, -cone, ab, ldab, x( 1, j ),
 
  348            rwork( i ) = cabs1( b( i, j ) )
 
  356               xk = cabs1( x( k, j ) )
 
  357               DO 40 i = max( 1, k-ku ), min( n, k+kl )
 
  358                  rwork( i ) = rwork( i ) + cabs1( ab( kk+i, k ) )*xk
 
  365               DO 60 i = max( 1, k-ku ), min( n, k+kl )
 
  366                  s = s + cabs1( ab( kk+i, k ) )*cabs1( x( i, j ) )
 
  368               rwork( k ) = rwork( k ) + s
 
  373            IF( rwork( i ).GT.safe2 ) 
THEN 
  374               s = max( s, cabs1( work( i ) ) / rwork( i ) )
 
  376               s = max( s, ( cabs1( work( i ) )+safe1 ) /
 
  377     $             ( rwork( i )+safe1 ) )
 
  388         IF( berr( j ).GT.eps .AND. two*berr( j ).LE.lstres .AND.
 
  389     $       count.LE.itmax ) 
THEN 
  393            CALL zgbtrs( trans, n, kl, ku, 1, afb, ldafb, ipiv, work,
 
  396            CALL zaxpy( n, cone, work, 1, x( 1, j ), 1 )
 
  425            IF( rwork( i ).GT.safe2 ) 
THEN 
  426               rwork( i ) = cabs1( work( i ) ) + nz*eps*rwork( i )
 
  428               rwork( i ) = cabs1( work( i ) ) + nz*eps*rwork( i ) +
 
  435         CALL zlacn2( n, work( n+1 ), work, ferr( j ), kase, isave )
 
  441               CALL zgbtrs( transt, n, kl, ku, 1, afb, ldafb, ipiv,
 
  444                  work( i ) = rwork( i )*work( i )
 
  451                  work( i ) = rwork( i )*work( i )
 
  453               CALL zgbtrs( transn, n, kl, ku, 1, afb, ldafb, ipiv,
 
  463            lstres = max( lstres, cabs1( x( i, j ) ) )
 
  466     $      ferr( j ) = ferr( j ) / lstres
 
 
subroutine zgbrfs(trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZGBRFS