408      SUBROUTINE cgerfsx( 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, RWORK, INFO )
 
  419      CHARACTER          TRANS, EQUED
 
  420      INTEGER            INFO, LDA, LDAF, LDB, LDX, N, NRHS, NPARAMS,
 
  426      COMPLEX            A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
 
  427     $                   X( LDX , * ), WORK( * )
 
  428      REAL               R( * ), C( * ), PARAMS( * ), BERR( * ),
 
  429     $                   err_bnds_norm( nrhs, * ),
 
  430     $                   err_bnds_comp( nrhs, * ), rwork( * )
 
  437      PARAMETER          ( ZERO = 0.0e+0, one = 1.0e+0 )
 
  438      REAL               ITREF_DEFAULT, ITHRESH_DEFAULT,
 
  439     $                   COMPONENTWISE_DEFAULT
 
  440      REAL               RTHRESH_DEFAULT, DZTHRESH_DEFAULT
 
  441      parameter( itref_default = 1.0 )
 
  442      parameter( ithresh_default = 10.0 )
 
  443      parameter( componentwise_default = 1.0 )
 
  444      parameter( rthresh_default = 0.5 )
 
  445      parameter( dzthresh_default = 0.25 )
 
  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      REAL               ANORM, RCOND_TMP
 
  462      REAL               ILLRCOND_THRESH, ERR_LBND, CWISE_WRONG
 
  465      REAL               RTHRESH, UNSTABLE_THRESH
 
  471      INTRINSIC          max, sqrt, transfer
 
  477      REAL               SLAMCH, CLANGE, CLA_GERCOND_X, CLA_GERCOND_C
 
  479      INTEGER            ILATRANS, ILAPREC
 
  486      trans_type = ilatrans( trans )
 
  487      ref_type = int( itref_default )
 
  488      IF ( nparams .GE. la_linrx_itref_i ) 
THEN 
  489         IF ( params( la_linrx_itref_i ) .LT. 0.0 ) 
THEN 
  490            params( la_linrx_itref_i ) = itref_default
 
  492            ref_type = params( la_linrx_itref_i )
 
  498      illrcond_thresh = real( n ) * slamch( 
'Epsilon' )
 
  499      ithresh = int( ithresh_default )
 
  500      rthresh = rthresh_default
 
  501      unstable_thresh = dzthresh_default
 
  502      ignore_cwise = componentwise_default .EQ. 0.0
 
  504      IF ( nparams.GE.la_linrx_ithresh_i ) 
THEN 
  505         IF ( params( la_linrx_ithresh_i ).LT.0.0 ) 
THEN 
  506            params(la_linrx_ithresh_i) = ithresh
 
  508            ithresh = int( params( la_linrx_ithresh_i ) )
 
  511      IF ( nparams.GE.la_linrx_cwise_i ) 
THEN 
  512         IF ( params( la_linrx_cwise_i ).LT.0.0 ) 
THEN 
  513            IF ( ignore_cwise ) 
THEN 
  514               params( la_linrx_cwise_i ) = 0.0
 
  516               params( la_linrx_cwise_i ) = 1.0
 
  519            ignore_cwise = params( la_linrx_cwise_i ) .EQ. 0.0
 
  522      IF ( ref_type .EQ. 0 .OR. n_err_bnds .EQ. 0 ) 
THEN 
  524      ELSE IF ( ignore_cwise ) 
THEN 
  530      notran = lsame( trans, 
'N' )
 
  531      rowequ = lsame( equed, 
'R' ) .OR. lsame( equed, 
'B' )
 
  532      colequ = lsame( equed, 
'C' ) .OR. lsame( equed, 
'B' )
 
  536      IF( trans_type.EQ.-1 ) 
THEN 
  538      ELSE IF( .NOT.rowequ .AND. .NOT.colequ .AND.
 
  539     $         .NOT.lsame( equed, 
'N' ) ) 
THEN 
  541      ELSE IF( n.LT.0 ) 
THEN 
  543      ELSE IF( nrhs.LT.0 ) 
THEN 
  545      ELSE IF( lda.LT.max( 1, n ) ) 
THEN 
  547      ELSE IF( ldaf.LT.max( 1, n ) ) 
THEN 
  549      ELSE IF( ldb.LT.max( 1, n ) ) 
THEN 
  551      ELSE IF( ldx.LT.max( 1, n ) ) 
THEN 
  555        CALL xerbla( 
'CGERFSX', -info )
 
  561      IF( n.EQ.0 .OR. nrhs.EQ.0 ) 
THEN 
  565            IF ( n_err_bnds .GE. 1 ) 
THEN 
  566               err_bnds_norm( j, la_linrx_trust_i ) =  1.0
 
  567               err_bnds_comp( j, la_linrx_trust_i ) = 1.0
 
  569            IF ( n_err_bnds .GE. 2 ) 
THEN 
  570               err_bnds_norm( j, la_linrx_err_i ) = 0.0
 
  571               err_bnds_comp( j, la_linrx_err_i ) = 0.0
 
  573            IF ( n_err_bnds .GE. 3 ) 
THEN 
  574               err_bnds_norm( j, la_linrx_rcond_i ) = 1.0
 
  575               err_bnds_comp( j, la_linrx_rcond_i ) = 1.0
 
  586         IF ( n_err_bnds .GE. 1 ) 
THEN 
  587            err_bnds_norm( j, la_linrx_trust_i ) = 1.0
 
  588            err_bnds_comp( j, la_linrx_trust_i ) = 1.0
 
  590         IF ( n_err_bnds .GE. 2 ) 
THEN 
  591            err_bnds_norm( j, la_linrx_err_i ) = 1.0
 
  592            err_bnds_comp( j, la_linrx_err_i ) = 1.0
 
  594         IF ( n_err_bnds .GE. 3 ) 
THEN 
  595            err_bnds_norm( j, la_linrx_rcond_i ) = 0.0
 
  596            err_bnds_comp( j, la_linrx_rcond_i ) = 0.0
 
  608      anorm = clange( norm, n, n, a, lda, rwork )
 
  609      CALL cgecon( norm, n, af, ldaf, anorm, rcond, work, rwork,
 
  614      IF ( ref_type .NE. 0 ) 
THEN 
  616         prec_type = ilaprec( 
'D' )
 
  620     $           nrhs, a, lda, af, ldaf, ipiv, colequ, c, b,
 
  621     $           ldb, x, ldx, berr, n_norms, err_bnds_norm,
 
  622     $           err_bnds_comp, work, rwork, work(n+1),
 
  623     $           transfer(rwork(1:2*n), (/ (zero, zero) /), n),
 
  624     $           rcond, ithresh, rthresh, unstable_thresh, ignore_cwise,
 
  628     $           nrhs, a, lda, af, ldaf, ipiv, rowequ, r, b,
 
  629     $           ldb, x, ldx, berr, n_norms, err_bnds_norm,
 
  630     $           err_bnds_comp, work, rwork, work(n+1),
 
  631     $           transfer(rwork(1:2*n), (/ (zero, zero) /), n),
 
  632     $           rcond, ithresh, rthresh, unstable_thresh, ignore_cwise,
 
  637      err_lbnd = max( 10.0, sqrt( real( n ) ) ) * slamch( 
'Epsilon' )
 
  638      IF ( n_err_bnds .GE. 1 .AND. n_norms .GE. 1 ) 
THEN 
  642         IF ( colequ .AND. notran ) 
THEN 
  643            rcond_tmp = cla_gercond_c( trans, n, a, lda, af, ldaf,
 
  645     $           c, .true., info, work, rwork )
 
  646         ELSE IF ( rowequ .AND. .NOT. notran ) 
THEN 
  647            rcond_tmp = cla_gercond_c( trans, n, a, lda, af, ldaf,
 
  649     $           r, .true., info, work, rwork )
 
  651            rcond_tmp = cla_gercond_c( trans, n, a, lda, af, ldaf,
 
  653     $           c, .false., info, work, rwork )
 
  659            IF ( n_err_bnds .GE. la_linrx_err_i
 
  660     $           .AND. err_bnds_norm( j, la_linrx_err_i ) .GT. 1.0 )
 
  661     $           err_bnds_norm( j, la_linrx_err_i ) = 1.0
 
  665            IF ( rcond_tmp .LT. illrcond_thresh ) 
THEN 
  666               err_bnds_norm( j, la_linrx_err_i ) = 1.0
 
  667               err_bnds_norm( j, la_linrx_trust_i ) = 0.0
 
  668               IF ( info .LE. n ) info = n + j
 
  669            ELSE IF (err_bnds_norm( j, la_linrx_err_i ) .LT. err_lbnd)
 
  671               err_bnds_norm( j, la_linrx_err_i ) = err_lbnd
 
  672               err_bnds_norm( j, la_linrx_trust_i ) = 1.0
 
  677            IF ( n_err_bnds .GE. la_linrx_rcond_i ) 
THEN 
  678               err_bnds_norm( j, la_linrx_rcond_i ) = rcond_tmp
 
  683      IF ( n_err_bnds .GE. 1 .AND. n_norms .GE. 2 ) 
THEN 
  693         cwise_wrong = sqrt( slamch( 
'Epsilon' ) )
 
  695            IF ( err_bnds_comp( j, la_linrx_err_i ) .LT. cwise_wrong )
 
  697               rcond_tmp = cla_gercond_x( trans, n, a, lda, af, ldaf,
 
  698     $              ipiv, x(1,j), info, work, rwork )
 
  705            IF ( n_err_bnds .GE. la_linrx_err_i
 
  706     $           .AND. err_bnds_comp( j, la_linrx_err_i ) .GT. 1.0 )
 
  707     $           err_bnds_comp( j, la_linrx_err_i ) = 1.0
 
  711            IF ( rcond_tmp .LT. illrcond_thresh ) 
THEN 
  712               err_bnds_comp( j, la_linrx_err_i ) = 1.0
 
  713               err_bnds_comp( j, la_linrx_trust_i ) = 0.0
 
  714               IF ( params( la_linrx_cwise_i ) .EQ. 1.0
 
  715     $              .AND. info.LT.n + j ) info = n + j
 
  716            ELSE IF ( err_bnds_comp( j, la_linrx_err_i )
 
  717     $              .LT. err_lbnd ) 
THEN 
  718               err_bnds_comp( j, la_linrx_err_i ) = err_lbnd
 
  719               err_bnds_comp( j, la_linrx_trust_i ) = 1.0
 
  724            IF ( n_err_bnds .GE. la_linrx_rcond_i ) 
THEN 
  725               err_bnds_comp( j, la_linrx_rcond_i ) = rcond_tmp