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( * ), X( * ),
184 INTEGER NTYPE1, NTYPES
185 PARAMETER ( NTYPE1 = 10, ntypes = 18 )
187 parameter( ntests = 10 )
189 parameter( ntran = 3 )
190 DOUBLE PRECISION ONE, ZERO
191 parameter( one = 1.0d0, zero = 0.0d0 )
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 DOUBLE PRECISION AINVNM, ANORM, BIGNUM, DUMMY, RCOND, RCONDC,
199 $ RCONDI, RCONDO, RES, SCALE, DLAMCH
202 CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
203 INTEGER ISEED( 4 ), ISEEDY( 4 )
204 DOUBLE PRECISION RESULT( NTESTS ), SCALE3( 2 )
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'
239 bignum = dlamch(
'Overflow') / dlamch(
'Precision')
244 iseed( i ) = iseedy( i )
250 $
CALL zerrtr( path, nout )
261 DO 80 imat = 1, ntype1
265 IF( .NOT.dotype( imat ) )
272 uplo = uplos( iuplo )
277 CALL zlattr( imat, uplo,
'No transpose', diag, iseed, n,
278 $ a, lda, x, work, rwork, info )
282 IF( lsame( diag,
'N' ) )
THEN
298 CALL zlacpy( uplo, n, n, a, lda, ainv, lda )
300 CALL ztrtri( uplo, diag, n, ainv, lda, info )
305 $
CALL alaerh( path,
'ZTRTRI', info, 0, uplo // diag,
306 $ n, n, -1, -1, nb, imat, nfail, nerrs,
311 anorm = zlantr(
'I', uplo, diag, n, n, a, lda, rwork )
312 ainvnm = zlantr(
'I', uplo, diag, n, n, ainv, lda,
314 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
317 rcondi = ( one / anorm ) / ainvnm
324 CALL ztrt01( uplo, diag, n, a, lda, ainv, lda, rcondo,
325 $ rwork, result( 1 ) )
328 IF( result( 1 ).GE.thresh )
THEN
329 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
330 $
CALL alahd( nout, path )
331 WRITE( nout, fmt = 9999 )uplo, diag, n, nb, imat,
346 DO 30 itran = 1, ntran
350 trans = transs( itran )
351 IF( itran.EQ.1 )
THEN
363 CALL zlarhs( path, xtype, uplo, trans, n, n, 0,
364 $ idiag, nrhs, a, lda, xact, lda, b,
367 CALL zlacpy(
'Full', n, nrhs, b, lda, x, lda )
370 CALL ztrtrs( uplo, trans, diag, n, nrhs, a, lda,
376 $
CALL alaerh( path,
'ZTRTRS', info, 0,
377 $ uplo // trans // diag, n, n, -1,
378 $ -1, nrhs, imat, nfail, nerrs,
384 $ dummy = dble( a( 1 ) )
386 CALL ztrt02( uplo, trans, diag, n, nrhs, a, lda,
387 $ x, lda, b, lda, work, rwork,
393 CALL zget04( n, nrhs, x, lda, xact, lda, rcondc,
401 CALL ztrrfs( uplo, trans, diag, n, nrhs, a, lda,
402 $ b, lda, x, lda, rwork,
403 $ rwork( nrhs+1 ), work,
404 $ rwork( 2*nrhs+1 ), info )
409 $
CALL alaerh( path,
'ZTRRFS', info, 0,
410 $ uplo // trans // diag, n, n, -1,
411 $ -1, nrhs, imat, nfail, nerrs,
414 CALL zget04( n, nrhs, x, lda, xact, lda, rcondc,
416 CALL ztrt05( uplo, trans, diag, n, nrhs, a, lda,
417 $ b, lda, x, lda, xact, lda, rwork,
418 $ rwork( nrhs+1 ), result( 5 ) )
424 IF( result( k ).GE.thresh )
THEN
425 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
426 $
CALL alahd( nout, path )
427 WRITE( nout, fmt = 9998 )uplo, trans,
428 $ diag, n, nrhs, imat, k, result( k )
440 IF( itran.EQ.1 )
THEN
448 CALL ztrcon( norm, uplo, diag, n, a, lda, rcond,
449 $ work, rwork, info )
454 $
CALL alaerh( path,
'ZTRCON', info, 0,
455 $ norm // uplo // diag, n, n, -1, -1,
456 $ -1, imat, nfail, nerrs, nout )
458 CALL ztrt06( rcond, rcondc, uplo, diag, n, a, lda,
459 $ rwork, result( 7 ) )
463 IF( result( 7 ).GE.thresh )
THEN
464 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
465 $
CALL alahd( nout, path )
466 WRITE( nout, fmt = 9997 )norm, uplo, n, imat,
478 DO 110 imat = ntype1 + 1, ntypes
482 IF( .NOT.dotype( imat ) )
489 uplo = uplos( iuplo )
490 DO 90 itran = 1, ntran
494 trans = transs( itran )
499 CALL zlattr( imat, uplo, trans, diag, iseed, n, a,
500 $ lda, x, work, rwork, info )
506 CALL zcopy( n, x, 1, b, 1 )
507 CALL zlatrs( uplo, trans, diag,
'N', n, a, lda, b,
508 $ scale, rwork, info )
513 $
CALL alaerh( path,
'ZLATRS', info, 0,
514 $ uplo // trans // diag //
'N', n, n,
515 $ -1, -1, -1, imat, nfail, nerrs, nout )
517 CALL ztrt03( uplo, trans, diag, n, 1, a, lda, scale,
518 $ rwork, one, b, lda, x, lda, work,
524 CALL zcopy( n, x, 1, b( n+1 ), 1 )
525 CALL zlatrs( uplo, trans, diag,
'Y', n, a, lda,
526 $ b( n+1 ), scale, rwork, info )
531 $
CALL alaerh( path,
'ZLATRS', info, 0,
532 $ uplo // trans // diag //
'Y', n, n,
533 $ -1, -1, -1, imat, nfail, nerrs, nout )
535 CALL ztrt03( uplo, trans, diag, n, 1, a, lda, scale,
536 $ rwork, one, b( n+1 ), lda, x, lda, work,
543 CALL zcopy( n, x, 1, b, 1 )
544 CALL zcopy( n, x, 1, b( n+1 ), 1 )
545 CALL zdscal( n, bignum, b( n+1 ), 1 )
546 CALL zlatrs3( uplo, trans, diag,
'N', n, 2, a, lda,
547 $ b, max(1, n), scale3, rwork, work, nmax,
553 $
CALL alaerh( path,
'ZLATRS3', info, 0,
554 $ uplo // trans // diag //
'N', n, n,
555 $ -1, -1, -1, imat, nfail, nerrs, nout )
556 CALL ztrt03( uplo, trans, diag, n, 1, a, lda,
557 $ scale3( 1 ), rwork, one, b( 1 ), lda,
558 $ x, lda, work, result( 10 ) )
559 CALL zdscal( n, bignum, x, 1 )
560 CALL ztrt03( uplo, trans, diag, n, 1, a, lda,
561 $ scale3( 2 ), rwork, one, b( n+1 ), lda,
562 $ x, lda, work, res )
563 result( 10 ) = max( result( 10 ), res )
568 IF( result( 8 ).GE.thresh )
THEN
569 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
570 $
CALL alahd( nout, path )
571 WRITE( nout, fmt = 9996 )
'ZLATRS', uplo, trans,
572 $ diag,
'N', n, imat, 8, result( 8 )
575 IF( result( 9 ).GE.thresh )
THEN
576 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
577 $
CALL alahd( nout, path )
578 WRITE( nout, fmt = 9996 )
'ZLATRS', uplo, trans,
579 $ diag,
'Y', n, imat, 9, result( 9 )
582 IF( result( 10 ).GE.thresh )
THEN
583 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
584 $
CALL alahd( nout, path )
585 WRITE( nout, fmt = 9996 )
'ZLATRS3', uplo, trans,
586 $ diag,
'N', n, imat, 10, result( 10 )
597 CALL alasum( path, nout, nfail, nrun, nerrs )
599 9999
FORMAT(
' UPLO=''', a1,
''', DIAG=''', a1,
''', N=', i5,
', NB=',
600 $ i4,
', type ', i2,
', test(', i2,
')= ', g12.5 )
601 9998
FORMAT(
' UPLO=''', a1,
''', TRANS=''', a1,
''', DIAG=''', a1,
602 $
''', N=', i5,
', NB=', i4,
', type ', i2,
', test(',
604 9997
FORMAT(
' NORM=''', a1,
''', UPLO =''', a1,
''', N=', i5,
',',
605 $ 11x,
' type ', i2,
', test(', i2,
')=', g12.5 )
606 9996
FORMAT( 1x, a,
'( ''', a1,
''', ''', a1,
''', ''', a1,
''', ''',
607 $ a1,
''',', i5,
', ... ), type ', i2,
', test(', i2,
')=',
subroutine alasum(TYPE, NOUT, NFAIL, NRUN, NERRS)
ALASUM
subroutine xlaenv(ISPEC, NVALUE)
XLAENV
subroutine alahd(IOUNIT, PATH)
ALAHD
subroutine alaerh(PATH, SUBNAM, INFO, INFOE, OPTS, M, N, KL, KU, N5, IMAT, NFAIL, NERRS, NOUT)
ALAERH
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
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 zchktr(DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL, THRESH, TSTERR, NMAX, A, AINV, B, X, XACT, WORK, RWORK, NOUT)
ZCHKTR
subroutine zget04(N, NRHS, X, LDX, XACT, LDXACT, RCOND, RESID)
ZGET04
subroutine ztrt06(RCOND, RCONDC, UPLO, DIAG, N, A, LDA, RWORK, RAT)
ZTRT06
subroutine ztrt03(UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID)
ZTRT03
subroutine ztrt01(UPLO, DIAG, N, A, LDA, AINV, LDAINV, RCOND, RWORK, RESID)
ZTRT01
subroutine ztrt05(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
ZTRT05
subroutine zlattr(IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B, WORK, RWORK, INFO)
ZLATTR
subroutine zerrtr(PATH, NUNIT)
ZERRTR
subroutine ztrt02(UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B, LDB, WORK, RWORK, RESID)
ZTRT02
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 ztrtrs(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO)
ZTRTRS
subroutine ztrcon(NORM, UPLO, DIAG, N, A, LDA, RCOND, WORK, RWORK, INFO)
ZTRCON
subroutine ztrrfs(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, X, LDX, FERR, BERR, WORK, RWORK, INFO)
ZTRRFS
subroutine ztrtri(UPLO, DIAG, N, A, LDA, INFO)
ZTRTRI
subroutine zlatrs3(UPLO, TRANS, DIAG, NORMIN, N, NRHS, A, LDA, X, LDX, SCALE, CNORM, WORK, LWORK, INFO)
ZLATRS3 solves a triangular system of equations with the scale factors set to prevent overflow.