555 SUBROUTINE dgbsvxx( FACT, TRANS, N, KL, KU, NRHS, AB, LDAB, AFB,
556 $ LDAFB, IPIV, EQUED, R, C, B, LDB, X, LDX,
557 $ RCOND, RPVGRW, BERR, N_ERR_BNDS,
558 $ ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
559 $ WORK, IWORK, INFO )
566 CHARACTER EQUED, FACT, TRANS
567 INTEGER INFO, LDAB, LDAFB, LDB, LDX, N, NRHS, NPARAMS,
569 DOUBLE PRECISION RCOND, RPVGRW
572 INTEGER IPIV( * ), IWORK( * )
573 DOUBLE PRECISION AB( LDAB, * ), AFB( LDAFB, * ), ( LDB, * ),
574 $ X( LDX , * ),WORK( * )
575 DOUBLE PRECISION R( * ), C( * ), PARAMS( * ), ( * ),
576 $ err_bnds_norm( nrhs, * ),
577 $ err_bnds_comp( nrhs, * )
583 DOUBLE PRECISION ZERO, ONE
584 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0 )
585 INTEGER FINAL_NRM_ERR_I, FINAL_CMP_ERR_I, BERR_I
586 INTEGER RCOND_I, NRM_RCOND_I, NRM_ERR_I, CMP_RCOND_I
587 INTEGER CMP_ERR_I, PIV_GROWTH_I
588 parameter( final_nrm_err_i = 1, final_cmp_err_i = 2,
590 parameter( rcond_i = 4, nrm_rcond_i = 5, nrm_err_i = 6 )
591 parameter( cmp_rcond_i = 7, cmp_err_i = 8,
595 LOGICAL COLEQU, EQUIL, NOFACT, NOTRAN, ROWEQU
597 DOUBLE PRECISION AMAX, BIGNUM, COLCND, RCMAX, RCMIN,
603 DOUBLE PRECISION DLAMCH, DLA_GBRPVGRW
615 nofact = lsame( fact,
'N' )
616 equil = lsame( fact,
'E' )
617 notran = lsame( trans,
'N' )
618 smlnum = dlamch(
'Safe minimum' )
619 bignum = one / smlnum
620 IF( nofact .OR. equil )
THEN
625 rowequ = lsame( equed, 'r.OR.
' ) LSAME( EQUED, 'b
' )
626 COLEQU = LSAME( EQUED, 'c.OR.
' ) LSAME( EQUED, 'b
' )
637.NOT..AND..NOT..AND..NOT.
IF( NOFACT EQUIL
638 $ LSAME( FACT, 'f
' ) ) THEN
640.NOT..AND..NOT.
ELSE IF( NOTRAN LSAME( TRANS, 't.AND..NOT.
' )
641 $ LSAME( TRANS, 'c
' ) ) THEN
643.LT.
ELSE IF( N0 ) THEN
645.LT.
ELSE IF( KL0 ) THEN
647.LT.
ELSE IF( KU0 ) THEN
649.LT.
ELSE IF( NRHS0 ) THEN
651.LT.
ELSE IF( LDABKL+KU+1 ) THEN
653.LT.
ELSE IF( LDAFB2*KL+KU+1 ) THEN
655 ELSE IF( LSAME( FACT, 'f.AND..NOT.
' )
656.OR..OR.
$ ( ROWEQU COLEQU LSAME( EQUED, 'n
' ) ) ) THEN
663 RCMIN = MIN( RCMIN, R( J ) )
664 RCMAX = MAX( RCMAX, R( J ) )
666.LE.
IF( RCMINZERO ) THEN
668.GT.
ELSE IF( N0 ) THEN
669 ROWCND = MAX( RCMIN, SMLNUM ) / MIN( RCMAX, BIGNUM )
674.AND..EQ.
IF( COLEQU INFO0 ) THEN
678 RCMIN = MIN( RCMIN, C( J ) )
679 RCMAX = MAX( RCMAX, C( J ) )
681.LE.
IF( RCMINZERO ) THEN
683.GT.
ELSE IF( N0 ) THEN
684 COLCND = MAX( RCMIN, SMLNUM ) / MIN( RCMAX, BIGNUM )
690.LT.
IF( LDBMAX( 1, N ) ) THEN
692.LT.
ELSE IF( LDXMAX( 1, N ) ) THEN
699 CALL XERBLA( 'dgbsvxx', -INFO )
707 CALL DGBEQUB( N, N, KL, KU, AB, LDAB, R, C, ROWCND, COLCND,
709.EQ.
IF( INFEQU0 ) THEN
713 CALL DLAQGB( N, N, KL, KU, AB, LDAB, R, C, ROWCND, COLCND,
715 ROWEQU = LSAME( EQUED, 'r.OR.
' ) LSAME( EQUED, 'b
' )
716 COLEQU = LSAME( EQUED, 'c.OR.
' ) LSAME( EQUED, 'b
' )
721.NOT.
IF ( ROWEQU ) THEN
726.NOT.
IF ( COLEQU ) THEN
736 IF( ROWEQU ) CALL DLASCL2(N, NRHS, R, B, LDB)
738 IF( COLEQU ) CALL DLASCL2(N, NRHS, C, B, LDB)
741.OR.
IF( NOFACT EQUIL ) THEN
746 DO 30, I = KL+1, 2*KL+KU+1
747 AFB( I, J ) = AB( I-KL, J )
750 CALL DGBTRF( N, N, KL, KU, AFB, LDAFB, IPIV, INFO )
760 RPVGRW = DLA_GBRPVGRW( N, KL, KU, INFO, AB, LDAB, AFB,
768 RPVGRW = DLA_GBRPVGRW( N, KL, KU, N, AB, LDAB, AFB, LDAFB )
772 CALL DLACPY( 'full
', N, NRHS, B, LDB, X, LDX )
773 CALL DGBTRS( TRANS, N, KL, KU, NRHS, AFB, LDAFB, IPIV, X, LDX,
779 CALL DGBRFSX( TRANS, EQUED, N, KL, KU, NRHS, AB, LDAB, AFB, LDAFB,
780 $ IPIV, R, C, B, LDB, X, LDX, RCOND, BERR,
781 $ N_ERR_BNDS, ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS,
782 $ WORK, IWORK, INFO )
786.AND.
IF ( COLEQU NOTRAN ) THEN
787 CALL DLASCL2 ( N, NRHS, C, X, LDX )
788.AND..NOT.
ELSE IF ( ROWEQU NOTRAN ) THEN
789 CALL DLASCL2 ( N, NRHS, R, X, LDX )
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine xerbla(srname, info)
XERBLA
logical function lsame(ca, cb)
LSAME
subroutine dlaqgb(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed)
DLAQGB scales a general band matrix, using row and column scaling factors computed by sgbequ.
subroutine dgbrfsx(trans, equed, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, r, c, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info)
DGBRFSX
subroutine dgbtrs(trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
DGBTRS
subroutine dgbequb(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, info)
DGBEQUB
subroutine dgbtrf(m, n, kl, ku, ab, ldab, ipiv, info)
DGBTRF
double precision function dla_gbrpvgrw(n, kl, ku, ncols, ab, ldab, afb, ldafb)
DLA_GBRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a general banded matrix.
subroutine dgbsvxx(fact, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, equed, r, c, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info)
DGBSVXX computes the solution to system of linear equations A * X = B for GB matrices
subroutine dlascl2(m, n, d, x, ldx)
DLASCL2 performs diagonal scaling on a vector.
double precision function dlamch(cmach)
DLAMCH