408      SUBROUTINE dgerfsx( TRANS, EQUED, N, NRHS, A, LDA, AF, LDAF,
 
  410     $                    R, C, B, LDB, X, LDX, RCOND, BERR, N_ERR_BNDS,
 
  411     $                    ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
 
  412     $                    WORK, IWORK, INFO )
 
  419      CHARACTER          TRANS, EQUED
 
  420      INTEGER            INFO, LDA, LDAF, LDB, LDX, N, NRHS, NPARAMS,
 
  422      DOUBLE PRECISION   RCOND
 
  425      INTEGER            IPIV( * ), IWORK( * )
 
  426      DOUBLE PRECISION   A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
 
  427     $                   X( LDX , * ), WORK( * )
 
  428      DOUBLE PRECISION   R( * ), C( * ), PARAMS( * ), BERR( * ),
 
  429     $                   err_bnds_norm( nrhs, * ),
 
  430     $                   err_bnds_comp( nrhs, * )
 
  436      DOUBLE PRECISION   ZERO, ONE
 
  437      PARAMETER          ( ZERO = 0.0d+0, one = 1.0d+0 )
 
  438      DOUBLE PRECISION   ITREF_DEFAULT, ITHRESH_DEFAULT
 
  439      DOUBLE PRECISION   COMPONENTWISE_DEFAULT, RTHRESH_DEFAULT
 
  440      DOUBLE PRECISION   DZTHRESH_DEFAULT
 
  441      parameter( itref_default = 1.0d+0 )
 
  442      parameter( ithresh_default = 10.0d+0 )
 
  443      parameter( componentwise_default = 1.0d+0 )
 
  444      parameter( rthresh_default = 0.5d+0 )
 
  445      parameter( dzthresh_default = 0.25d+0 )
 
  446      INTEGER            LA_LINRX_ITREF_I, LA_LINRX_ITHRESH_I,
 
  448      parameter( la_linrx_itref_i = 1,
 
  449     $                   la_linrx_ithresh_i = 2 )
 
  450      parameter( la_linrx_cwise_i = 3 )
 
  451      INTEGER            LA_LINRX_TRUST_I, LA_LINRX_ERR_I,
 
  453      parameter( la_linrx_trust_i = 1, la_linrx_err_i = 2 )
 
  454      parameter( la_linrx_rcond_i = 3 )
 
  458      LOGICAL            ROWEQU, COLEQU, NOTRAN
 
  459      INTEGER            J, TRANS_TYPE, PREC_TYPE, REF_TYPE
 
  461      DOUBLE PRECISION   ANORM, RCOND_TMP
 
  462      DOUBLE PRECISION   ILLRCOND_THRESH, ERR_LBND, CWISE_WRONG
 
  465      DOUBLE PRECISION   RTHRESH, UNSTABLE_THRESH
 
  476      DOUBLE PRECISION   DLAMCH, DLANGE, DLA_GERCOND
 
  478      INTEGER            ILATRANS, ILAPREC
 
  485      trans_type = ilatrans( trans )
 
  486      ref_type = int( itref_default )
 
  487      IF ( nparams .GE. la_linrx_itref_i ) 
THEN 
  488         IF ( params( la_linrx_itref_i ) .LT. 0.0d+0 ) 
THEN 
  489            params( la_linrx_itref_i ) = itref_default
 
  491            ref_type = params( la_linrx_itref_i )
 
  497      illrcond_thresh = dble( n ) * dlamch( 
'Epsilon' )
 
  498      ithresh = int( ithresh_default )
 
  499      rthresh = rthresh_default
 
  500      unstable_thresh = dzthresh_default
 
  501      ignore_cwise = componentwise_default .EQ. 0.0d+0
 
  503      IF ( nparams.GE.la_linrx_ithresh_i ) 
THEN 
  504         IF ( params( la_linrx_ithresh_i ).LT.0.0d+0 ) 
THEN 
  505            params( la_linrx_ithresh_i ) = ithresh
 
  507            ithresh = int( params( la_linrx_ithresh_i ) )
 
  510      IF ( nparams.GE.la_linrx_cwise_i ) 
THEN 
  511         IF ( params( la_linrx_cwise_i ).LT.0.0d+0 ) 
THEN 
  512            IF ( ignore_cwise ) 
THEN 
  513               params( la_linrx_cwise_i ) = 0.0d+0
 
  515               params( la_linrx_cwise_i ) = 1.0d+0
 
  518            ignore_cwise = params( la_linrx_cwise_i ) .EQ. 0.0d+0
 
  521      IF ( ref_type .EQ. 0 .OR. n_err_bnds .EQ. 0 ) 
THEN 
  523      ELSE IF ( ignore_cwise ) 
THEN 
  529      notran = lsame( trans, 
'N' )
 
  530      rowequ = lsame( equed, 
'R' ) .OR. lsame( equed, 
'B' )
 
  531      colequ = lsame( equed, 
'C' ) .OR. lsame( equed, 
'B' )
 
  535      IF( trans_type.EQ.-1 ) 
THEN 
  537      ELSE IF( .NOT.rowequ .AND. .NOT.colequ .AND.
 
  538     $         .NOT.lsame( equed, 
'N' ) ) 
THEN 
  540      ELSE IF( n.LT.0 ) 
THEN 
  542      ELSE IF( nrhs.LT.0 ) 
THEN 
  544      ELSE IF( lda.LT.max( 1, n ) ) 
THEN 
  546      ELSE IF( ldaf.LT.max( 1, n ) ) 
THEN 
  548      ELSE IF( ldb.LT.max( 1, n ) ) 
THEN 
  550      ELSE IF( ldx.LT.max( 1, n ) ) 
THEN 
  554        CALL xerbla( 
'DGERFSX', -info )
 
  560      IF( n.EQ.0 .OR. nrhs.EQ.0 ) 
THEN 
  564            IF ( n_err_bnds .GE. 1 ) 
THEN 
  565               err_bnds_norm( j, la_linrx_trust_i) = 1.0d+0
 
  566               err_bnds_comp( j, la_linrx_trust_i ) = 1.0d+0
 
  568            IF ( n_err_bnds .GE. 2 ) 
THEN 
  569               err_bnds_norm( j, la_linrx_err_i) = 0.0d+0
 
  570               err_bnds_comp( j, la_linrx_err_i ) = 0.0d+0
 
  572            IF ( n_err_bnds .GE. 3 ) 
THEN 
  573               err_bnds_norm( j, la_linrx_rcond_i) = 1.0d+0
 
  574               err_bnds_comp( j, la_linrx_rcond_i ) = 1.0d+0
 
  585         IF ( n_err_bnds .GE. 1 ) 
THEN 
  586            err_bnds_norm( j, la_linrx_trust_i ) = 1.0d+0
 
  587            err_bnds_comp( j, la_linrx_trust_i ) = 1.0d+0
 
  589         IF ( n_err_bnds .GE. 2 ) 
THEN 
  590            err_bnds_norm( j, la_linrx_err_i ) = 1.0d+0
 
  591            err_bnds_comp( j, la_linrx_err_i ) = 1.0d+0
 
  593         IF ( n_err_bnds .GE. 3 ) 
THEN 
  594            err_bnds_norm( j, la_linrx_rcond_i ) = 0.0d+0
 
  595            err_bnds_comp( j, la_linrx_rcond_i ) = 0.0d+0
 
  607      anorm = dlange( norm, n, n, a, lda, work )
 
  608      CALL dgecon( norm, n, af, ldaf, anorm, rcond, work, iwork,
 
  613      IF ( ref_type .NE. 0 ) 
THEN 
  615         prec_type = ilaprec( 
'E' )
 
  619     $           nrhs, a, lda, af, ldaf, ipiv, colequ, c, b,
 
  620     $           ldb, x, ldx, berr, n_norms, err_bnds_norm,
 
  621     $           err_bnds_comp, work(n+1), work(1), work(2*n+1),
 
  622     $           work(1), rcond, ithresh, rthresh, unstable_thresh,
 
  623     $           ignore_cwise, info )
 
  626     $           nrhs, a, lda, af, ldaf, ipiv, rowequ, r, b,
 
  627     $           ldb, x, ldx, berr, n_norms, err_bnds_norm,
 
  628     $           err_bnds_comp, work(n+1), work(1), work(2*n+1),
 
  629     $           work(1), rcond, ithresh, rthresh, unstable_thresh,
 
  630     $           ignore_cwise, info )
 
  634      err_lbnd = max( 10.0d+0,
 
  635     $                sqrt( dble( n ) ) ) * dlamch( 
'Epsilon' )
 
  636      IF ( n_err_bnds .GE. 1 .AND. n_norms .GE. 1 ) 
THEN 
  640         IF ( colequ .AND. notran ) 
THEN 
  641            rcond_tmp = dla_gercond( trans, n, a, lda, af, ldaf,
 
  643     $           -1, c, info, work, iwork )
 
  644         ELSE IF ( rowequ .AND. .NOT. notran ) 
THEN 
  645            rcond_tmp = dla_gercond( trans, n, a, lda, af, ldaf,
 
  647     $           -1, r, info, work, iwork )
 
  649            rcond_tmp = dla_gercond( trans, n, a, lda, af, ldaf,
 
  651     $           0, r, info, work, iwork )
 
  657            IF ( n_err_bnds .GE. la_linrx_err_i
 
  658     $           .AND. err_bnds_norm( j, la_linrx_err_i ) .GT. 1.0d+0 )
 
  659     $           err_bnds_norm( j, la_linrx_err_i ) = 1.0d+0
 
  663            IF ( rcond_tmp .LT. illrcond_thresh ) 
THEN 
  664               err_bnds_norm( j, la_linrx_err_i ) = 1.0d+0
 
  665               err_bnds_norm( j, la_linrx_trust_i ) = 0.0d+0
 
  666               IF ( info .LE. n ) info = n + j
 
  667            ELSE IF ( err_bnds_norm( j, la_linrx_err_i ) .LT. err_lbnd )
 
  669               err_bnds_norm( j, la_linrx_err_i ) = err_lbnd
 
  670               err_bnds_norm( j, la_linrx_trust_i ) = 1.0d+0
 
  675            IF ( n_err_bnds .GE. la_linrx_rcond_i ) 
THEN 
  676               err_bnds_norm( j, la_linrx_rcond_i ) = rcond_tmp
 
  681      IF ( n_err_bnds .GE. 1 .AND. n_norms .GE. 2 ) 
THEN 
  691         cwise_wrong = sqrt( dlamch( 
'Epsilon' ) )
 
  693            IF ( err_bnds_comp( j, la_linrx_err_i ) .LT. cwise_wrong )
 
  695               rcond_tmp = dla_gercond( trans, n, a, lda, af, ldaf,
 
  696     $              ipiv, 1, x(1,j), info, work, iwork )
 
  703            IF ( n_err_bnds .GE. la_linrx_err_i
 
  704     $           .AND. err_bnds_comp( j, la_linrx_err_i ) .GT. 1.0d+0 )
 
  705     $           err_bnds_comp( j, la_linrx_err_i ) = 1.0d+0
 
  709            IF ( rcond_tmp .LT. illrcond_thresh ) 
THEN 
  710               err_bnds_comp( j, la_linrx_err_i ) = 1.0d+0
 
  711               err_bnds_comp( j, la_linrx_trust_i ) = 0.0d+0
 
  712               IF ( params( la_linrx_cwise_i ) .EQ. 1.0d+0
 
  713     $              .AND. info.LT.n + j ) info = n + j
 
  714            ELSE IF ( err_bnds_comp( j, la_linrx_err_i )
 
  715     $              .LT. err_lbnd ) 
THEN 
  716               err_bnds_comp( j, la_linrx_err_i ) = err_lbnd
 
  717               err_bnds_comp( j, la_linrx_trust_i ) = 1.0d+0
 
  722            IF ( n_err_bnds .GE. la_linrx_rcond_i ) 
THEN 
  723               err_bnds_comp( j, la_linrx_rcond_i ) = rcond_tmp