535 SUBROUTINE zgesvxx( FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV,
536 $ EQUED, R, C, B, LDB, X, LDX, RCOND, RPVGRW,
537 $ BERR, N_ERR_BNDS, ERR_BNDS_NORM,
538 $ ERR_BNDS_COMP, NPARAMS, PARAMS, WORK, RWORK,
546 CHARACTER EQUED, FACT,
547 INTEGER INFO, LDA, LDAF, LDB, LDX, N, NRHS, NPARAMS,
549 DOUBLE PRECISION RCOND, RPVGRW
553 COMPLEX*16 A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
554 $ X( LDX , * ),WORK( * )
555 DOUBLE PRECISION R( * ), C( * ), PARAMS( * ), BERR( * ),
556 $ err_bnds_norm( nrhs, * ),
557 $ err_bnds_comp( nrhs, * ), rwork( * )
563 DOUBLE PRECISION ZERO, ONE
564 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0 )
565 INTEGER , FINAL_CMP_ERR_I, BERR_I
566 INTEGER RCOND_I, NRM_RCOND_I, NRM_ERR_I, CMP_RCOND_I
567 INTEGER , PIV_GROWTH_I
568 parameter( final_nrm_err_i = 1, final_cmp_err_i = 2,
570 parameter( rcond_i = 4, nrm_rcond_i = 5, nrm_err_i = 6 )
571 parameter( cmp_rcond_i = 7, cmp_err_i = 8,
575 LOGICAL COLEQU, EQUIL, NOFACT, NOTRAN, ROWEQU
577 DOUBLE PRECISION AMAX, BIGNUM, COLCND, RCMAX, RCMIN,
583 DOUBLE PRECISION DLAMCH, ZLA_GERPVGRW
595 nofact = lsame( fact,
'N' )
596 equil = lsame( fact,
'E' )
597 notran = lsame( trans,
'N' )
598 smlnum = dlamch(
'Safe minimum' )
599 bignum = one / smlnum
600 IF( nofact .OR. equil )
THEN
605 rowequ = lsame( equed,
'R' ) .OR. lsame( equed,
'B' )
606 colequ = lsame( equed,
'C' ) .OR. lsame( equed,
'B' )
617 IF( .NOT.nofact .AND. .NOT.equil .AND. .NOT.
618 $ lsame( fact, 'f
' ) ) THEN
620.NOT..AND..NOT.
ELSE IF( NOTRAN LSAME( TRANS, 't.AND..NOT.
' )
621 $ LSAME( TRANS, 'c
' ) ) THEN
623.LT.
ELSE IF( N0 ) THEN
625.LT.
ELSE IF( NRHS0 ) THEN
627.LT.
ELSE IF( LDAMAX( 1, N ) ) THEN
629.LT.
ELSE IF( LDAFMAX( 1, N ) ) THEN
631 ELSE IF( LSAME( FACT, 'f.AND..NOT.
' )
632.OR..OR.
$ ( ROWEQU COLEQU LSAME( EQUED, 'n
' ) ) ) THEN
639 RCMIN = MIN( RCMIN, R( J ) )
640 RCMAX = MAX( RCMAX, R( J ) )
642.LE.
IF( RCMINZERO ) THEN
644.GT.
ELSE IF( N0 ) THEN
645 ROWCND = MAX( RCMIN, SMLNUM ) / MIN( RCMAX, BIGNUM )
650.AND..EQ.
IF( COLEQU INFO0 ) THEN
654 RCMIN = MIN( RCMIN, C( J ) )
655 RCMAX = MAX( RCMAX, C( J ) )
657.LE.
IF( RCMINZERO ) THEN
659.GT.
ELSE IF( N0 ) THEN
660 COLCND = MAX( RCMIN, SMLNUM ) / MIN( RCMAX, BIGNUM )
666.LT.
IF( LDBMAX( 1, N ) ) THEN
668.LT.
ELSE IF( LDXMAX( 1, N ) ) THEN
675 CALL XERBLA( 'zgesvxx', -INFO )
683 CALL ZGEEQUB( N, N, A, LDA, R, C, ROWCND, COLCND, AMAX,
685.EQ.
IF( INFEQU0 ) THEN
689 CALL ZLAQGE( N, N, A, LDA, R, C, ROWCND, COLCND, AMAX,
691 ROWEQU = LSAME( EQUED, 'r.OR.
' ) LSAME( EQUED, 'b
' )
692 COLEQU = LSAME( EQUED, 'c.OR.
' ) LSAME( EQUED, 'b
' )
697.NOT.
IF ( ROWEQU ) THEN
702.NOT.
IF ( COLEQU ) THEN
712 IF( ROWEQU ) CALL ZLASCL2( N, NRHS, R, B, LDB )
714 IF( COLEQU ) CALL ZLASCL2( N, NRHS, C, B, LDB )
717.OR.
IF( NOFACT EQUIL ) THEN
721 CALL ZLACPY( 'full
', N, N, A, LDA, AF, LDAF )
722 CALL ZGETRF( N, N, AF, LDAF, IPIV, INFO )
732 RPVGRW = ZLA_GERPVGRW( N, INFO, A, LDA, AF, LDAF )
739 RPVGRW = ZLA_GERPVGRW( N, N, A, LDA, AF, LDAF )
743 CALL ZLACPY( 'full
', N, NRHS, B, LDB, X, LDX )
744 CALL ZGETRS( TRANS, N, NRHS, AF, LDAF, IPIV, X, LDX, INFO )
749 CALL ZGERFSX( TRANS, EQUED, N, NRHS, A, LDA, AF, LDAF,
750 $ IPIV, R, C, B, LDB, X, LDX, RCOND, BERR,
751 $ N_ERR_BNDS, ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
752 $ WORK, RWORK, INFO )
756.AND.
IF ( COLEQU NOTRAN ) THEN
757 CALL ZLASCL2 ( N, NRHS, C, X, LDX )
758.AND..NOT.
ELSE IF ( ROWEQU NOTRAN ) THEN
759 CALL ZLASCL2 ( N, NRHS, R, X, LDX )
subroutine xerbla(srname, info)
XERBLA
logical function lsame(ca, cb)
LSAME
subroutine zlaqge(m, n, a, lda, r, c, rowcnd, colcnd, amax, equed)
ZLAQGE scales a general rectangular matrix, using row and column scaling factors computed by sgeequ.
subroutine zgerfsx(trans, equed, n, nrhs, a, lda, af, ldaf, ipiv, r, c, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, rwork, info)
ZGERFSX
subroutine zgetrs(trans, n, nrhs, a, lda, ipiv, b, ldb, info)
ZGETRS
subroutine zgeequb(m, n, a, lda, r, c, rowcnd, colcnd, amax, info)
ZGEEQUB
double precision function zla_gerpvgrw(n, ncols, a, lda, af, ldaf)
ZLA_GERPVGRW multiplies a square real matrix by a complex matrix.
subroutine zgesvxx(fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, r, c, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, rwork, info)
ZGESVXX computes the solution to system of linear equations A * X = B for GE matrices
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zlascl2(m, n, d, x, ldx)
ZLASCL2 performs diagonal scaling on a vector.
subroutine zgetrf(m, n, a, lda, ipiv, info)
ZGETRF VARIANT: Crout Level 3 BLAS version of the algorithm.
double precision function dlamch(cmach)
DLAMCH