160 SUBROUTINE cchktr( DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL,
161 $ THRESH, TSTERR, NMAX, A, AINV, B, X, XACT,
162 $ WORK, RWORK, NOUT )
170 INTEGER NMAX, NN, NNB, NNS, NOUT
175 INTEGER NBVAL( * ), NSVAL( * ), NVAL( * )
177 COMPLEX A( * ), AINV( * ), B( * ), WORK( * ), X( * ),
184 INTEGER NTYPE1, NTYPES
185 PARAMETER ( NTYPE1 = 10, ntypes = 18 )
187 parameter( ntests = 9 )
189 parameter( ntran = 3 )
191 parameter( one = 1.0e0, zero = 0.0e0 )
194 CHARACTER DIAG, NORM, TRANS, UPLO, XTYPE
196 INTEGER I, IDIAG, IMAT, IN, INB, INFO, IRHS, ITRAN,
197 $ iuplo, k, lda, n, nb, nerrs, nfail, nrhs, nrun
198 REAL AINVNM, ANORM, DUMMY, RCOND, RCONDC, RCONDI,
202 CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
203 INTEGER ISEED( 4 ), ISEEDY( 4 )
204 REAL RESULT( NTESTS )
209 EXTERNAL lsame, clantr
220 INTEGER INFOT, IOUNIT
223 COMMON / infoc / infot, iounit, ok, lerr
224 COMMON / srnamc / srnamt
230 DATA iseedy / 1988, 1989, 1990, 1991 /
231 DATA uplos /
'U', 'l
' / , TRANSS / 'n
', 't
', 'c
' /
237 PATH( 1: 1 ) = 'Complex precision
'
243 ISEED( I ) = ISEEDY( I )
249 $ CALL CERRTR( PATH, NOUT )
260 DO 80 IMAT = 1, NTYPE1
264.NOT.
IF( DOTYPE( IMAT ) )
271 UPLO = UPLOS( IUPLO )
276 CALL CLATTR( IMAT, UPLO, 'No transpose
', DIAG, ISEED, N,
277 $ A, LDA, X, WORK, RWORK, INFO )
281 IF( LSAME( DIAG, 'N
' ) ) THEN
297 CALL CLACPY( UPLO, N, N, A, LDA, AINV, LDA )
299 CALL CTRTRI( UPLO, DIAG, N, AINV, LDA, INFO )
304 $ CALL ALAERH( PATH, 'CTRTRI
', INFO, 0, UPLO // DIAG,
305 $ N, N, -1, -1, NB, IMAT, NFAIL, NERRS,
310 ANORM = CLANTR( 'I
', UPLO, DIAG, N, N, A, LDA, RWORK )
311 AINVNM = CLANTR( 'I
', UPLO, DIAG, N, N, AINV, LDA,
313.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
316 RCONDI = ( ONE / ANORM ) / AINVNM
323 CALL CTRT01( UPLO, DIAG, N, A, LDA, AINV, LDA, RCONDO,
324 $ RWORK, RESULT( 1 ) )
327.GE.
IF( RESULT( 1 )THRESH ) THEN
328.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
329 $ CALL ALAHD( NOUT, PATH )
330 WRITE( NOUT, FMT = 9999 )UPLO, DIAG, N, NB, IMAT,
345 DO 30 ITRAN = 1, NTRAN
349 TRANS = TRANSS( ITRAN )
350.EQ.
IF( ITRAN1 ) THEN
362 CALL CLARHS( PATH, XTYPE, UPLO, TRANS, N, N, 0,
363 $ IDIAG, NRHS, A, LDA, XACT, LDA, B,
366 CALL CLACPY( 'Full
', N, NRHS, B, LDA, X, LDA )
369 CALL CTRTRS( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
375 $ CALL ALAERH( PATH, '', INFO, 0,
376 $ UPLO // TRANS // DIAG, N, N, -1,
377 $ -1, NRHS, IMAT, NFAIL, NERRS,
385 CALL CTRT02( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
386 $ X, LDA, B, LDA, WORK, RWORK,
392 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
400 CALL CTRRFS( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
401 $ B, LDA, X, LDA, RWORK,
402 $ RWORK( NRHS+1 ), WORK,
403 $ RWORK( 2*NRHS+1 ), INFO )
408 $ CALL ALAERH( PATH, 'CTRRFS
', INFO, 0,
409 $ UPLO // TRANS // DIAG, N, N, -1,
410 $ -1, NRHS, IMAT, NFAIL, NERRS,
413 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
415 CALL CTRT05( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
416 $ B, LDA, X, LDA, XACT, LDA, RWORK,
417 $ RWORK( NRHS+1 ), RESULT( 5 ) )
423.GE.
IF( RESULT( K )THRESH ) THEN
424.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
425 $ CALL ALAHD( NOUT, PATH )
426 WRITE( NOUT, FMT = 9998 )UPLO, TRANS,
427 $ DIAG, N, NRHS, IMAT, K, RESULT( K )
439.EQ.
IF( ITRAN1 ) THEN
447 CALL CTRCON( NORM, UPLO, DIAG, N, A, LDA, RCOND,
448 $ WORK, RWORK, INFO )
453 $ CALL ALAERH( PATH, 'CTRCON
', INFO, 0,
454 $ NORM // UPLO // DIAG, N, N, -1, -1,
455 $ -1, IMAT, NFAIL, NERRS, NOUT )
457 CALL CTRT06( RCOND, RCONDC, UPLO, DIAG, N, A, LDA,
458 $ RWORK, RESULT( 7 ) )
462.GE.
IF( RESULT( 7 )THRESH ) THEN
463.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
464 $ CALL ALAHD( NOUT, PATH )
465 WRITE( NOUT, FMT = 9997 )NORM, UPLO, N, IMAT,
477 DO 110 IMAT = NTYPE1 + 1, NTYPES
481.NOT.
IF( DOTYPE( IMAT ) )
488 UPLO = UPLOS( IUPLO )
489 DO 90 ITRAN = 1, NTRAN
493 TRANS = TRANSS( ITRAN )
498 CALL CLATTR( IMAT, UPLO, TRANS, DIAG, ISEED, N, A,
499 $ LDA, X, WORK, RWORK, INFO )
505 CALL CCOPY( N, X, 1, B, 1 )
506 CALL CLATRS( UPLO, TRANS, DIAG, 'N
', N, A, LDA, B,
507 $ SCALE, RWORK, INFO )
512 $ CALL ALAERH( PATH, 'CLATRS
', INFO, 0,
513 $ UPLO // TRANS // DIAG // 'N
', N, N,
514 $ -1, -1, -1, IMAT, NFAIL, NERRS, NOUT )
516 CALL CTRT03( UPLO, TRANS, DIAG, N, 1, A, LDA, SCALE,
517 $ RWORK, ONE, B, LDA, X, LDA, WORK,
523 CALL CCOPY( N, X, 1, B( N+1 ), 1 )
524 CALL CLATRS( UPLO, TRANS, DIAG, 'Y
', N, A, LDA,
525 $ B( N+1 ), SCALE, RWORK, INFO )
530 $ CALL ALAERH( PATH, 'CLATRS
', INFO, 0,
531 $ UPLO // TRANS // DIAG // 'Y
', N, N,
532 $ -1, -1, -1, IMAT, NFAIL, NERRS, NOUT )
534 CALL CTRT03( UPLO, TRANS, DIAG, N, 1, A, LDA, SCALE,
535 $ RWORK, ONE, B( N+1 ), LDA, X, LDA, WORK,
541.GE.
IF( RESULT( 8 )THRESH ) THEN
542.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
543 $ CALL ALAHD( NOUT, PATH )
544 WRITE( NOUT, FMT = 9996 )'CLATRS
', UPLO, TRANS,
545 $ DIAG, 'N
', N, IMAT, 8, RESULT( 8 )
548.GE.
IF( RESULT( 9 )THRESH ) THEN
549.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
550 $ CALL ALAHD( NOUT, PATH )
551 WRITE( NOUT, FMT = 9996 )'CLATRS
', UPLO, TRANS,
552 $ DIAG, '', N, IMAT, 9, RESULT( 9 )
563 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
565 9999 FORMAT( ' UPLO=
''', A1, ''', diag=
''', A1, ''', n=
', I5, ', nb=
',
566 $ I4, ',
type ', I2, ', test(
', I2, ')=
', G12.5 )
567 9998 FORMAT( ' uplo=
''', A1, ''', trans=
''', A1, ''', diag=
''', A1,
568 $ ''', n=
', I5, ', nb=
', I4, ',
type ', I2, ',
569 $ test(
', I2, ')=
', G12.5 )
570 9997 FORMAT( ' norm=
''', A1, ''', uplo =
''', A1, ''', n=
', I5, ',
',
571 $ 11X, ' type ', I2, ', test(
', I2, ')=
', G12.5 )
572 9996 FORMAT( 1X, A, '(
''', A1, ''',
''', A1, ''',
''', A1, ''',
''',
573 $ A1, ''',
', I5, ', ... ),
type ', I2, ', test(
', I2, ')=
',
subroutine xlaenv(ispec, nvalue)
XLAENV
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 clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine clatrs(uplo, trans, diag, normin, n, a, lda, x, scale, cnorm, info)
CLATRS solves a triangular system of equations with the scale factor set to prevent overflow.
subroutine ctrtri(uplo, diag, n, a, lda, info)
CTRTRI
subroutine ctrcon(norm, uplo, diag, n, a, lda, rcond, work, rwork, info)
CTRCON
subroutine ctrrfs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, ferr, berr, work, rwork, info)
CTRRFS
subroutine ctrtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, info)
CTRTRS
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine ctrt05(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
CTRT05
subroutine ctrt06(rcond, rcondc, uplo, diag, n, a, lda, rwork, rat)
CTRT06
subroutine cerrtr(path, nunit)
CERRTR
subroutine clattr(imat, uplo, trans, diag, iseed, n, a, lda, b, work, rwork, info)
CLATTR
subroutine ctrt02(uplo, trans, diag, n, nrhs, a, lda, x, ldx, b, ldb, work, rwork, resid)
CTRT02
subroutine cchktr(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, ainv, b, x, xact, work, rwork, nout)
CCHKTR
subroutine ctrt01(uplo, diag, n, a, lda, ainv, ldainv, rcond, rwork, resid)
CTRT01
subroutine ctrt03(uplo, trans, diag, n, nrhs, a, lda, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
CTRT03
subroutine cget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
CGET04