137 SUBROUTINE zdrvgt( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, A, AF,
138 $ B, X, XACT, WORK, RWORK, IWORK, NOUT )
146 INTEGER NN, NOUT, NRHS
147 DOUBLE PRECISION THRESH
151 INTEGER IWORK( * ), NVAL( * )
152 DOUBLE PRECISION RWORK( * )
153 COMPLEX*16 A( * ), AF( * ), B( * ), WORK( * ), X( * ),
160 DOUBLE PRECISION ONE, ZERO
161 parameter( one = 1.0d+0, zero = 0.0d+0 )
163 parameter( ntypes = 12 )
165 parameter( ntests = 6 )
168 LOGICAL TRFCON, ZEROT
169 CHARACTER DIST, FACT, TRANS, TYPE
171 INTEGER I, IFACT, IMAT, IN, INFO, ITRAN, IX, IZERO, J,
172 $ k, k1, kl, koff, ku, lda, m, mode, n, nerrs,
173 $ nfail, nimat, nrun, nt
174 DOUBLE PRECISION AINVNM, , ANORMI, ANORMO, COND, RCOND,
175 $ rcondc, rcondi, rcondo
178 CHARACTER TRANSS( 3 )
179 INTEGER ISEED( 4 ), ISEEDY( 4 )
180 DOUBLE PRECISION RESULT( NTESTS ), Z( 3 )
183 DOUBLE PRECISION DGET06, , ZLANGT
184 EXTERNAL dget06,
dzasum, zlangt
193 INTRINSIC dcmplx,
max
201 COMMON / infoc / infot, nunit, ok, lerr
202 COMMON / srnamc / srnamt
205 DATA iseedy / 0, 0, 0, 1 / , transs /
'N',
'T',
210 path( 1: 1 ) =
'Zomplex precision'
216 iseed( i ) = iseedy( i )
222 $
CALL zerrvx( path, nout )
236 DO 130 imat = 1, nimat
240 IF( .NOT.dotype( imat ) )
245 CALL zlatb4( path, imat, n, n,
TYPE, kl, ku, anorm, mode,
248 zerot = imat.GE.8 .AND. imat.LE.10
255 CALL zlatms( n, n, dist, iseed,
TYPE, rwork, mode, cond,
256 $ anorm, kl, ku,
'Z', af( koff ), 3, work,
262 CALL alaerh( path,
'ZLATMS', info, 0,
' ', n, n, kl,
263 $ ku, -1, imat, nfail, nerrs, nout )
269 CALL zcopy( n-1, af( 4 ), 3, a, 1 )
270 CALL zcopy( n-1, af( 3 ), 3, a( n+m+1 ), 1 )
272 CALL zcopy( n, af( 2 ), 3, a( m+1 ), 1 )
278 IF( .NOT.zerot .OR. .NOT.dotype( 7 ) )
THEN
282 CALL zlarnv( 2, iseed, n+2*m, a )
284 $
CALL zdscal( n+2*m, anorm, a, 1 )
285 ELSE IF( izero.GT.0 )
THEN
290 IF( izero.EQ.1 )
THEN
294 ELSE IF( izero.EQ.n )
THEN
298 a( 2*n-2+izero ) = z( 1 )
299 a( n-1+izero ) = z( 2 )
306 IF( .NOT.zerot )
THEN
308 ELSE IF( imat.EQ.8 )
THEN
316 ELSE IF( imat.EQ.9 )
THEN
324 DO 20 i = izero, n - 1
335 IF( ifact.EQ.1 )
THEN
350 ELSE IF( ifact.EQ.1 )
THEN
351 CALL zcopy( n+2*m, a, 1, af, 1 )
355 anormo = zlangt(
'1', n, a, a( m+1 ), a( n+m+1 ) )
356 anormi = zlangt( 'i
', N, A, A( M+1 ), A( N+M+1 ) )
360 CALL ZGTTRF( N, AF, AF( M+1 ), AF( N+M+1 ),
361 $ AF( N+2*M+1 ), IWORK, INFO )
372 CALL ZGTTRS( 'no transpose
', N, 1, AF, AF( M+1 ),
373 $ AF( N+M+1 ), AF( N+2*M+1 ), IWORK, X,
375 AINVNM = MAX( AINVNM, DZASUM( N, X, 1 ) )
380.LE..OR..LE.
IF( ANORMOZERO AINVNMZERO ) THEN
383 RCONDO = ( ONE / ANORMO ) / AINVNM
395 CALL ZGTTRS( 'conjugate transpose
', N, 1, AF,
396 $ AF( M+1 ), AF( N+M+1 ), AF( N+2*M+1 ),
397 $ IWORK, X, LDA, INFO )
398 AINVNM = MAX( AINVNM, DZASUM( N, X, 1 ) )
403.LE..OR..LE.
IF( ANORMIZERO AINVNMZERO ) THEN
406 RCONDI = ( ONE / ANORMI ) / AINVNM
411 TRANS = TRANSS( ITRAN )
412.EQ.
IF( ITRAN1 ) THEN
422 CALL ZLARNV( 2, ISEED, N, XACT( IX ) )
428 CALL ZLAGTM( TRANS, N, NRHS, ONE, A, A( M+1 ),
429 $ A( N+M+1 ), XACT, LDA, ZERO, B, LDA )
431.EQ..AND..EQ.
IF( IFACT2 ITRAN1 ) THEN
438 CALL ZCOPY( N+2*M, A, 1, AF, 1 )
439 CALL ZLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
442 CALL ZGTSV( N, NRHS, AF, AF( M+1 ), AF( N+M+1 ), X,
448 $ CALL ALAERH( PATH, 'zgtsv ', INFO, IZERO, ' ',
449 $ N, N, 1, 1, NRHS, IMAT, NFAIL,
452.EQ.
IF( IZERO0 ) THEN
456 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK,
458 CALL ZGTT02( TRANS, N, NRHS, A, A( M+1 ),
459 $ A( N+M+1 ), X, LDA, WORK, LDA,
464 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
473.GE.
IF( RESULT( K )THRESH ) THEN
474.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
475 $ CALL ALADHD( NOUT, PATH )
476 WRITE( NOUT, FMT = 9999 )'zgtsv ', N, IMAT,
486.GT.
IF( IFACT1 ) THEN
494 CALL ZLASET( 'full
', N, NRHS, DCMPLX( ZERO ),
495 $ DCMPLX( ZERO ), X, LDA )
501 CALL ZGTSVX( FACT, TRANS, N, NRHS, A, A( M+1 ),
502 $ A( N+M+1 ), AF, AF( M+1 ), AF( N+M+1 ),
503 $ AF( N+2*M+1 ), IWORK, B, LDA, X, LDA,
504 $ RCOND, RWORK, RWORK( NRHS+1 ), WORK,
505 $ RWORK( 2*NRHS+1 ), INFO )
510 $ CALL ALAERH( PATH, 'zgtsvx', INFO, IZERO,
511 $ FACT // TRANS, N, N, 1, 1, NRHS, IMAT,
512 $ NFAIL, NERRS, NOUT )
514.GE.
IF( IFACT2 ) THEN
519 CALL ZGTT01( N, A, A( M+1 ), A( N+M+1 ), AF,
520 $ AF( M+1 ), AF( N+M+1 ), AF( N+2*M+1 ),
521 $ IWORK, WORK, LDA, RWORK, RESULT( 1 ) )
532 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
533 CALL ZGTT02( TRANS, N, NRHS, A, A( M+1 ),
534 $ A( N+M+1 ), X, LDA, WORK, LDA,
539 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
544 CALL ZGTT05( TRANS, N, NRHS, A, A( M+1 ),
545 $ A( N+M+1 ), B, LDA, X, LDA, XACT, LDA,
546 $ RWORK, RWORK( NRHS+1 ), RESULT( 4 ) )
554.GE.
IF( RESULT( K )THRESH ) THEN
555.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
556 $ CALL ALADHD( NOUT, PATH )
557 WRITE( NOUT, FMT = 9998 )'zgtsvx', FACT, TRANS,
558 $ N, IMAT, K, RESULT( K )
565 RESULT( 6 ) = DGET06( RCOND, RCONDC )
566.GE.
IF( RESULT( 6 )THRESH ) THEN
567.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
568 $ CALL ALADHD( NOUT, PATH )
569 WRITE( NOUT, FMT = 9998 )'zgtsvx', FACT, TRANS, N,
570 $ IMAT, K, RESULT( K )
573 NRUN = NRUN + NT - K1 + 2
582 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
584 9999 FORMAT( 1X, A, ', n =
', I5, ',
type ', I2, ', test
', I2,
585 $ ', ratio =
', G12.5 )
586 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', trans=
''', A1, ''', n =
',
587 $ I5, ',
type ', I2, ', test
', I2, ', ratio =
', G12.5 )
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 zgttrs(trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb, info)
ZGTTRS
subroutine zgttrf(n, dl, d, du, du2, ipiv, info)
ZGTTRF
subroutine zgtsv(n, nrhs, dl, d, du, b, ldb, info)
ZGTSV computes the solution to system of linear equations A * X = B for GT matrices
subroutine zgtsvx(fact, trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info)
ZGTSVX computes the solution to system of linear equations A * X = B for GT matrices
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zlarnv(idist, iseed, n, x)
ZLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine zlagtm(trans, n, nrhs, alpha, dl, d, du, x, ldx, beta, b, ldb)
ZLAGTM performs a matrix-matrix product of the form C = αAB+βC, where A is a tridiagonal matrix,...
subroutine zlaset(uplo, m, n, alpha, beta, a, lda)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine zdscal(n, da, zx, incx)
ZDSCAL
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zgtt05(trans, n, nrhs, dl, d, du, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
ZGTT05
subroutine zerrvx(path, nunit)
ZERRVX
subroutine zget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
ZGET04
subroutine zgtt01(n, dl, d, du, dlf, df, duf, du2, ipiv, work, ldwork, rwork, resid)
ZGTT01
subroutine zdrvgt(dotype, nn, nval, nrhs, thresh, tsterr, a, af, b, x, xact, work, rwork, iwork, nout)
ZDRVGT
subroutine zgtt02(trans, n, nrhs, dl, d, du, x, ldx, b, ldb, resid)
ZGTT02
subroutine zlatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
ZLATB4
subroutine zlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
ZLATMS
double precision function dzasum(n, zx, incx)
DZASUM