147 SUBROUTINE cchktb( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
148 $ NMAX, AB, AINV, B, X, XACT, WORK, RWORK, NOUT )
156 INTEGER NMAX, NN, NNS, NOUT
161 INTEGER NSVAL( * ), NVAL( * )
163 COMPLEX AB( * ), AINV( * ), B( * ), WORK( * ), X( * ),
170 INTEGER NTYPE1, NTYPES
171 parameter( ntype1 = 9, ntypes = 17 )
173 parameter( ntests = 8 )
175 parameter( ntran = 3 )
177 parameter( one = 1.0e+0, zero = 0.0e+0 )
180 CHARACTER DIAG, NORM, TRANS, UPLO, XTYPE
182 INTEGER I, IDIAG, IK, IMAT, IN, INFO, IRHS, ,
183 $ iuplo, j, k, kd, lda, ldab, n, nerrs, nfail,
184 $ nimat, nimat2, nk, nrhs, nrun
185 REAL AINVNM, ANORM, RCOND, RCONDC, RCONDI, RCONDO,
189 CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
190 INTEGER ISEED( 4 ), ISEEDY( 4 )
191 REAL RESULT( NTESTS )
196 EXTERNAL lsame, clantb, clantr
207 INTEGER INFOT, IOUNIT
210 COMMON / infoc / infot, iounit, ok, lerr
211 COMMON / srnamc / srnamt
217 DATA iseedy / 1988, 1989, 1990, 1991 /
218 DATA uplos /
'U',
'L' / , transs /
'N',
'T',
'C' /
224 path( 1: 1 ) =
'Complex precision'
230 iseed( i ) = iseedy( i )
236 $
CALL cerrtr( path, nout )
261 ELSE IF( ik.EQ.2 )
THEN
263 ELSE IF( ik.EQ.3 )
THEN
265 ELSE IF( ik.EQ.4 )
THEN
270 DO 90 imat = 1, nimat
274 IF( .NOT.dotype( imat ) )
281 uplo = uplos( iuplo )
286 CALL clattb( imat, uplo,
'No transpose', diag, iseed,
287 $ n, kd, ab, ldab, x, work, rwork, info )
291 IF(
lsame( diag,
'N' ) )
THEN
301 $
cmplx( one ), ainv, lda )
302 IF(
lsame( uplo,
'U' ) )
THEN
304 CALL ctbsv( uplo,
'No transpose', diag, j, kd,
305 $ ab, ldab, ainv( ( j-1 )*lda+1 ), 1 )
309 CALL ctbsv( uplo,
'No transpose', diag, n-j+1,
310 $ kd, ab( ( j-1 )*ldab+1 ), ldab,
311 $ ainv( ( j-1 )*lda+j ), 1 )
317 anorm = clantb(
'1', uplo, diag, n, kd, ab, ldab,
319 ainvnm = clantr(
'1', uplo, diag, n, n, ainv, lda,
321 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
324 rcondo = ( one / anorm ) / ainvnm
329 anorm = clantb(
'I', uplo, diag, n, kd, ab, ldab,
331 ainvnm = clantr(
'I', uplo, diag, n, n, ainv, lda,
336 rcondi = ( one / anorm ) / ainvnm
343 DO 50 itran = 1, ntran
347 trans = transs( itran )
348 IF( itran.EQ.1 )
THEN
360 CALL CLARHS( PATH, XTYPE, UPLO, TRANS, N, N, KD,
361 $ IDIAG, NRHS, AB, LDAB, XACT, LDA,
362 $ B, LDA, ISEED, INFO )
364 CALL CLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
367 CALL CTBTRS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
368 $ LDAB, X, LDA, INFO )
373 $ CALL ALAERH( PATH, 'ctbtrs', INFO, 0,
374 $ UPLO // TRANS // DIAG, N, N, KD,
375 $ KD, NRHS, IMAT, NFAIL, NERRS,
378 CALL CTBT02( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
379 $ LDAB, X, LDA, B, LDA, WORK, RWORK,
385 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
393 CALL CTBRFS( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
394 $ LDAB, B, LDA, X, LDA, RWORK,
395 $ RWORK( NRHS+1 ), WORK,
396 $ RWORK( 2*NRHS+1 ), INFO )
401 $ CALL ALAERH( PATH, 'ctbrfs', INFO, 0,
402 $ UPLO // TRANS // DIAG, N, N, KD,
403 $ KD, NRHS, IMAT, NFAIL, NERRS,
406 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
408 CALL CTBT05( UPLO, TRANS, DIAG, N, KD, NRHS, AB,
409 $ LDAB, B, LDA, X, LDA, XACT, LDA,
410 $ RWORK, RWORK( NRHS+1 ),
417.GE.
IF( RESULT( K )THRESH ) THEN
418.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
419 $ CALL ALAHD( NOUT, PATH )
420 WRITE( NOUT, FMT = 9999 )UPLO, TRANS,
421 $ DIAG, N, KD, NRHS, IMAT, K, RESULT( K )
433.EQ.
IF( ITRAN1 ) THEN
441 CALL CTBCON( NORM, UPLO, DIAG, N, KD, AB, LDAB,
442 $ RCOND, WORK, RWORK, INFO )
447 $ CALL ALAERH( PATH, 'ctbcon', INFO, 0,
448 $ NORM // UPLO // DIAG, N, N, KD, KD,
449 $ -1, IMAT, NFAIL, NERRS, NOUT )
451 CALL CTBT06( RCOND, RCONDC, UPLO, DIAG, N, KD, AB,
452 $ LDAB, RWORK, RESULT( 6 ) )
456.GE.
IF( RESULT( 6 )THRESH ) THEN
457.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
458 $ CALL ALAHD( NOUT, PATH )
459 WRITE( NOUT, FMT = 9998 ) 'ctbcon', NORM, UPLO,
460 $ DIAG, N, KD, IMAT, 6, RESULT( 6 )
470 DO 120 IMAT = NTYPE1 + 1, NIMAT2
474.NOT.
IF( DOTYPE( IMAT ) )
481 UPLO = UPLOS( IUPLO )
482 DO 100 ITRAN = 1, NTRAN
486 TRANS = TRANSS( ITRAN )
491 CALL CLATTB( IMAT, UPLO, TRANS, DIAG, ISEED, N, KD,
492 $ AB, LDAB, X, WORK, RWORK, INFO )
498 CALL CCOPY( N, X, 1, B, 1 )
499 CALL CLATBS( UPLO, TRANS, DIAG, 'n
', N, KD, AB,
500 $ LDAB, B, SCALE, RWORK, INFO )
505 $ CALL ALAERH( PATH, 'clatbs', INFO, 0,
506 $ UPLO // TRANS // DIAG // 'n
', N, N,
507 $ KD, KD, -1, IMAT, NFAIL, NERRS,
510 CALL CTBT03( UPLO, TRANS, DIAG, N, KD, 1, AB, LDAB,
511 $ SCALE, RWORK, ONE, B, LDA, X, LDA,
512 $ WORK, RESULT( 7 ) )
517 CALL CCOPY( N, X, 1, B, 1 )
518 CALL CLATBS( UPLO, TRANS, DIAG, 'y
', N, KD, AB,
519 $ LDAB, B, SCALE, RWORK, INFO )
524 $ CALL ALAERH( PATH, 'clatbs', INFO, 0,
525 $ UPLO // TRANS // DIAG // 'y
', N, N,
526 $ KD, KD, -1, IMAT, NFAIL, NERRS,
529 CALL CTBT03( UPLO, TRANS, DIAG, N, KD, 1, AB, LDAB,
530 $ SCALE, RWORK, ONE, B, LDA, X, LDA,
531 $ WORK, RESULT( 8 ) )
536.GE.
IF( RESULT( 7 )THRESH ) THEN
537.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
538 $ CALL ALAHD( NOUT, PATH )
539 WRITE( NOUT, FMT = 9997 )'clatbs', UPLO, TRANS,
540 $ DIAG, 'n
', N, KD, IMAT, 7, RESULT( 7 )
543.GE.
IF( RESULT( 8 )THRESH ) THEN
544.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
545 $ CALL ALAHD( NOUT, PATH )
546 WRITE( NOUT, FMT = 9997 )'clatbs', UPLO, TRANS,
547 $ DIAG, 'y
', N, KD, IMAT, 8, RESULT( 8 )
559 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
561 9999 FORMAT( ' uplo=
''', A1, ''', trans=
''', A1, ''',
562 $ diag=
''', A1, ''', n=
', I5, ', kd=
', I5, ', nrhs=
', I5,
563 $ ',
type ', I2, ', test(
', I2, ')=
', G12.5 )
564 9998 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''',
''', A1, ''',
',
565 $ I5, ',
', I5, ', ... ),
type ', I2, ', test(
', I2, ')=
',
567 9997 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''',
''', A1, ''',
''',
568 $ A1, ''',
', I5, ',
', I5, ', ... ),
type ', I2, ', test(
',
logical function lsame(ca, cb)
LSAME
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 clatbs(uplo, trans, diag, normin, n, kd, ab, ldab, x, scale, cnorm, info)
CLATBS solves a triangular banded system of equations.
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine ctbcon(norm, uplo, diag, n, kd, ab, ldab, rcond, work, rwork, info)
CTBCON
subroutine ctbrfs(uplo, trans, diag, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, ferr, berr, work, rwork, info)
CTBRFS
subroutine ctbtrs(uplo, trans, diag, n, kd, nrhs, ab, ldab, b, ldb, info)
CTBTRS
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine ctbsv(uplo, trans, diag, n, k, a, lda, x, incx)
CTBSV
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine ctbt06(rcond, rcondc, uplo, diag, n, kd, ab, ldab, rwork, rat)
CTBT06
subroutine cerrtr(path, nunit)
CERRTR
subroutine clattb(imat, uplo, trans, diag, iseed, n, kd, ab, ldab, b, work, rwork, info)
CLATTB
subroutine ctbt02(uplo, trans, diag, n, kd, nrhs, ab, ldab, x, ldx, b, ldb, work, rwork, resid)
CTBT02
subroutine ctbt03(uplo, trans, diag, n, kd, nrhs, ab, ldab, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
CTBT03
subroutine cchktb(dotype, nn, nval, nns, nsval, thresh, tsterr, nmax, ab, ainv, b, x, xact, work, rwork, nout)
CCHKTB
subroutine cget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
CGET04
subroutine ctbt05(uplo, trans, diag, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
CTBT05