160 SUBROUTINE zchktr( 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
171 DOUBLE PRECISION THRESH
175 INTEGER NBVAL( * ), NSVAL( * ), NVAL( * )
176 DOUBLE PRECISION RWORK( * )
177 COMPLEX*16 A( * ), AINV( * ), B( * ), WORK( * ), ( * ),
184 INTEGER NTYPE1, NTYPES
185 PARAMETER ( NTYPE1 = 10, ntypes = 18 )
187 parameter( ntests = 9 )
189 parameter( ntran = 3 )
190 DOUBLE PRECISION ONE, ZERO
191 parameter( one = 1.0d0, zero = 0.0d0 )
194 CHARACTER DIAG, NORM, TRANS, UPLO,
196 INTEGER I, IDIAG, IMAT, IN, INB, INFO, IRHS, ITRAN,
197 $ iuplo, k, lda, n, nb, nerrs, nfail, nrhs, nrun
198 DOUBLE PRECISION AINVNM, ANORM, DUMMY, RCOND, RCONDC, RCONDI,
202 CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
203 INTEGER ISEED( 4 ), ISEEDY( 4 )
204 DOUBLE PRECISION RESULT( )
208 DOUBLE PRECISION ZLANTR
209 EXTERNAL lsame, zlantr
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 ) =
'Zomplex precision'
243 iseed( i ) = iseedy( i )
249 $
CALL zerrtr( path, nout )
260 DO 80 imat = 1, ntype1
264 IF( .NOT.dotype( imat ) )
271 uplo = uplos( iuplo )
276 CALL zlattr( imat, uplo,
'No transpose', diag, iseed, n,
277 $ a, lda, x, work, rwork, info )
281 IF( lsame( diag,
'N' ) )
THEN
297 CALL zlacpy( uplo, n, n, a, lda, ainv, lda )
299 CALL ztrtri( uplo, diag, n, ainv, lda, info )
304 $
CALL alaerh( path,
'ZTRTRI', info, 0, uplo // diag,
310 anorm = zlantr(
'I', uplo, diag, n, n, a, lda, rwork )
311 ainvnm = zlantr( 'i
', UPLO, DIAG, N, N, AINV, LDA,
313.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
316 RCONDI = ( ONE / ANORM ) / AINVNM
323 CALL ZTRT01( 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 ZLARHS( PATH, XTYPE, UPLO, TRANS, N, N, 0,
363 $ IDIAG, NRHS, A, LDA, XACT, LDA, B,
366 CALL ZLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
369 CALL ZTRTRS( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
375 $ CALL ALAERH( PATH, 'ztrtrs', INFO, 0,
376 $ UPLO // TRANS // DIAG, N, N, -1,
377 $ -1, NRHS, IMAT, NFAIL, NERRS,
385 CALL ZTRT02( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
386 $ X, LDA, B, LDA, WORK, RWORK,
392 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
400 CALL ZTRRFS( 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, 'ztrrfs', INFO, 0,
409 $ UPLO // TRANS // DIAG, N, N, -1,
410 $ -1, NRHS, IMAT, NFAIL, NERRS,
413 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
415 CALL ZTRT05( 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 ZTRCON( NORM, UPLO, DIAG, N, A, LDA, RCOND,
448 $ WORK, RWORK, INFO )
453 $ CALL ALAERH( PATH, 'ztrcon', INFO, 0,
454 $ NORM // UPLO // DIAG, N, N, -1, -1,
455 $ -1, IMAT, NFAIL, NERRS, NOUT )
457 CALL ZTRT06( 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 ZLATTR( IMAT, UPLO, TRANS, DIAG, ISEED, N, A,
499 $ LDA, X, WORK, RWORK, INFO )
505 CALL ZCOPY( N, X, 1, B, 1 )
506 CALL ZLATRS( UPLO, TRANS, DIAG, 'n
', N, A, LDA, B,
507 $ SCALE, RWORK, INFO )
512 $ CALL ALAERH( PATH, 'zlatrs', INFO, 0,
513 $ UPLO // TRANS // DIAG // 'n
', N, N,
514 $ -1, -1, -1, IMAT, NFAIL, NERRS, NOUT )
516 CALL ZTRT03( UPLO, TRANS, DIAG, N, 1, A, LDA, SCALE,
517 $ RWORK, ONE, B, LDA, X, LDA, WORK,
523 CALL ZCOPY( N, X, 1, B( N+1 ), 1 )
524 CALL ZLATRS( UPLO, TRANS, DIAG, 'y
', N, A, LDA,
525 $ B( N+1 ), SCALE, RWORK, INFO )
530 $ CALL ALAERH( PATH, 'zlatrs', INFO, 0,
531 $ UPLO // TRANS // DIAG // 'y
', N, N,
532 $ -1, -1, -1, IMAT, NFAIL, NERRS, NOUT )
534 CALL ZTRT03( 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 )'zlatrs', 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 )'zlatrs', UPLO, TRANS,
552 $ DIAG, 'y
', 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='',',
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 zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zlatrs(uplo, trans, diag, normin, n, a, lda, x, scale, cnorm, info)
ZLATRS solves a triangular system of equations with the scale factor set to prevent overflow.
subroutine ztrcon(norm, uplo, diag, n, a, lda, rcond, work, rwork, info)
ZTRCON
subroutine ztrtri(uplo, diag, n, a, lda, info)
ZTRTRI
subroutine ztrrfs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZTRRFS
subroutine ztrtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, info)
ZTRTRS
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
ZLARHS
subroutine ztrt06(rcond, rcondc, uplo, diag, n, a, lda, rwork, rat)
ZTRT06
subroutine zchktr(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, ainv, b, x, xact, work, rwork, nout)
ZCHKTR
subroutine ztrt02(uplo, trans, diag, n, nrhs, a, lda, x, ldx, b, ldb, work, rwork, resid)
ZTRT02
subroutine zget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
ZGET04
subroutine zerrtr(path, nunit)
ZERRTR
subroutine ztrt03(uplo, trans, diag, n, nrhs, a, lda, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
ZTRT03
subroutine zlattr(imat, uplo, trans, diag, iseed, n, a, lda, b, work, rwork, info)
ZLATTR
subroutine ztrt05(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
ZTRT05
subroutine ztrt01(uplo, diag, n, a, lda, ainv, ldainv, rcond, rwork, resid)
ZTRT01