152 SUBROUTINE schktb( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
153 $ NMAX, AB, AINV, B, X, XACT, WORK, RWORK, IWORK,
162 INTEGER NMAX, NN, NNS, NOUT
167 INTEGER IWORK( * ), NSVAL( * ), NVAL( * )
168 REAL AB( * ), AINV( * ), B( * ), RWORK( * ),
169 $ work( * ), x( * ), xact( * )
175 INTEGER NTYPE1, NTYPES
176 PARAMETER ( NTYPE1 = 9, ntypes = 17 )
178 parameter( ntests = 8 )
180 parameter( ntran = 3 )
182 parameter( one = 1.0e+0, zero = 0.0e+0 )
185 CHARACTER DIAG, NORM, TRANS, UPLO, XTYPE
187 INTEGER I, IDIAG, IK, IMAT, IN, INFO, IRHS, ITRAN,
188 $ iuplo, j, k, kd, lda, ldab, n, nerrs, nfail,
189 $ nimat, nimat2, nk, nrhs, nrun
190 REAL AINVNM, ANORM, RCOND, RCONDC, RCONDI, RCONDO,
194 CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
195 INTEGER ISEED( 4 ), ISEEDY( 4 )
196 REAL RESULT( NTESTS )
201 EXTERNAL lsame,
slantb, slantr
212 INTEGER INFOT, IOUNIT
215 COMMON / infoc / infot, iounit, ok, lerr
216 COMMON / srnamc / srnamt
222 DATA iseedy / 1988, 1989, 1990, 1991 /
223 DATA uplos /
'U',
'L' / , transs /
'N',
'T',
'C' /
229 path( 1: 1 ) =
'Single precision'
235 iseed( i ) = iseedy( i )
241 $
CALL serrtr( path, nout )
266 ELSE IF( ik.EQ.2 )
THEN
268 ELSE IF( ik.EQ.3 )
THEN
270 ELSE IF( ik.EQ.4 )
THEN
275 DO 90 imat = 1, nimat
279 IF( .NOT.dotype( imat ) )
286 uplo = uplos( iuplo )
291 CALL slattb( imat, uplo,
'No transpose', diag, iseed,
292 $ n, kd, ab, ldab, x, work, info )
296 IF( lsame( diag,
'N' ) )
THEN
305 CALL slaset(
'Full', n, n, zero, one, ainv, lda )
306 IF( lsame( uplo,
'U' ) )
THEN
308 CALL stbsv( uplo,
'No transpose', diag, j, kd,
309 $ ab, ldab, ainv( ( j-1 )*lda+1 ), 1 )
313 CALL stbsv( uplo,
'No transpose', diag, n-j+1,
314 $ kd, ab( ( j-1 )*ldab+1 ), ldab,
315 $ ainv( ( j-1 )*lda+j ), 1 )
321 anorm =
slantb(
'1', uplo, diag, n, kd, ab, ldab,
323 ainvnm = slantr(
'1', uplo, diag, n, n, ainv, lda,
325 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
328 rcondo = ( one / anorm ) / ainvnm
333 anorm =
slantb(
'I', uplo, diag, n, kd, ab, ldab,
335 ainvnm = slantr( 'i
', UPLO, DIAG, N, N, AINV, LDA,
337.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
340 RCONDI = ( ONE / ANORM ) / AINVNM
347 DO 50 ITRAN = 1, NTRAN
351 TRANS = TRANSS( ITRAN )
352.EQ.
IF( ITRAN1 ) THEN
364 CALL SLARHS( PATH, XTYPE, UPLO, TRANS, N, N, KD,
365 $ IDIAG, NRHS, AB, LDAB, XACT, LDA,
366 $ B, LDA, ISEED, INFO )
368 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
371 CALL STBTRS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
372 $ LDAB, X, LDA, INFO )
377 $ CALL ALAERH( PATH, 'stbtrs', INFO, 0,
378 $ UPLO // TRANS // DIAG, N, N, KD,
379 $ KD, NRHS, IMAT, NFAIL, NERRS,
382 CALL STBT02( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
383 $ LDAB, X, LDA, B, LDA, WORK,
389 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
397 CALL STBRFS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
398 $ LDAB, B, LDA, X, LDA, RWORK,
399 $ RWORK( NRHS+1 ), WORK, IWORK,
405 $ CALL ALAERH( PATH, 'stbrfs', INFO, 0,
406 $ UPLO // TRANS // DIAG, N, N, KD,
407 $ KD, NRHS, IMAT, NFAIL, NERRS,
410 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
412 CALL STBT05( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
413 $ LDAB, B, LDA, X, LDA, XACT, LDA,
414 $ RWORK, RWORK( NRHS+1 ),
421.GE.
IF( RESULT( K )THRESH ) THEN
422.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
423 $ CALL ALAHD( NOUT, PATH )
424 WRITE( NOUT, FMT = 9999 )UPLO, TRANS,
425 $ DIAG, N, KD, NRHS, IMAT, K, RESULT( K )
437.EQ.
IF( ITRAN1 ) THEN
445 CALL STBCON( NORM, UPLO, DIAG, N, KD, AB, LDAB,
446 $ RCOND, WORK, IWORK, INFO )
451 $ CALL ALAERH( PATH, 'stbcon', INFO, 0,
452 $ NORM // UPLO // DIAG, N, N, KD, KD,
453 $ -1, IMAT, NFAIL, NERRS, NOUT )
455 CALL STBT06( RCOND, RCONDC, UPLO, DIAG, N, KD, AB,
456 $ LDAB, RWORK, RESULT( 6 ) )
461.GE.
IF( RESULT( 6 )THRESH ) THEN
462.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
463 $ CALL ALAHD( NOUT, PATH )
464 WRITE( NOUT, FMT = 9998 ) 'stbcon', NORM, UPLO,
465 $ DIAG, N, KD, IMAT, 6, RESULT( 6 )
475 DO 120 IMAT = NTYPE1 + 1, NIMAT2
479.NOT.
IF( DOTYPE( IMAT ) )
486 UPLO = UPLOS( IUPLO )
487 DO 100 ITRAN = 1, NTRAN
491 TRANS = TRANSS( ITRAN )
496 CALL SLATTB( IMAT, UPLO, TRANS, DIAG, ISEED, N, KD,
497 $ AB, LDAB, X, WORK, INFO )
503 CALL SCOPY( N, X, 1, B, 1 )
504 CALL SLATBS( UPLO, TRANS, DIAG, 'n
', N, KD, AB,
505 $ LDAB, B, SCALE, RWORK, INFO )
510 $ CALL ALAERH( PATH, 'slatbs', INFO, 0,
511 $ UPLO // TRANS // DIAG // 'n
', N, N,
512 $ KD, KD, -1, IMAT, NFAIL, NERRS,
515 CALL STBT03( UPLO, TRANS, DIAG, N, KD, 1, AB, LDAB,
516 $ SCALE, RWORK, ONE, B, LDA, X, LDA,
517 $ WORK, RESULT( 7 ) )
522 CALL SCOPY( N, X, 1, B, 1 )
523 CALL SLATBS( UPLO, TRANS, DIAG, 'y
', N, KD, AB,
524 $ LDAB, B, SCALE, RWORK, INFO )
529 $ CALL ALAERH( PATH, 'slatbs', INFO, 0,
530 $ UPLO // TRANS // DIAG // 'y
', N, N,
531 $ KD, KD, -1, IMAT, NFAIL, NERRS,
534 CALL STBT03( UPLO, TRANS, DIAG, N, KD, 1, AB, LDAB,
535 $ SCALE, RWORK, ONE, B, LDA, X, LDA,
536 $ WORK, RESULT( 8 ) )
541.GE.
IF( RESULT( 7 )THRESH ) THEN
542.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
543 $ CALL ALAHD( NOUT, PATH )
544 WRITE( NOUT, FMT = 9997 )'slatbs', UPLO, TRANS,
545 $ DIAG, 'n
', N, KD, IMAT, 7, RESULT( 7 )
548.GE.
IF( RESULT( 8 )THRESH ) THEN
549.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
550 $ CALL ALAHD( NOUT, PATH )
551 WRITE( NOUT, FMT = 9997 )'slatbs', UPLO, TRANS,
552 $ DIAG, 'y
', N, KD, IMAT, 8, RESULT( 8 )
564 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
566 9999 FORMAT( ' uplo=
''', A1, ''', trans=
''', A1, ''',
567 $ diag=
''', A1, ''', n=
', I5, ', kd=
', I5, ', nrhs=
', I5,
568 $ ',
type ', I2, ', test(
', I2, ')=
', G12.5 )
569 9998 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''',
''', A1, ''',
',
570 $ I5, ',
', I5, ', ... ),
type ', I2, ', test(
', I2, ')=
',
572 9997 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''',
''', A1, ''',
''',
573 $ A1, ''',
', I5, ',
', I5, ', ... ),
type ', I2, ', test(
',
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 alasum(type, nout, nfail, nrun, nerrs)
ALASUM
subroutine alahd(iounit, path)
ALAHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine slatbs(uplo, trans, diag, normin, n, kd, ab, ldab, x, scale, cnorm, info)
SLATBS solves a triangular banded system of equations.
real function slantb(norm, uplo, diag, n, k, ab, ldab, work)
SLANTB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine stbtrs(uplo, trans, diag, n, kd, nrhs, ab, ldab, b, ldb, info)
STBTRS
subroutine stbrfs(uplo, trans, diag, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, ferr, berr, work, iwork, info)
STBRFS
subroutine stbcon(norm, uplo, diag, n, kd, ab, ldab, rcond, work, iwork, info)
STBCON
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine stbsv(uplo, trans, diag, n, k, a, lda, x, incx)
STBSV
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine stbt02(uplo, trans, diag, n, kd, nrhs, ab, ldab, x, ldx, b, ldb, work, resid)
STBT02
subroutine slattb(imat, uplo, trans, diag, iseed, n, kd, ab, ldab, b, work, info)
SLATTB
subroutine stbt03(uplo, trans, diag, n, kd, nrhs, ab, ldab, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
STBT03
subroutine stbt06(rcond, rcondc, uplo, diag, n, kd, ab, ldab, work, rat)
STBT06
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine schktb(dotype, nn, nval, nns, nsval, thresh, tsterr, nmax, ab, ainv, b, x, xact, work, rwork, iwork, nout)
SCHKTB
subroutine serrtr(path, nunit)
SERRTR
subroutine stbt05(uplo, trans, diag, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
STBT05