144 SUBROUTINE schkgt( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
145 $ A, AF, B, X, XACT, WORK, RWORK, IWORK, NOUT )
153 INTEGER NN, NNS, NOUT
158 INTEGER IWORK( * ), NSVAL( * ), NVAL( * )
159 REAL A( * ), AF( * ), B( * ), RWORK( * ), WORK( * ),
167 parameter( one = 1.0e+0, zero = 0.0e+0 )
169 parameter( ntypes = 12 )
171 parameter( ntests = 7 )
174 LOGICAL TRFCON, ZEROT
175 CHARACTER DIST, NORM, TRANS, TYPE
177 INTEGER I, IMAT, IN, INFO, IRHS, ITRAN, IX, IZERO, J,
178 $ k, kl, koff, ku, lda, m, mode, n, nerrs, nfail,
180 REAL AINVNM, ANORM, COND, RCOND, RCONDC, RCONDI,
184 CHARACTER TRANSS( 3 )
185 INTEGER ISEED( 4 ), ISEEDY( 4 )
186 REAL RESULT( NTESTS ), Z( 3 )
189 REAL SASUM, SGET06, SLANGT
190 EXTERNAL sasum, sget06, slangt
207 COMMON / infoc / infot, nunit, ok, lerr
208 COMMON / srnamc / srnamt
211 DATA iseedy / 0, 0, 0, 1 / , transs /
'N', 't
',
216 PATH( 1: 1 ) = 'single precision
'
222 ISEED( I ) = ISEEDY( I )
228 $ CALL SERRGE( PATH, NOUT )
242 DO 100 IMAT = 1, NIMAT
246.NOT.
IF( DOTYPE( IMAT ) )
251 CALL SLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM, MODE,
254.GE..AND..LE.
ZEROT = IMAT8 IMAT10
259 KOFF = MAX( 2-KU, 3-MAX( 1, N ) )
261 CALL SLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE, COND,
262 $ ANORM, KL, KU, 'z
', AF( KOFF ), 3, WORK,
268 CALL ALAERH( PATH, 'slatms', INFO, 0, ' ', N, N, KL,
269 $ KU, -1, IMAT, NFAIL, NERRS, NOUT )
275 CALL SCOPY( N-1, AF( 4 ), 3, A, 1 )
276 CALL SCOPY( N-1, AF( 3 ), 3, A( N+M+1 ), 1 )
278 CALL SCOPY( N, AF( 2 ), 3, A( M+1 ), 1 )
284.NOT..OR..NOT.
IF( ZEROT DOTYPE( 7 ) ) THEN
288 CALL SLARNV( 2, ISEED, N+2*M, A )
290 $ CALL SSCAL( N+2*M, ANORM, A, 1 )
291.GT.
ELSE IF( IZERO0 ) THEN
296.EQ.
IF( IZERO1 ) THEN
300.EQ.
ELSE IF( IZERON ) THEN
304 A( 2*N-2+IZERO ) = Z( 1 )
305 A( N-1+IZERO ) = Z( 2 )
312.NOT.
IF( ZEROT ) THEN
314.EQ.
ELSE IF( IMAT8 ) THEN
322.EQ.
ELSE IF( IMAT9 ) THEN
330 DO 20 I = IZERO, N - 1
344 CALL SCOPY( N+2*M, A, 1, AF, 1 )
346 CALL SGTTRF( N, AF, AF( M+1 ), AF( N+M+1 ), AF( N+2*M+1 ),
352 $ CALL ALAERH( PATH, 'sgttrf', INFO, IZERO, ' ', N, N, 1,
353 $ 1, -1, IMAT, NFAIL, NERRS, NOUT )
356 CALL SGTT01( N, A, A( M+1 ), A( N+M+1 ), AF, AF( M+1 ),
357 $ AF( N+M+1 ), AF( N+2*M+1 ), IWORK, WORK, LDA,
358 $ RWORK, RESULT( 1 ) )
362.GE.
IF( RESULT( 1 )THRESH ) THEN
363.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
364 $ CALL ALAHD( NOUT, PATH )
365 WRITE( NOUT, FMT = 9999 )N, IMAT, 1, RESULT( 1 )
371 TRANS = TRANSS( ITRAN )
372.EQ.
IF( ITRAN1 ) THEN
377 ANORM = SLANGT( NORM, N, A, A( M+1 ), A( N+M+1 ) )
379.NOT.
IF( TRFCON ) THEN
391 CALL SGTTRS( TRANS, N, 1, AF, AF( M+1 ),
392 $ AF( N+M+1 ), AF( N+2*M+1 ), IWORK, X,
394 AINVNM = MAX( AINVNM, SASUM( N, X, 1 ) )
399.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
402 RCONDC = ( ONE / ANORM ) / AINVNM
404.EQ.
IF( ITRAN1 ) THEN
418 CALL SGTCON( NORM, N, AF, AF( M+1 ), AF( N+M+1 ),
419 $ AF( N+2*M+1 ), IWORK, ANORM, RCOND, WORK,
420 $ IWORK( N+1 ), INFO )
425 $ CALL ALAERH( PATH, 'sgtcon', INFO, 0, NORM, N, N, -1,
426 $ -1, -1, IMAT, NFAIL, NERRS, NOUT )
428 RESULT( 7 ) = SGET06( RCOND, RCONDC )
432.GE.
IF( RESULT( 7 )THRESH ) THEN
433.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
434 $ CALL ALAHD( NOUT, PATH )
435 WRITE( NOUT, FMT = 9997 )NORM, N, IMAT, 7,
454 CALL SLARNV( 2, ISEED, N, XACT( IX ) )
459 TRANS = TRANSS( ITRAN )
460.EQ.
IF( ITRAN1 ) THEN
468 CALL SLAGTM( TRANS, N, NRHS, ONE, A, A( M+1 ),
469 $ A( N+M+1 ), XACT, LDA, ZERO, B, LDA )
474 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
476 CALL SGTTRS( TRANS, N, NRHS, AF, AF( M+1 ),
477 $ AF( N+M+1 ), AF( N+2*M+1 ), IWORK, X,
483 $ CALL ALAERH( PATH, 'sgttrs', INFO, 0, TRANS, N, N,
484 $ -1, -1, NRHS, IMAT, NFAIL, NERRS,
487 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
488 CALL SGTT02( TRANS, N, NRHS, A, A( M+1 ), A( N+M+1 ),
489 $ X, LDA, WORK, LDA, RESULT( 2 ) )
494 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
501 CALL SGTRFS( TRANS, N, NRHS, A, A( M+1 ), A( N+M+1 ),
502 $ AF, AF( M+1 ), AF( N+M+1 ),
503 $ AF( N+2*M+1 ), IWORK, B, LDA, X, LDA,
504 $ RWORK, RWORK( NRHS+1 ), WORK,
505 $ IWORK( N+1 ), INFO )
510 $ CALL ALAERH( PATH, 'sgtrfs', INFO, 0, TRANS, N, N,
511 $ -1, -1, NRHS, IMAT, NFAIL, NERRS,
514 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
516 CALL SGTT05( TRANS, N, NRHS, A, A( M+1 ), A( N+M+1 ),
517 $ B, LDA, X, LDA, XACT, LDA, RWORK,
518 $ RWORK( NRHS+1 ), RESULT( 5 ) )
524.GE.
IF( RESULT( K )THRESH ) THEN
525.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
526 $ CALL ALAHD( NOUT, PATH )
527 WRITE( NOUT, FMT = 9998 )TRANS, N, NRHS, IMAT,
541 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
543 9999 FORMAT( 12X, 'n =
', I5, ',
', 10X, ' type ', I2, ', test(
', I2,
545 9998 FORMAT( ' trans=
''', A1, ''', n =
', I5, ', nrhs=
', I3, ',
type ',
546 $ I2, ', test(
', I2, ') =
', G12.5 )
547 9997 FORMAT( ' norm =
''', A1, ''', n =
', I5, ',
', 10X, ' type ', I2,
548 $ ', test(
', I2, ') =
', G12.5 )
subroutine slarnv(idist, iseed, n, x)
SLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
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 sgtrfs(trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx, ferr, berr, work, iwork, info)
SGTRFS
subroutine sgtcon(norm, n, dl, d, du, du2, ipiv, anorm, rcond, work, iwork, info)
SGTCON
subroutine sgttrf(n, dl, d, du, du2, ipiv, info)
SGTTRF
subroutine sgttrs(trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb, info)
SGTTRS
subroutine slagtm(trans, n, nrhs, alpha, dl, d, du, x, ldx, beta, b, ldb)
SLAGTM performs a matrix-matrix product of the form C = αAB+βC, where A is a tridiagonal matrix,...
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine serrge(path, nunit)
SERRGE
subroutine sgtt02(trans, n, nrhs, dl, d, du, x, ldx, b, ldb, resid)
SGTT02
subroutine sgtt01(n, dl, d, du, dlf, df, duf, du2, ipiv, work, ldwork, rwork, resid)
SGTT01
subroutine sgtt05(trans, n, nrhs, dl, d, du, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
SGTT05
subroutine schkgt(dotype, nn, nval, nns, nsval, thresh, tsterr, a, af, b, x, xact, work, rwork, iwork, nout)
SCHKGT
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4