433      SUBROUTINE sgbrfsx( TRANS, EQUED, N, KL, KU, NRHS, AB, LDAB,
 
  435     $                    LDAFB, IPIV, R, C, B, LDB, X, LDX, RCOND,
 
  436     $                    BERR, N_ERR_BNDS, ERR_BNDS_NORM,
 
  437     $                    ERR_BNDS_COMP, NPARAMS, PARAMS, WORK, IWORK,
 
  445      CHARACTER          TRANS, EQUED
 
  446      INTEGER            INFO, LDAB, LDAFB, LDB, LDX, N, KL, KU, NRHS,
 
  447     $                   NPARAMS, N_ERR_BNDS
 
  451      INTEGER            IPIV( * ), IWORK( * )
 
  452      REAL               AB( LDAB, * ), AFB( LDAFB, * ), B( LDB, * ),
 
  453     $                   x( ldx , * ),work( * )
 
  454      REAL               R( * ), C( * ), PARAMS( * ), BERR( * ),
 
  455     $                   ERR_BNDS_NORM( NRHS, * ),
 
  456     $                   err_bnds_comp( nrhs, * )
 
  463      PARAMETER          ( ZERO = 0.0e+0, one = 1.0e+0 )
 
  464      REAL               ITREF_DEFAULT, ITHRESH_DEFAULT,
 
  465     $                   COMPONENTWISE_DEFAULT
 
  466      REAL               RTHRESH_DEFAULT, DZTHRESH_DEFAULT
 
  467      parameter( itref_default = 1.0 )
 
  468      parameter( ithresh_default = 10.0 )
 
  469      parameter( componentwise_default = 1.0 )
 
  470      parameter( rthresh_default = 0.5 )
 
  471      parameter( dzthresh_default = 0.25 )
 
  472      INTEGER            LA_LINRX_ITREF_I, LA_LINRX_ITHRESH_I,
 
  474      parameter( la_linrx_itref_i = 1,
 
  475     $                   la_linrx_ithresh_i = 2 )
 
  476      parameter( la_linrx_cwise_i = 3 )
 
  477      INTEGER            LA_LINRX_TRUST_I, LA_LINRX_ERR_I,
 
  479      parameter( la_linrx_trust_i = 1, la_linrx_err_i = 2 )
 
  480      parameter( la_linrx_rcond_i = 3 )
 
  484      LOGICAL            ROWEQU, COLEQU, NOTRAN
 
  485      INTEGER            J, TRANS_TYPE, PREC_TYPE, REF_TYPE
 
  487      REAL               ANORM, RCOND_TMP
 
  488      REAL               ILLRCOND_THRESH, ERR_LBND, CWISE_WRONG
 
  491      REAL               RTHRESH, UNSTABLE_THRESH
 
  503      REAL               SLAMCH, SLANGB, SLA_GBRCOND
 
  505      INTEGER            ILATRANS, ILAPREC
 
  512      trans_type = ilatrans( trans )
 
  513      ref_type = int( itref_default )
 
  514      IF ( nparams .GE. la_linrx_itref_i ) 
THEN 
  515         IF ( params( la_linrx_itref_i ) .LT. 0.0 ) 
THEN 
  516            params( la_linrx_itref_i ) = itref_default
 
  518            ref_type = params( la_linrx_itref_i )
 
  524      illrcond_thresh = real( n ) * slamch( 
'Epsilon' )
 
  525      ithresh = int( ithresh_default )
 
  526      rthresh = rthresh_default
 
  527      unstable_thresh = dzthresh_default
 
  528      ignore_cwise = componentwise_default .EQ. 0.0
 
  530      IF ( nparams.GE.la_linrx_ithresh_i ) 
THEN 
  531         IF ( params( la_linrx_ithresh_i ).LT.0.0 ) 
THEN 
  532            params( la_linrx_ithresh_i ) = ithresh
 
  534            ithresh = int( params( la_linrx_ithresh_i ) )
 
  537      IF ( nparams.GE.la_linrx_cwise_i ) 
THEN 
  538         IF ( params( la_linrx_cwise_i ).LT.0.0 ) 
THEN 
  539            IF ( ignore_cwise ) 
THEN 
  540               params( la_linrx_cwise_i ) = 0.0
 
  542               params( la_linrx_cwise_i ) = 1.0
 
  545            ignore_cwise = params( la_linrx_cwise_i ) .EQ. 0.0
 
  548      IF ( ref_type .EQ. 0 .OR. n_err_bnds .EQ. 0 ) 
THEN 
  550      ELSE IF ( ignore_cwise ) 
THEN 
  556      notran = lsame( trans, 
'N' )
 
  557      rowequ = lsame( equed, 
'R' ) .OR. lsame( equed, 
'B' )
 
  558      colequ = lsame( equed, 
'C' ) .OR. lsame( equed, 
'B' )
 
  562      IF( trans_type.EQ.-1 ) 
THEN 
  564      ELSE IF( .NOT.rowequ .AND. .NOT.colequ .AND.
 
  565     $         .NOT.lsame( equed, 
'N' ) ) 
THEN 
  567      ELSE IF( n.LT.0 ) 
THEN 
  569      ELSE IF( kl.LT.0 ) 
THEN 
  571      ELSE IF( ku.LT.0 ) 
THEN 
  573      ELSE IF( nrhs.LT.0 ) 
THEN 
  575      ELSE IF( ldab.LT.kl+ku+1 ) 
THEN 
  577      ELSE IF( ldafb.LT.2*kl+ku+1 ) 
THEN 
  579      ELSE IF( ldb.LT.max( 1, n ) ) 
THEN 
  581      ELSE IF( ldx.LT.max( 1, n ) ) 
THEN 
  585        CALL xerbla( 
'SGBRFSX', -info )
 
  591      IF( n.EQ.0 .OR. nrhs.EQ.0 ) 
THEN 
  595            IF ( n_err_bnds .GE. 1 ) 
THEN 
  596               err_bnds_norm( j, la_linrx_trust_i ) = 1.0
 
  597               err_bnds_comp( j, la_linrx_trust_i ) = 1.0
 
  599            IF ( n_err_bnds .GE. 2 ) 
THEN 
  600               err_bnds_norm( j, la_linrx_err_i ) = 0.0
 
  601               err_bnds_comp( j, la_linrx_err_i ) = 0.0
 
  603            IF ( n_err_bnds .GE. 3 ) 
THEN 
  604               err_bnds_norm( j, la_linrx_rcond_i ) = 1.0
 
  605               err_bnds_comp( j, la_linrx_rcond_i ) = 1.0
 
  616         IF ( n_err_bnds .GE. 1 ) 
THEN 
  617            err_bnds_norm( j, la_linrx_trust_i ) = 1.0
 
  618            err_bnds_comp( j, la_linrx_trust_i ) = 1.0
 
  620         IF ( n_err_bnds .GE. 2 ) 
THEN 
  621            err_bnds_norm( j, la_linrx_err_i ) = 1.0
 
  622            err_bnds_comp( j, la_linrx_err_i ) = 1.0
 
  624         IF ( n_err_bnds .GE. 3 ) 
THEN 
  625            err_bnds_norm( j, la_linrx_rcond_i ) = 0.0
 
  626            err_bnds_comp( j, la_linrx_rcond_i ) = 0.0
 
  638      anorm = slangb( norm, n, kl, ku, ab, ldab, work )
 
  639      CALL sgbcon( norm, n, kl, ku, afb, ldafb, ipiv, anorm, rcond,
 
  640     $     work, iwork, info )
 
  644      IF ( ref_type .NE. 0 .AND. info .EQ. 0 ) 
THEN 
  646         prec_type = ilaprec( 
'D' )
 
  651     $           nrhs, ab, ldab, afb, ldafb, ipiv, colequ, c, b,
 
  652     $           ldb, x, ldx, berr, n_norms, err_bnds_norm,
 
  653     $           err_bnds_comp, work( n+1 ), work( 1 ), work( 2*n+1 ),
 
  654     $           work( 1 ), rcond, ithresh, rthresh, unstable_thresh,
 
  655     $           ignore_cwise, info )
 
  659     $           nrhs, ab, ldab, afb, ldafb, ipiv, rowequ, r, b,
 
  660     $           ldb, x, ldx, berr, n_norms, err_bnds_norm,
 
  661     $           err_bnds_comp, work( n+1 ), work( 1 ), work( 2*n+1 ),
 
  662     $           work( 1 ), rcond, ithresh, rthresh, unstable_thresh,
 
  663     $           ignore_cwise, info )
 
  667      err_lbnd = max( 10.0, sqrt( real( n ) ) ) * slamch( 
'Epsilon' )
 
  668      IF ( n_err_bnds .GE. 1 .AND. n_norms .GE. 1 ) 
THEN 
  672         IF ( colequ .AND. notran ) 
THEN 
  673            rcond_tmp = sla_gbrcond( trans, n, kl, ku, ab, ldab, afb,
 
  674     $           ldafb, ipiv, -1, c, info, work, iwork )
 
  675         ELSE IF ( rowequ .AND. .NOT. notran ) 
THEN 
  676            rcond_tmp = sla_gbrcond( trans, n, kl, ku, ab, ldab, afb,
 
  677     $           ldafb, ipiv, -1, r, info, work, iwork )
 
  679            rcond_tmp = sla_gbrcond( trans, n, kl, ku, ab, ldab, afb,
 
  680     $           ldafb, ipiv, 0, r, info, work, iwork )
 
  686            IF ( n_err_bnds .GE. la_linrx_err_i
 
  687     $           .AND. err_bnds_norm( j, la_linrx_err_i ) .GT. 1.0 )
 
  688     $           err_bnds_norm( j, la_linrx_err_i ) = 1.0
 
  692            IF ( rcond_tmp .LT. illrcond_thresh ) 
THEN 
  693               err_bnds_norm( j, la_linrx_err_i ) = 1.0
 
  694               err_bnds_norm( j, la_linrx_trust_i ) = 0.0
 
  695               IF ( info .LE. n ) info = n + j
 
  696            ELSE IF ( err_bnds_norm( j, la_linrx_err_i ) .LT. err_lbnd )
 
  698               err_bnds_norm( j, la_linrx_err_i ) = err_lbnd
 
  699               err_bnds_norm( j, la_linrx_trust_i ) = 1.0
 
  704            IF ( n_err_bnds .GE. la_linrx_rcond_i ) 
THEN 
  705               err_bnds_norm( j, la_linrx_rcond_i ) = rcond_tmp
 
  711      IF (n_err_bnds .GE. 1 .AND. n_norms .GE. 2) 
THEN 
  721         cwise_wrong = sqrt( slamch( 
'Epsilon' ) )
 
  723            IF ( err_bnds_comp( j, la_linrx_err_i ) .LT. cwise_wrong )
 
  725               rcond_tmp = sla_gbrcond( trans, n, kl, ku, ab, ldab,
 
  727     $              ldafb, ipiv, 1, x( 1, j ), info, work, iwork )
 
  734            IF ( n_err_bnds .GE. la_linrx_err_i
 
  735     $           .AND. err_bnds_comp( j, la_linrx_err_i ) .GT. 1.0 )
 
  736     $           err_bnds_comp( j, la_linrx_err_i ) = 1.0
 
  740            IF ( rcond_tmp .LT. illrcond_thresh ) 
THEN 
  741               err_bnds_comp( j, la_linrx_err_i ) = 1.0
 
  742               err_bnds_comp( j, la_linrx_trust_i ) = 0.0
 
  743               IF ( params( la_linrx_cwise_i ) .EQ. 1.0
 
  744     $              .AND. info.LT.n + j ) info = n + j
 
  745            ELSE IF ( err_bnds_comp( j, la_linrx_err_i )
 
  746     $              .LT. err_lbnd ) 
THEN 
  747               err_bnds_comp( j, la_linrx_err_i ) = err_lbnd
 
  748               err_bnds_comp( j, la_linrx_trust_i ) = 1.0
 
  753            IF ( n_err_bnds .GE. la_linrx_rcond_i ) 
THEN 
  754               err_bnds_comp( j, la_linrx_rcond_i ) = rcond_tmp