164 SUBROUTINE dchktr( DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL,
165 $ THRESH, TSTERR, NMAX, A, AINV, B, X, XACT,
166 $ WORK, RWORK, IWORK, NOUT )
174 INTEGER NMAX, NN, NNB, NNS, NOUT
175 DOUBLE PRECISION THRESH
179 INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
180 DOUBLE PRECISION A( * ), AINV( * ), B( * ), RWORK( * ),
181 $ work( * ), x( * ), xact( * )
187 INTEGER NTYPE1, NTYPES
188 PARAMETER ( NTYPE1 = 10, ntypes = 18 )
190 parameter( ntests = 9 )
192 parameter( ntran = 3 )
193 DOUBLE PRECISION ONE, ZERO
194 parameter( one = 1.0d0, zero = 0.0d0 )
197 CHARACTER DIAG, NORM, TRANS, UPLO, XTYPE
199 INTEGER I, IDIAG, , IN, INB, INFO, IRHS, ITRAN,
200 $ iuplo, k, lda, n, nb, nerrs, nfail, nrhs, nrun
201 DOUBLE PRECISION AINVNM, ANORM, DUMMY, RCOND, RCONDC, RCONDI,
205 CHARACTER ( NTRAN ), UPLOS( 2 )
206 INTEGER ISEED( 4 ), ISEEDY( 4 )
207 DOUBLE PRECISION RESULT( NTESTS )
211 DOUBLE PRECISION DLANTR
212 EXTERNAL lsame, dlantr
223 INTEGER INFOT, IOUNIT
226 COMMON / infoc / infot, iounit, ok, lerr
227 COMMON / srnamc / srnamt
233 DATA iseedy / 1988, 1989, 1990, 1991 /
234 DATA uplos /
'U', 'l
' / , TRANSS / 'n
', 't
', 'c
' /
240 PATH( 1: 1 ) = 'double precision
'
246 ISEED( I ) = ISEEDY( I )
252 $ CALL DERRTR( PATH, NOUT )
264 DO 80 IMAT = 1, NTYPE1
268.NOT.
IF( DOTYPE( IMAT ) )
275 UPLO = UPLOS( IUPLO )
280 CALL DLATTR( IMAT, UPLO, 'no transpose
', DIAG, ISEED, N,
281 $ A, LDA, X, WORK, INFO )
285 IF( LSAME( DIAG, 'n
' ) ) THEN
301 CALL DLACPY( UPLO, N, N, A, LDA, AINV, LDA )
303 CALL DTRTRI( UPLO, DIAG, N, AINV, LDA, INFO )
308 $ CALL ALAERH( PATH, 'dtrtri', INFO, 0, UPLO // DIAG,
309 $ N, N, -1, -1, NB, IMAT, NFAIL, NERRS,
314 ANORM = DLANTR( 'i
', UPLO, DIAG, N, N, A, LDA, RWORK )
315 AINVNM = DLANTR( 'i
', UPLO, DIAG, N, N, AINV, LDA,
317.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
320 RCONDI = ( ONE / ANORM ) / AINVNM
327 CALL DTRT01( UPLO, DIAG, N, A, LDA, AINV, LDA, RCONDO,
328 $ RWORK, RESULT( 1 ) )
332.GE.
IF( RESULT( 1 )THRESH ) THEN
333.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
334 $ CALL ALAHD( NOUT, PATH )
335 WRITE( NOUT, FMT = 9999 )UPLO, DIAG, N, NB, IMAT,
350 DO 30 ITRAN = 1, NTRAN
354 TRANS = TRANSS( ITRAN )
355.EQ.
IF( ITRAN1 ) THEN
367 CALL DLARHS( PATH, XTYPE, UPLO, TRANS, N, N, 0,
368 $ IDIAG, NRHS, A, LDA, XACT, LDA, B,
371 CALL DLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
374 CALL DTRTRS( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
380 $ CALL ALAERH( PATH, 'dtrtrs', INFO, 0,
381 $ UPLO // TRANS // DIAG, N, N, -1,
382 $ -1, NRHS, IMAT, NFAIL, NERRS,
390 CALL DTRT02( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
391 $ X, LDA, B, LDA, WORK, RESULT( 2 ) )
396 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
404 CALL DTRRFS( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
405 $ B, LDA, X, LDA, RWORK,
406 $ RWORK( NRHS+1 ), WORK, IWORK,
412 $ CALL ALAERH( PATH, 'dtrrfs', INFO, 0,
413 $ UPLO // TRANS // DIAG, N, N, -1,
414 $ -1, NRHS, IMAT, NFAIL, NERRS,
417 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
419 CALL DTRT05( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
420 $ B, LDA, X, LDA, XACT, LDA, RWORK,
421 $ RWORK( NRHS+1 ), RESULT( 5 ) )
427.GE.
IF( RESULT( K )THRESH ) THEN
428.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
429 $ CALL ALAHD( NOUT, PATH )
430 WRITE( NOUT, FMT = 9998 )UPLO, TRANS,
431 $ DIAG, N, NRHS, IMAT, K, RESULT( K )
443.EQ.
IF( ITRAN1 ) THEN
451 CALL DTRCON( NORM, UPLO, DIAG, N, A, LDA, RCOND,
452 $ WORK, IWORK, INFO )
457 $ CALL ALAERH( PATH, 'dtrcon', INFO, 0,
458 $ NORM // UPLO // DIAG, N, N, -1, -1,
459 $ -1, IMAT, NFAIL, NERRS, NOUT )
461 CALL DTRT06( RCOND, RCONDC, UPLO, DIAG, N, A, LDA,
462 $ RWORK, RESULT( 7 ) )
466.GE.
IF( RESULT( 7 )THRESH ) THEN
467.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
468 $ CALL ALAHD( NOUT, PATH )
469 WRITE( NOUT, FMT = 9997 )NORM, UPLO, N, IMAT,
481 DO 110 IMAT = NTYPE1 + 1, NTYPES
485.NOT.
IF( DOTYPE( IMAT ) )
492 UPLO = UPLOS( IUPLO )
493 DO 90 ITRAN = 1, NTRAN
497 TRANS = TRANSS( ITRAN )
502 CALL DLATTR( IMAT, UPLO, TRANS, DIAG, ISEED, N, A,
503 $ LDA, X, WORK, INFO )
509 CALL DCOPY( N, X, 1, B, 1 )
510 CALL DLATRS( UPLO, TRANS, DIAG, 'n
', N, A, LDA, B,
511 $ SCALE, RWORK, INFO )
516 $ CALL ALAERH( PATH, 'dlatrs', INFO, 0,
517 $ UPLO // TRANS // DIAG // 'n
', N, N,
518 $ -1, -1, -1, IMAT, NFAIL, NERRS, NOUT )
520 CALL DTRT03( UPLO, TRANS, DIAG, N, 1, A, LDA, SCALE,
521 $ RWORK, ONE, B, LDA, X, LDA, WORK,
527 CALL DCOPY( N, X, 1, B( N+1 ), 1 )
528 CALL DLATRS( UPLO, TRANS, DIAG, 'y
', N, A, LDA,
529 $ B( N+1 ), SCALE, RWORK, INFO )
534 $ CALL ALAERH( PATH, 'dlatrs', INFO, 0,
535 $ UPLO // TRANS // DIAG // 'y
', N, N,
536 $ -1, -1, -1, IMAT, NFAIL, NERRS, NOUT )
538 CALL DTRT03( UPLO, TRANS, DIAG, N, 1, A, LDA, SCALE,
539 $ RWORK, ONE, B( N+1 ), LDA, X, LDA, WORK,
545.GE.
IF( RESULT( 8 )THRESH ) THEN
546.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
547 $ CALL ALAHD( NOUT, PATH )
548 WRITE( NOUT, FMT = 9996 )'dlatrs', UPLO, TRANS,
549 $ DIAG, 'n
', N, IMAT, 8, RESULT( 8 )
552.GE.
IF( RESULT( 9 )THRESH ) THEN
553.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
554 $ CALL ALAHD( NOUT, PATH )
555 WRITE( NOUT, FMT = 9996 )'dlatrs', UPLO, TRANS,
556 $ DIAG, 'y
', N, IMAT, 9, RESULT( 9 )
567 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
569 9999 FORMAT( ' uplo=
''', A1, ''
', DIAG=''', a1,
''', N=', i5, ', nb=
',
570 $ I4, ',
type ', i2,
', test(', i2,
')= ', g12.5 )
571 9998
FORMAT(
' UPLO=''', a1,
''', TRANS=''', a1,
''', DIAG=''', a1,
572 $
''', N=', i5,
', NB=', i4,
', type ', i2,
',
573 $ test(', i2,
')= ', g12.5 )
574 9997
FORMAT(
' NORM=''', a1,
''', UPLO =''', a1,
''', N=', i5,
','
575 $ 11x,
' type ', i2,
', test(', i2,
')=', g12.5 )
576 9996
FORMAT( 1x, a,
'( ''', a1,
''', ''', a1,
''', ''', a1,
''', ''',
577 $ a1,
''',', i5,
', ... ), type ', i2,
', test(', i2,
')=',
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
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 dlatrs(uplo, trans, diag, normin, n, a, lda, x, scale, cnorm, info)
DLATRS solves a triangular system of equations with the scale factor set to prevent overflow.
subroutine dtrcon(norm, uplo, diag, n, a, lda, rcond, work, iwork, info)
DTRCON
subroutine dtrtri(uplo, diag, n, a, lda, info)
DTRTRI
subroutine dtrtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, info)
DTRTRS
subroutine dtrrfs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, ferr, berr, work, iwork, info)
DTRRFS
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
DLARHS
subroutine dchktr(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, ainv, b, x, xact, work, rwork, iwork, nout)
DCHKTR
subroutine dtrt05(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
DTRT05
subroutine dlattr(imat, uplo, trans, diag, iseed, n, a, lda, b, work, info)
DLATTR
subroutine dtrt03(uplo, trans, diag, n, nrhs, a, lda, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
DTRT03
subroutine dtrt02(uplo, trans, diag, n, nrhs, a, lda, x, ldx, b, ldb, work, resid)
DTRT02
subroutine derrtr(path, nunit)
DERRTR
subroutine dtrt01(uplo, diag, n, a, lda, ainv, ldainv, rcond, work, resid)
DTRT01
subroutine dtrt06(rcond, rcondc, uplo, diag, n, a, lda, work, rat)
DTRT06
subroutine dget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
DGET04