164 SUBROUTINE schktr( 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
179 INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
180 REAL A( * ), AINV( * ), ( * ), RWORK( * ),
181 $ work( * ), x( * ), xact( * )
187 INTEGER NTYPE1, NTYPES
188 PARAMETER ( NTYPE1 = 10, ntypes = 18 )
190 parameter( ntests = 9 )
192 parameter( ntran = 3 )
194 parameter( one = 1.0e0, zero = 0.0e0 )
197 CHARACTER DIAG, NORM, TRANS, UPLO, XTYPE
199 INTEGER I, IDIAG, IMAT, IN, INB, INFO, IRHS, ITRAN,
200 $ iuplo, k, lda, n, nb, nerrs, nfail, nrhs, nrun
201 REAL AINVNM, ANORM, DUMMY, RCOND, RCONDC, RCONDI,
205 CHARACTER TRANSS( NTRAN ), UPLOS( 2 )
206 INTEGER ISEED( 4 ), ISEEDY( 4 )
207 REAL RESULT( NTESTS )
212 EXTERNAL lsame, slantr
223 INTEGER INFOT, IOUNIT
226 COMMON / infoc / infot, iounit, ok, lerr
227 COMMON / srnamc / srnamt
233 DATA iseedy / 1988, 1989, 1990, 1991 /
234 DATA 'U',
'L' / , transs / 'n
', 't
', 'c
' /
240 PATH( 1: 1 ) = 'single precision
'
246 ISEED( I ) = ISEEDY( I )
252 $ CALL SERRTR( PATH, NOUT )
264 DO 80 IMAT = 1, NTYPE1
268.NOT.
IF( DOTYPE( IMAT ) )
275 UPLO = UPLOS( IUPLO )
280 CALL SLATTR( IMAT, UPLO, 'no transpose
', DIAG, ISEED, N,
281 $ A, LDA, X, WORK, INFO )
285 IF( LSAME( DIAG, 'n
' ) ) THEN
301 CALL SLACPY( UPLO, N, N, A, LDA, AINV, LDA )
303 CALL STRTRI( UPLO, DIAG, N, AINV, LDA, INFO )
308 $ CALL ALAERH( PATH, 'strtri', INFO, 0, UPLO // DIAG,
309 $ N, N, -1, -1, NB, IMAT, NFAIL, NERRS,
314 ANORM = SLANTR( 'i
', UPLO, DIAG, N, N, A, LDA, RWORK )
315 AINVNM = SLANTR( 'i
', UPLO, DIAG, N, N, AINV, LDA,
317.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
320 RCONDI = ( ONE / ANORM ) / AINVNM
327 CALL STRT01( 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 SLARHS( PATH, XTYPE, UPLO, TRANS, N, N, 0,
368 $ IDIAG, NRHS, A, LDA, XACT, LDA, B,
371 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
374 CALL STRTRS( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
380 $ CALL ALAERH( PATH, 'strtrs', INFO, 0,
381 $ UPLO // TRANS // DIAG, N, N, -1,
382 $ -1, NRHS, IMAT, NFAIL, NERRS,
390 CALL STRT02( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
391 $ X, LDA, B, LDA, WORK, RESULT( 2 ) )
396 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
404 CALL STRRFS( UPLO, TRANS, DIAG, N, NRHS, A, LDA,
405 $ B, LDA, X, LDA, RWORK,
406 $ RWORK( NRHS+1 ), WORK, IWORK,
412 $ CALL ALAERH( PATH, 'strrfs', INFO, 0,
413 $ UPLO // TRANS // DIAG, N, N, -1,
414 $ -1, NRHS, IMAT, NFAIL, NERRS,
417 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
419 CALL STRT05( 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 STRCON( NORM, UPLO, DIAG, N, A, LDA, RCOND,
452 $ WORK, IWORK, INFO )
457 $ CALL ALAERH( PATH, 'strcon', INFO, 0,
458 $ NORM // UPLO // DIAG, N, N, -1, -1,
459 $ -1, IMAT, NFAIL, NERRS, NOUT )
461 CALL STRT06( 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 SLATTR( IMAT, UPLO, TRANS, DIAG, ISEED, N, A,
503 $ LDA, X, WORK, INFO )
509 CALL SCOPY( N, X, 1, B, 1 )
510 CALL SLATRS( UPLO, TRANS, DIAG, 'n', n, a, lda, b,
511 $ scale, rwork, info )
516 $
CALL alaerh( path,
'SLATRS', info, 0,
517 $ uplo // trans // diag //
'N', n, n,
518 $ -1, -1, -1, imat, nfail, nerrs, nout )
520 CALL strt03( uplo, trans, diag, n, 1, a, lda, scale,
521 $ rwork, one, b, lda, x, lda, work,
527 CALL scopy( n, x, 1, b( n+1 ), 1 )
528 CALL slatrs( uplo, trans, diag,
'Y', n, a, lda,
529 $ b( n+1 ), scale, rwork, info )
534 $
CALL alaerh( path,
'SLATRS', info, 0,
535 $ uplo // trans // diag //
'Y', n, n,
536 $ -1, -1, -1, imat, nfail, nerrs, nout )
538 CALL strt03( uplo, trans, diag, n, 1, a, lda, scale,
539 $ rwork, one, b( n+1 ), lda, x, lda, work,
545 IF( result( 8 ).GE.thresh )
THEN
546 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
547 $
CALL alahd( nout, path )
548 WRITE( nout, fmt = 9996 )
'SLATRS', uplo, trans,
549 $ diag,
'N', n, imat, 8, result( 8 )
552 IF( result( 9 ).GE.thresh )
THEN
553 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
554 $
CALL alahd( nout, path )
555 WRITE( nout, fmt = 9996 )
'SLATRS', 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 slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY 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 slatrs(uplo, trans, diag, normin, n, a, lda, x, scale, cnorm, info)
SLATRS solves a triangular system of equations with the scale factor set to prevent overflow.
subroutine strtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, info)
STRTRS
subroutine strtri(uplo, diag, n, a, lda, info)
STRTRI
subroutine strcon(norm, uplo, diag, n, a, lda, rcond, work, iwork, info)
STRCON
subroutine strrfs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, ferr, berr, work, iwork, info)
STRRFS
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine slattr(imat, uplo, trans, diag, iseed, n, a, lda, b, work, info)
SLATTR
subroutine strt01(uplo, diag, n, a, lda, ainv, ldainv, rcond, work, resid)
STRT01
subroutine strt02(uplo, trans, diag, n, nrhs, a, lda, x, ldx, b, ldb, work, resid)
STRT02
subroutine strt05(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
STRT05
subroutine strt03(uplo, trans, diag, n, nrhs, a, lda, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
STRT03
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine strt06(rcond, rcondc, uplo, diag, n, a, lda, work, rat)
STRT06
subroutine serrtr(path, nunit)
SERRTR
subroutine schktr(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, ainv, b, x, xact, work, rwork, iwork, nout)
SCHKTR