137 SUBROUTINE sdrvgt( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, AF,
138 $ B, X, XACT, WORK, RWORK, IWORK, NOUT )
146 INTEGER NN, NOUT, NRHS
151 INTEGER IWORK( * ), NVAL( * )
152 REAL A( * ), AF( * ), B( * ), RWORK( * ), WORK( * ),
160 parameter( one = 1.0e+0, zero = 0.0e+0 )
162 parameter( ntypes = 12 )
164 parameter( ntests = 6 )
167 LOGICAL TRFCON, ZEROT
168 CHARACTER DIST, FACT, TRANS, TYPE
170 INTEGER I, IFACT, IMAT, IN, , ITRAN, IX, , J,
171 $ k, k1, kl, koff, ku, lda, m, mode, n, nerrs,
172 $ nfail, nimat, nrun, nt
173 REAL AINVNM, ANORM, ANORMI, ANORMO, COND, RCOND,
174 $ rcondc, rcondi, rcondo
177 CHARACTER TRANSS( 3 )
178 INTEGER ISEED( 4 ), ISEEDY( 4 )
179 REAL RESULT( NTESTS ), ( 3 )
182 REAL SASUM, SGET06, SLANGT
183 EXTERNAL sasum, sget06, slangt
200 COMMON / infoc / infot, nunit, ok, lerr
201 COMMON / srnamc / srnamt
204 DATA iseedy / 0, 0, 0, 1 / , transs / 'n
', 't
',
209 PATH( 1: 1 ) = 'single precision
'
215 ISEED( I ) = ISEEDY( I )
221 $ CALL SERRVX( PATH, NOUT )
235 DO 130 IMAT = 1, NIMAT
239.NOT.
IF( DOTYPE( IMAT ) )
244 CALL SLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM, MODE,
247.GE..AND..LE.
ZEROT = IMAT8 IMAT10
252 KOFF = MAX( 2-KU, 3-MAX( 1, N ) )
254 CALL SLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE, COND,
255 $ ANORM, KL, KU, 'z
', AF( KOFF ), 3, WORK,
261 CALL ALAERH( PATH, 'slatms', INFO, 0, ' ', N, N, KL,
262 $ KU, -1, IMAT, NFAIL, NERRS, NOUT )
268 CALL SCOPY( N-1, AF( 4 ), 3, A, 1 )
269 CALL SCOPY( N-1, AF( 3 ), 3, A( N+M+1 ), 1 )
271 CALL SCOPY( N, AF( 2 ), 3, A( M+1 ), 1 )
277.NOT..OR..NOT.
IF( ZEROT DOTYPE( 7 ) ) THEN
281 CALL SLARNV( 2, ISEED, N+2*M, A )
283 $ CALL SSCAL( N+2*M, ANORM, A, 1 )
284.GT.
ELSE IF( IZERO0 ) THEN
289.EQ.
IF( IZERO1 ) THEN
293.EQ.
ELSE IF( IZERON ) THEN
297 A( 2*N-2+IZERO ) = Z( 1 )
298 A( N-1+IZERO ) = Z( 2 )
305.NOT.
IF( ZEROT ) THEN
307.EQ.
ELSE IF( IMAT8 ) THEN
315.EQ.
ELSE IF( IMAT9 ) THEN
323 DO 20 I = IZERO, N - 1
334.EQ.
IF( IFACT1 ) THEN
349.EQ.
ELSE IF( IFACT1 ) THEN
350 CALL SCOPY( N+2*M, A, 1, AF, 1 )
354 ANORMO = SLANGT( '1
', N, A, A( M+1 ), A( N+M+1 ) )
355 ANORMI = SLANGT( 'i
', N, A, A( M+1 ), A( N+M+1 ) )
359 CALL SGTTRF( N, AF, AF( M+1 ), AF( N+M+1 ),
360 $ AF( N+2*M+1 ), IWORK, INFO )
371 CALL SGTTRS( 'no transpose
', N, 1, AF, AF( M+1 ),
372 $ AF( N+M+1 ), AF( N+2*M+1 ), IWORK, X,
374 AINVNM = MAX( AINVNM, SASUM( N, X, 1 ) )
379.LE..OR..LE.
IF( ANORMOZERO AINVNMZERO ) THEN
382 RCONDO = ( ONE / ANORMO ) / AINVNM
394 CALL SGTTRS( 'transpose
', N, 1, AF, AF( M+1 ),
395 $ AF( N+M+1 ), AF( N+2*M+1 ), IWORK, X,
397 AINVNM = MAX( AINVNM, SASUM( N, X, 1 ) )
402.LE..OR..LE.
IF( ANORMIZERO AINVNMZERO ) THEN
405 RCONDI = ( ONE / ANORMI ) / AINVNM
410 TRANS = TRANSS( ITRAN )
411.EQ.
IF( ITRAN1 ) THEN
421 CALL SLARNV( 2, ISEED, N, XACT( IX ) )
427 CALL SLAGTM( TRANS, N, NRHS, ONE, A, A( M+1 ),
428 $ A( N+M+1 ), XACT, LDA, ZERO, B, LDA )
430.EQ..AND..EQ.
IF( IFACT2 ITRAN1 ) THEN
437 CALL SCOPY( N+2*M, A, 1, AF, 1 )
438 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
441 CALL SGTSV( N, NRHS, AF, AF( M+1 ), AF( N+M+1 ), X,
447 $ CALL ALAERH( PATH, 'sgtsv ', INFO, IZERO, ' ',
448 $ N, N, 1, 1, NRHS, IMAT, NFAIL,
451.EQ.
IF( IZERO0 ) THEN
455 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK,
457 CALL SGTT02( TRANS, N, NRHS, A, A( M+1 ),
458 $ A( N+M+1 ), X, LDA, WORK, LDA,
463 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
472.GE.
IF( RESULT( K )THRESH ) THEN
473.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
474 $ CALL ALADHD( NOUT, PATH )
475 WRITE( NOUT, FMT = 9999 )'sgtsv ', N, IMAT,
485.GT.
IF( IFACT1 ) THEN
493 CALL SLASET( 'full
', N, NRHS, ZERO, ZERO, X, LDA )
499 CALL SGTSVX( FACT, TRANS, N, NRHS, A, A( M+1 ),
500 $ A( N+M+1 ), AF, AF( M+1 ), AF( N+M+1 ),
501 $ AF( N+2*M+1 ), IWORK, B, LDA, X, LDA,
502 $ RCOND, RWORK, RWORK( NRHS+1 ), WORK,
503 $ IWORK( N+1 ), INFO )
508 $ CALL ALAERH( PATH, 'sgtsvx', INFO, IZERO,
509 $ FACT // TRANS, N, N, 1, 1, NRHS, IMAT,
510 $ NFAIL, NERRS, NOUT )
512.GE.
IF( IFACT2 ) THEN
517 CALL SGTT01( N, A, A( M+1 ), A( N+M+1 ), AF,
518 $ AF( M+1 ), AF( N+M+1 ), AF( N+2*M+1 ),
519 $ IWORK, WORK, LDA, RWORK, RESULT( 1 ) )
530 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
531 CALL SGTT02( TRANS, N, NRHS, A, A( M+1 ),
532 $ A( N+M+1 ), X, LDA, WORK, LDA,
537 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
542 CALL SGTT05( TRANS, N, NRHS, A, A( M+1 ),
543 $ A( N+M+1 ), B, LDA, X, LDA, XACT, LDA,
544 $ RWORK, RWORK( NRHS+1 ), RESULT( 4 ) )
552.GE.
IF( RESULT( K )THRESH ) THEN
553.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
554 $ CALL ALADHD( NOUT, PATH )
555 WRITE( NOUT, FMT = 9998 )'sgtsvx', FACT, TRANS,
556 $ N, IMAT, K, RESULT( K )
563 RESULT( 6 ) = SGET06( RCOND, RCONDC )
564.GE.
IF( RESULT( 6 )THRESH ) THEN
565.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
566 $ CALL ALADHD( NOUT, PATH )
567 WRITE( NOUT, FMT = 9998 )'sgtsvx', FACT, TRANS, N,
568 $ IMAT, K, RESULT( K )
571 NRUN = NRUN + NT - K1 + 2
580 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
582 9999 FORMAT( 1X, A, ', n =
', I5, ',
type ', I2, ', test
', I2,
583 $ ', ratio =
', G12.5 )
584 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', trans=
''', A1, ''', n =
',
585 $ I5, ',
type ', I2, ', test
', I2, ', ratio =
', G12.5 )
subroutine slarnv(idist, iseed, n, x)
SLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
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 sgtsv(n, nrhs, dl, d, du, b, ldb, info)
SGTSV computes the solution to system of linear equations A * X = B for GT matrices
subroutine sgtsvx(fact, trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
SGTSVX computes the solution to system of linear equations A * X = B for GT matrices
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 serrvx(path, nunit)
SERRVX
subroutine sdrvgt(dotype, nn, nval, nrhs, thresh, tsterr, a, af, b, x, xact, work, rwork, iwork, nout)
SDRVGT
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 sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4