152 SUBROUTINE dchktb( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
153 $ NMAX, AB, AINV, B, X, XACT, WORK, RWORK, IWORK,
162 INTEGER , NN, NNS, NOUT
163 DOUBLE PRECISION THRESH
167 INTEGER IWORK( * ), NSVAL( * ), NVAL( * )
168 DOUBLE PRECISION AB( * ), AINV( * ), ( * ), RWORK( * ),
169 $ work( * ), x( * ), xact( * )
175 INTEGER NTYPE1, NTYPES
176 PARAMETER ( = 9, ntypes = 17 )
178 parameter( ntests = 8 )
180 parameter( ntran = 3 )
181 DOUBLE PRECISION ONE, ZERO
182 parameter( one = 1.0d+0, zero = 0.0d+0 )
185 CHARACTER , NORM, TRANS, UPLO, XTYPE
187 INTEGER I, IDIAG, IK, IMAT, IN, , IRHS, ITRAN,
188 $ iuplo, j, k, kd, lda, ldab, n, nerrs, nfail,
189 $ nimat, nimat2, nk, nrhs, nrun
190 DOUBLE PRECISION AINVNM, ANORM, RCOND, RCONDC, RCONDI, RCONDO,
194 CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
195 INTEGER ISEED( 4 ), ISEEDY( 4 )
196 DOUBLE PRECISION RESULT( NTESTS )
200 DOUBLE PRECISION DLANTB, DLANTR
201 EXTERNAL lsame, dlantb, dlantr
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 ) =
'Double precision'
235 iseed( i ) = iseedy( i )
241 $
CALL derrtr( 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 dlattb( imat, uplo,
'No transpose', diag, iseed,
292 $ n, kd, ab, ldab, x, work, info )
296 IF( lsame( diag, 'n
' ) ) THEN
305 CALL DLASET( 'full
', N, N, ZERO, ONE, AINV, LDA )
306 IF( LSAME( UPLO, 'u
' ) ) THEN
308 CALL DTBSV( UPLO, 'no transpose
', DIAG, J, KD,
309 $ AB, LDAB, AINV( ( J-1 )*LDA+1 ), 1 )
313 CALL DTBSV( UPLO, 'no transpose
', DIAG, N-J+1,
314 $ KD, AB( ( J-1 )*LDAB+1 ), LDAB,
315 $ AINV( ( J-1 )*LDA+J ), 1 )
321 ANORM = DLANTB( '1
', UPLO, DIAG, N, KD, AB, LDAB,
323 AINVNM = DLANTR( '1
', UPLO, DIAG, N, N, AINV, LDA,
325.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
328 RCONDO = ( ONE / ANORM ) / AINVNM
333 ANORM = DLANTB( 'i
', UPLO, DIAG, N, KD, AB, LDAB,
335 AINVNM = DLANTR( '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 DLARHS( PATH, XTYPE, UPLO, TRANS, N, N, KD,
365 $ IDIAG, NRHS, AB, LDAB, XACT, LDA,
366 $ B, LDA, ISEED, INFO )
368 CALL DLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
371 CALL DTBTRS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
372 $ LDAB, X, LDA, INFO )
377 $ CALL ALAERH( PATH, 'dtbtrs', INFO, 0,
378 $ UPLO // TRANS // DIAG, N, N, KD,
379 $ KD, NRHS, IMAT, NFAIL, NERRS,
382 CALL DTBT02( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
383 $ LDAB, X, LDA, B, LDA, WORK,
389 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
397 CALL DTBRFS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
398 $ LDAB, B, LDA, X, LDA, RWORK,
399 $ RWORK( NRHS+1 ), WORK, IWORK,
405 $ CALL ALAERH( PATH, 'dtbrfs', INFO, 0,
406 $ UPLO // TRANS // DIAG, N, N, KD,
407 $ KD, NRHS, IMAT, NFAIL, NERRS,
410 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
412 CALL DTBT05( 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 dtbcon( norm, uplo, diag, n, kd, ab, ldab,
446 $ rcond, work, iwork, info )
451 $
CALL alaerh( path,
'DTBCON', info, 0,
452 $ norm // uplo // diag, n, n, kd, kd,
453 $ -1, imat, nfail, nerrs, nout )
455 CALL dtbt06( rcond, rcondc, uplo, diag, n, kd, ab,
456 $ ldab, rwork, result( 6 ) )
461 IF( result( 6 ).GE.thresh )
THEN
462 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
463 $
CALL alahd( nout, path )
464 WRITE( nout, fmt = 9998 )
'DTBCON'
465 $ diag, n, kd, imat, 6, result( 6 )
475 DO 120 imat = ntype1 + 1, nimat2
479 IF( .NOT.dotype( imat ) )
486 uplo = uplos( iuplo )
487 DO 100 itran = 1, ntran
491 trans = transs( itran )
496 CALL dlattb( imat, uplo, trans, diag, iseed, n, kd,
497 $ ab, ldab, x, work, info )
503 CALL dcopy( n, x, 1, b, 1 )
504 CALL dlatbs( uplo, trans, diag,
'N', n, kd, ab,
505 $ ldab, b, scale, rwork, info )
510 $
CALL alaerh( path,
'DLATBS', info, 0,
511 $ uplo // trans // diag //
'N', n, n,
512 $ kd, kd, -1, imat, nfail, nerrs,
515 CALL dtbt03( uplo, trans, diag, n, kd, 1, ab, ldab,
516 $ scale, rwork, one, b, lda, x, lda,
517 $ work, result( 7 ) )
522 CALL dcopy( n, x, 1, b, 1 )
523 CALL dlatbs( uplo, trans, diag,
'Y', n, kd, ab,
524 $ ldab, b, scale, rwork, info )
529 $
CALL alaerh( path,
'DLATBS', info, 0,
530 $ uplo // trans // diag //
'Y', n, n,
531 $ kd, kd, -1, imat, nfail, nerrs,
534 CALL dtbt03( uplo, trans, diag, n, kd, 1, ab, ldab,
535 $ scale, rwork, one, b, lda, x, lda,
536 $ work, result( 8 ) )
541 IF( result( 7 ).GE.thresh )
THEN
542 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
543 $
CALL alahd( nout, path )
544 WRITE( nout, fmt = 9997 )
'DLATBS', uplo, trans,
545 $ diag,
'N', n, kd, imat, 7, result( 7 )
548 IF( result( 8 ).GE.thresh )
THEN
549 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
550 $
CALL alahd( nout, path )
551 WRITE( nout, fmt = 9997 )
'DLATBS', 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(',