174 INTEGER NMAX, NN, NNB, NNS, NOUT
179 INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
180 REAL 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 )
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 )
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 ) =
'Single precision'
246 iseed( i ) = iseedy( i )
252 $
CALL serrtr( path, nout )
264 DO 80 imat = 1, ntype1
268 IF( .NOT.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 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
320 rcondi = ( one / anorm ) / ainvnm
327 CALL strt01( uplo, diag, n, a, lda, ainv, lda, rcondo,
328 $ rwork, result( 1 ) )
332 IF( result( 1 ).GE.thresh )
THEN
333 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
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 IF( itran.EQ.1 )
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 IF( result( k ).GE.thresh )
THEN
428 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
429 $
CALL alahd( nout, path )
430 WRITE( nout, fmt = 9998 )uplo, trans,
431 $ diag, n, nrhs, imat, k, result( k )
443 IF( itran.EQ.1 )
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 IF( result( 7 ).GE.thresh )
THEN
467 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
468 $
CALL alahd( nout, path )
469 WRITE( nout, fmt = 9997 )norm, uplo, n, imat,
481 DO 110 imat = ntype1 + 1, ntypes
485 IF( .NOT.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.
logical function lsame(CA, CB)
LSAME
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 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.
real function slantr(NORM, UPLO, DIAG, M, N, A, LDA, WORK)
SLANTR returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine strtri(UPLO, DIAG, N, A, LDA, INFO)
STRTRI
subroutine strrfs(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
STRRFS
subroutine strtrs(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO)
STRTRS
subroutine strcon(NORM, UPLO, DIAG, N, A, LDA, RCOND, WORK, IWORK, INFO)
STRCON
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 serrtr(PATH, NUNIT)
SERRTR
subroutine strt06(RCOND, RCONDC, UPLO, DIAG, N, A, LDA, WORK, RAT)
STRT06
subroutine slattr(IMAT, UPLO, TRANS, DIAG, ISEED, N, A, LDA, B, WORK, INFO)
SLATTR
subroutine sget04(N, NRHS, X, LDX, XACT, LDXACT, RCOND, RESID)
SGET04
subroutine strt02(UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B, LDB, WORK, RESID)
STRT02
subroutine strt03(UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE, CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID)
STRT03
subroutine strt05(UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, X, LDX, XACT, LDXACT, FERR, BERR, RESLTS)
STRT05
subroutine strt01(UPLO, DIAG, N, A, LDA, AINV, LDAINV, RCOND, WORK, RESID)
STRT01