169 SUBROUTINE sdrvgb( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, LA,
170 $ AFB, LAFB, ASAV, B, BSAV, X, XACT, S, WORK,
171 $ RWORK, IWORK, NOUT )
179 INTEGER LA, LAFB, , NOUT, NRHS
184 INTEGER IWORK( * ), NVAL( * )
185 REAL A( * ), AFB( * ), ASAV( * ), B( * ), BSAV(
194 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
196 parameter( ntypes = 8 )
198 parameter( ntests = 7 )
200 parameter( ntran = 3 )
203 LOGICAL EQUIL, NOFACT, PREFAC, TRFCON, ZEROT
204 CHARACTER DIST, EQUED, FACT, TRANS,
TYPE, XTYPE
206 INTEGER I, I1, I2, IEQUED, IFACT, IKL, IKU, IMAT, IN,
207 $ info, ioff, itran, izero, j, k, k1, kl, ku,
208 $ lda, ldafb, ldb, mode, n, nb, nbmin, nerrs,
209 $ nfact, nfail, nimat, nkl, nku, nrun, nt
210 REAL AINVNM, AMAX, ANORM, ANORMI, ANORMO, ANRMPV,
211 $ CNDNUM, COLCND, RCOND, RCONDC, RCONDI, RCONDO,
212 $ roldc, roldi, roldo, rowcnd, rpvgrw
215 CHARACTER EQUEDS( 4 ), FACTS( 3 ), TRANSS( NTRAN )
216 INTEGER ISEED( 4 ), ( 4 )
217 REAL RESULT( NTESTS )
221 REAL SGET06, SLAMCH, SLANGB, SLANGE, SLANTB
222 EXTERNAL lsame, sget06, slamch, slangb, slange, slantb
239 COMMON / infoc / infot, nunit, ok, lerr
240 COMMON / srnamc / srnamt
243 DATA iseedy / 1988, 1989, 1990, 1991 /
244 DATA transs /
'N',
'T',
'C' /
245 DATA facts /
'F',
'N',
'E' /
246 DATA equeds / 'n
', 'r
', 'c
', 'b
' /
252 PATH( 1: 1 ) = 'single precision
'
258 ISEED( I ) = ISEEDY( I )
264 $ CALL SERRVX( PATH, NOUT )
272 CALL XLAENV( 2, NBMIN )
283 NKL = MAX( 1, MIN( N, 4 ) )
298.EQ.
ELSE IF( IKL2 ) THEN
300.EQ.
ELSE IF( IKL3 ) THEN
302.EQ.
ELSE IF( IKL4 ) THEN
313.EQ.
ELSE IF( IKU2 ) THEN
315.EQ.
ELSE IF( IKU3 ) THEN
317.EQ.
ELSE IF( IKU4 ) THEN
325 LDAFB = 2*KL + KU + 1
326.GT..OR..GT.
IF( LDA*NLA LDAFB*NLAFB ) THEN
327.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
328 $ CALL ALADHD( NOUT, PATH )
329.GT.
IF( LDA*NLA ) THEN
330 WRITE( NOUT, FMT = 9999 )LA, N, KL, KU,
334.GT.
IF( LDAFB*NLAFB ) THEN
335 WRITE( NOUT, FMT = 9998 )LAFB, N, KL, KU,
342 DO 120 IMAT = 1, NIMAT
346.NOT.
IF( DOTYPE( IMAT ) )
351.GE..AND..LE.
ZEROT = IMAT2 IMAT4
352.AND..LT.
IF( ZEROT NIMAT-1 )
358 CALL SLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM,
359 $ MODE, CNDNUM, DIST )
360 RCONDC = ONE / CNDNUM
363 CALL SLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE,
364 $ CNDNUM, ANORM, KL, KU, 'z
', A, LDA, WORK,
370 CALL ALAERH( PATH, 'slatms', INFO, 0, ' ', N, N,
371 $ KL, KU, -1, IMAT, NFAIL, NERRS, NOUT )
382.EQ.
ELSE IF( IMAT3 ) THEN
387 IOFF = ( IZERO-1 )*LDA
389 I1 = MAX( 1, KU+2-IZERO )
390 I2 = MIN( KL+KU+1, KU+1+( N-IZERO ) )
396 DO 30 I = MAX( 1, KU+2-J ),
397 $ MIN( KL+KU+1, KU+1+( N-J ) )
407 CALL SLACPY( 'full
', KL+KU+1, N, A, LDA, ASAV, LDA )
410 EQUED = EQUEDS( IEQUED )
411.EQ.
IF( IEQUED1 ) THEN
417 DO 100 IFACT = 1, NFACT
418 FACT = FACTS( IFACT )
419 PREFAC = LSAME( FACT, 'f
' )
420 NOFACT = LSAME( FACT, 'n
' )
421 EQUIL = LSAME( FACT, 'e
' )
429.NOT.
ELSE IF( NOFACT ) THEN
436 CALL SLACPY( 'full
', KL+KU+1, N, ASAV, LDA,
437 $ AFB( KL+1 ), LDAFB )
438.OR..GT.
IF( EQUIL IEQUED1 ) THEN
443 CALL SGBEQU( N, N, KL, KU, AFB( KL+1 ),
444 $ LDAFB, S, S( N+1 ), ROWCND,
445 $ COLCND, AMAX, INFO )
446.EQ..AND..GT.
IF( INFO0 N0 ) THEN
447 IF( LSAME( EQUED, 'r
' ) ) THEN
450 ELSE IF( LSAME( EQUED, 'c
' ) ) THEN
453 ELSE IF( LSAME( EQUED, 'b
' ) ) THEN
460 CALL SLAQGB( N, N, KL, KU, AFB( KL+1 ),
461 $ LDAFB, S, S( N+1 ),
462 $ ROWCND, COLCND, AMAX,
477 ANORMO = SLANGB( '1
', N, KL, KU, AFB( KL+1 ),
479 ANORMI = SLANGB( 'i
', N, KL, KU, AFB( KL+1 ),
484 CALL SGBTRF( N, N, KL, KU, AFB, LDAFB, IWORK,
489 CALL SLASET( 'full
', N, N, ZERO, ONE, WORK,
492 CALL SGBTRS( 'no transpose
', N, KL, KU, N,
493 $ AFB, LDAFB, IWORK, WORK, LDB,
498 AINVNM = SLANGE( '1
', N, N, WORK, LDB,
500.LE..OR..LE.
IF( ANORMOZERO AINVNMZERO ) THEN
503 RCONDO = ( ONE / ANORMO ) / AINVNM
509 AINVNM = SLANGE( 'i
', N, N, WORK, LDB,
511.LE..OR..LE.
IF( ANORMIZERO AINVNMZERO ) THEN
514 RCONDI = ( ONE / ANORMI ) / AINVNM
518 DO 90 ITRAN = 1, NTRAN
522 TRANS = TRANSS( ITRAN )
523.EQ.
IF( ITRAN1 ) THEN
531 CALL SLACPY( 'full
', KL+KU+1, N, ASAV, LDA,
538 CALL SLARHS( PATH, XTYPE, 'full
', TRANS, N,
539 $ N, KL, KU, NRHS, A, LDA, XACT,
540 $ LDB, B, LDB, ISEED, INFO )
542 CALL SLACPY( 'full
', N, NRHS, B, LDB, BSAV,
545.AND..EQ.
IF( NOFACT ITRAN1 ) THEN
552 CALL SLACPY( 'full
', KL+KU+1, N, A, LDA,
553 $ AFB( KL+1 ), LDAFB )
554 CALL SLACPY( 'full
', N, NRHS, B, LDB, X,
558 CALL SGBSV( N, KL, KU, NRHS, AFB, LDAFB,
559 $ IWORK, X, LDB, INFO )
564 $ CALL ALAERH( PATH, 'sgbsv ', INFO,
565 $ IZERO, ' ', N, N, KL, KU,
566 $ NRHS, IMAT, NFAIL, NERRS,
572 CALL SGBT01( N, N, KL, KU, A, LDA, AFB,
573 $ LDAFB, IWORK, WORK,
576.EQ.
IF( IZERO0 ) THEN
581 CALL SLACPY( 'full
', N, NRHS, B, LDB,
583 CALL SGBT02( 'no transpose
', N, N, KL,
584 $ KU, NRHS, A, LDA, X, LDB,
591 CALL SGET04( N, NRHS, X, LDB, XACT,
592 $ LDB, RCONDC, RESULT( 3 ) )
600.GE.
IF( RESULT( K )THRESH ) THEN
601.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
602 $ CALL ALADHD( NOUT, PATH )
603 WRITE( NOUT, FMT = 9997 )'sgbsv ',
604 $ N, KL, KU, IMAT, K, RESULT( K )
614 $ CALL SLASET( 'full
', 2*KL+KU+1, N, ZERO,
616 CALL SLASET( 'full
', N, NRHS, ZERO, ZERO, X,
618.GT..AND..GT.
IF( IEQUED1 N0 ) THEN
623 CALL SLAQGB( N, N, KL, KU, A, LDA, S,
624 $ S( N+1 ), ROWCND, COLCND,
632 CALL SGBSVX( FACT, TRANS, N, KL, KU, NRHS, A,
633 $ LDA, AFB, LDAFB, IWORK, EQUED,
634 $ S, S( N+1 ), B, LDB, X, LDB,
635 $ RCOND, RWORK, RWORK( NRHS+1 ),
636 $ WORK, IWORK( N+1 ), INFO )
641 $ CALL ALAERH( PATH, 'sgbsvx', INFO, IZERO,
642 $ FACT // TRANS, N, N, KL, KU,
643 $ NRHS, IMAT, NFAIL, NERRS,
649.NE..AND..LE.
IF( INFO0 INFON) THEN
652 DO 60 I = MAX( KU+2-J, 1 ),
653 $ MIN( N+KU+1-J, KL+KU+1 )
654 ANRMPV = MAX( ANRMPV,
655 $ ABS( A( I+( J-1 )*LDA ) ) )
658 RPVGRW = SLANTB( 'm
', 'u
', 'n
', INFO,
659 $ MIN( INFO-1, KL+KU ),
660 $ AFB( MAX( 1, KL+KU+2-INFO ) ),
662.EQ.
IF( RPVGRWZERO ) THEN
665 RPVGRW = ANRMPV / RPVGRW
668 RPVGRW = SLANTB( 'm
', 'u
', 'n
', N, KL+KU,
670.EQ.
IF( RPVGRWZERO ) THEN
673 RPVGRW = SLANGB( 'm
', N, KL, KU, A,
674 $ LDA, WORK ) / RPVGRW
677 RESULT( 7 ) = ABS( RPVGRW-WORK( 1 ) ) /
678 $ MAX( WORK( 1 ), RPVGRW ) /
681.NOT.
IF( PREFAC ) THEN
686 CALL SGBT01( N, N, KL, KU, A, LDA, AFB,
687 $ LDAFB, IWORK, WORK,
699 CALL SLACPY( 'full
', N, NRHS, BSAV, LDB,
701 CALL SGBT02( TRANS, N, N, KL, KU, NRHS,
702 $ ASAV, LDA, X, LDB, WORK, LDB,
709.OR..AND.
IF( NOFACT ( PREFAC
710 $ LSAME( EQUED, 'n
' ) ) ) THEN
711 CALL SGET04( N, NRHS, X, LDB, XACT,
712 $ LDB, RCONDC, RESULT( 3 ) )
714.EQ.
IF( ITRAN1 ) THEN
719 CALL SGET04( N, NRHS, X, LDB, XACT,
720 $ LDB, ROLDC, RESULT( 3 ) )
726 CALL SGBT05( TRANS, N, KL, KU, NRHS, ASAV,
727 $ LDA, B, LDB, X, LDB, XACT,
728 $ LDB, RWORK, RWORK( NRHS+1 ),
737 RESULT( 6 ) = SGET06( RCOND, RCONDC )
742.NOT.
IF( TRFCON ) THEN
744.GE.
IF( RESULT( K )THRESH ) THEN
745.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
746 $ CALL ALADHD( NOUT, PATH )
748 WRITE( NOUT, FMT = 9995 )
749 $ 'sgbsvx', FACT, TRANS, N, KL,
750 $ KU, EQUED, IMAT, K,
753 WRITE( NOUT, FMT = 9996 )
754 $ 'sgbsvx', FACT, TRANS, N, KL,
755 $ KU, IMAT, K, RESULT( K )
760 NRUN = NRUN + NTESTS - K1 + 1
762.GE..AND..NOT.
IF( RESULT( 1 )THRESH
764.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
765 $ CALL ALADHD( NOUT, PATH )
767 WRITE( NOUT, FMT = 9995 )'sgbsvx',
768 $ FACT, TRANS, N, KL, KU, EQUED,
769 $ IMAT, 1, RESULT( 1 )
771 WRITE( NOUT, FMT = 9996 )'sgbsvx',
772 $ FACT, TRANS, N, KL, KU, IMAT, 1,
778.GE.
IF( RESULT( 6 )THRESH ) THEN
779.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
780 $ CALL ALADHD( NOUT, PATH )
782 WRITE( NOUT, FMT = 9995 )'sgbsvx',
783 $ FACT, TRANS, N, KL, KU, EQUED,
784 $ IMAT, 6, RESULT( 6 )
786 WRITE( NOUT, FMT = 9996 )'sgbsvx',
787 $ FACT, TRANS, N, KL, KU, IMAT, 6,
793.GE.
IF( RESULT( 7 )THRESH ) THEN
794.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
795 $ CALL ALADHD( NOUT, PATH )
797 WRITE( NOUT, FMT = 9995 )'sgbsvx',
798 $ FACT, TRANS, N, KL, KU, EQUED,
799 $ IMAT, 7, RESULT( 7 )
801 WRITE( NOUT, FMT = 9996 )'sgbsvx',
802 $ FACT, TRANS, N, KL, KU, IMAT, 7,
820 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
822 9999 FORMAT( ' *** in
sdrvgb, la=
', I5, ' is too small
for n=
', I5,
823 $ ', ku=
', I5, ', kl=
', I5, / ' ==> increase la to at least
',
825 9998 FORMAT( ' *** in
sdrvgb, lafb=
', I5, ' is too small
for n=
', I5,
826 $ ', ku=
', I5, ', kl=
', I5, /
827 $ ' ==> increase lafb to at least
', I5 )
828 9997 FORMAT( 1X, A, ', n=
', I5, ', kl=
', I5, ', ku=
', I5, ',
type ',
829 $ I1, ', test(
', I1, ')=
', G12.5 )
830 9996 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''',
', I5, ',
', I5, ',
',
831 $ I5, ',...),
type ', I1, ', test(
', I1, ')=
', G12.5 )
832 9995 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''',
', I5, ',
', I5, ',
',
833 $ I5, ',...), equed=
''', A1, ''',
type ', I1, ', test(
', I1,
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine slaqgb(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed)
SLAQGB scales a general band matrix, using row and column scaling factors computed by sgbequ.
subroutine sgbtrf(m, n, kl, ku, ab, ldab, ipiv, info)
SGBTRF
subroutine sgbequ(m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, info)
SGBEQU
subroutine sgbtrs(trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
SGBTRS
subroutine sgbsvx(fact, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, equed, r, c, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
SGBSVX computes the solution to system of linear equations A * X = B for GB matrices
subroutine sgbsv(n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
SGBSV computes the solution to system of linear equations A * X = B for GB matrices (simple driver)
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine sgbt05(trans, n, kl, ku, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
SGBT05
subroutine sgbt02(trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
SGBT02
subroutine serrvx(path, nunit)
SERRVX
subroutine sgbt01(m, n, kl, ku, a, lda, afac, ldafac, ipiv, work, resid)
SGBT01
subroutine sdrvgb(dotype, nn, nval, nrhs, thresh, tsterr, a, la, afb, lafb, asav, b, bsav, x, xact, s, work, rwork, iwork, nout)
SDRVGB
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4
for(i8=*sizetab-1;i8 >=0;i8--)