154 SUBROUTINE zdrvhe( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
155 $ A, AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK,
164 INTEGER NMAX, NN, NOUT, NRHS
165 DOUBLE PRECISION THRESH
169 INTEGER IWORK( * ), NVAL( * )
170 DOUBLE PRECISION RWORK( * )
171 COMPLEX*16 A( * ), AFAC( * ), AINV( * ), B( * ),
172 $ work( * ), x( * ), xact( * )
178 DOUBLE PRECISION ONE, ZERO
179 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
180 INTEGER NTYPES, NTESTS
181 parameter( ntypes = 10, ntests = 6 )
183 parameter( nfact = 2 )
187 CHARACTER DIST, EQUED, FACT,
TYPE, UPLO, XTYPE
189 INTEGER I, I1, I2, IFACT, IMAT, IN, , IOFF, IUPLO,
190 $ izero, j, k, k1, kl, ku, lda, lwork, mode, n,
191 $ nb, nbmin, nerrs, nfail, nimat, nrun, nt,
193 DOUBLE PRECISION , ANORM, CNDNUM, RCOND, RCONDC,
197 CHARACTER FACTS( NFACT ), UPLOS( 2 )
198 INTEGER ISEED( 4 ), ISEEDY( 4 )
199 DOUBLE PRECISION RESULT( NTESTS ), BERR( NRHS ),
200 $ errbnds_n( nrhs, 3 ), errbnds_c( nrhs, 3 )
203 DOUBLE PRECISION DGET06, ZLANHE
218 COMMON / infoc / infot, nunit, ok, lerr
219 COMMON / srnamc / srnamt
222 INTRINSIC dcmplx,
max,
min
225 DATA iseedy / 1988, 1989, 1990, 1991 /
226 DATA uplos /
'U',
'L' / , facts /
'F',
'N' /
238 iseed( i ) = iseedy( i )
240 lwork =
max( 2*nmax, nmax*nrhs )
245 $
CALL zerrvx( path, nout )
265 DO 170 imat = 1, nimat
269 IF( .NOT.dotype( imat ) )
274 zerot = imat.GE.3 .AND. imat.LE.6
275 IF( zerot .AND. n.LT.imat-2 )
281 uplo = uplos( iuplo )
286 CALL zlatb4( path, imat, n, n,
TYPE, KL, KU, ANORM, MODE,
290 CALL zlatms( n, n, dist, iseed,
TYPE, RWORK, MODE,
291 $ cndnum, anorm, kl, ku, uplo, a, lda, work,
297 CALL alaerh( path,
'ZLATMS', info, 0, uplo, n, n, -1,
298 $ -1, -1, imat, nfail, nerrs, nout )
308 ELSE IF( imat.EQ.4 )
THEN
318 IF( iuplo.EQ.1 )
THEN
319 ioff = ( izero-1 )*lda
320 DO 20 i = 1, izero - 1
330 DO 40 i = 1, izero - 1
341 IF( iuplo.EQ.1 )
THEN
371 CALL zlaipd( n, a, lda+1, 0 )
373 DO 150 ifact = 1, nfact
377 fact = facts( ifact )
387 ELSE IF( ifact.EQ.1 )
THEN
391 anorm = zlanhe(
'1', uplo, n, a, lda, rwork )
395 CALL zlacpy( uplo, n, n, a, lda, afac, lda )
396 CALL zhetrf( uplo, n, afac, lda, iwork, work,
401 CALL zlacpy( uplo, n, n, afac, lda, ainv, lda )
402 lwork = (n+nb+1)*(nb+3)
403 CALL zhetri2( uplo, n, ainv, lda, iwork, work,
405 ainvnm = zlanhe( '1
', UPLO, N, AINV, LDA, RWORK )
409.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
412 RCONDC = ( ONE / ANORM ) / AINVNM
419 CALL ZLARHS( PATH, XTYPE, UPLO, ' ', N, N, KL, KU,
420 $ NRHS, A, LDA, XACT, LDA, B, LDA, ISEED,
426.EQ.
IF( IFACT2 ) THEN
427 CALL ZLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
428 CALL ZLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
433 CALL ZHESV( UPLO, N, NRHS, AFAC, LDA, IWORK, X,
434 $ LDA, WORK, LWORK, INFO )
442.LT.
IF( IWORK( K )0 ) THEN
443.NE.
IF( IWORK( K )-K ) THEN
447.NE.
ELSE IF( IWORK( K )K ) THEN
456 CALL ALAERH( PATH, 'zhesv ', INFO, K, UPLO, N,
457 $ N, -1, -1, NRHS, IMAT, NFAIL,
460.NE.
ELSE IF( INFO0 ) THEN
467 CALL ZHET01( UPLO, N, A, LDA, AFAC, LDA, IWORK,
468 $ AINV, LDA, RWORK, RESULT( 1 ) )
472 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
473 CALL ZPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
474 $ LDA, RWORK, RESULT( 2 ) )
478 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
486.GE.
IF( RESULT( K )THRESH ) THEN
487.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
488 $ CALL ALADHD( NOUT, PATH )
489 WRITE( NOUT, FMT = 9999 )'zhesv ', UPLO, N,
490 $ IMAT, K, RESULT( K )
501 $ CALL ZLASET( UPLO, N, N, DCMPLX( ZERO ),
502 $ DCMPLX( ZERO ), AFAC, LDA )
503 CALL ZLASET( 'full
', N, NRHS, DCMPLX( ZERO ),
504 $ DCMPLX( ZERO ), X, LDA )
510 CALL ZHESVX( FACT, UPLO, N, NRHS, A, LDA, AFAC, LDA,
511 $ IWORK, B, LDA, X, LDA, RCOND, RWORK,
512 $ RWORK( NRHS+1 ), WORK, LWORK,
513 $ RWORK( 2*NRHS+1 ), INFO )
521.LT.
IF( IWORK( K )0 ) THEN
522.NE.
IF( IWORK( K )-K ) THEN
526.NE.
ELSE IF( IWORK( K )K ) THEN
535 CALL ALAERH( PATH, 'zhesvx', INFO, K, FACT // UPLO,
536 $ N, N, -1, -1, NRHS, IMAT, NFAIL,
542.GE.
IF( IFACT2 ) THEN
547 CALL ZHET01( UPLO, N, A, LDA, AFAC, LDA, IWORK,
548 $ AINV, LDA, RWORK( 2*NRHS+1 ),
557 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
558 CALL ZPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
559 $ LDA, RWORK( 2*NRHS+1 ), RESULT( 2 ) )
563 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
568 CALL ZPOT05( UPLO, N, NRHS, A, LDA, B, LDA, X, LDA,
569 $ XACT, LDA, RWORK, RWORK( NRHS+1 ),
578 RESULT( 6 ) = DGET06( RCOND, RCONDC )
584.GE.
IF( RESULT( K )THRESH ) THEN
585.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
586 $ CALL ALADHD( NOUT, PATH )
587 WRITE( NOUT, FMT = 9998 )'zhesvx', FACT, UPLO,
588 $ N, IMAT, K, RESULT( K )
599 $ CALL ZLASET( UPLO, N, N, DCMPLX( ZERO ),
600 $ DCMPLX( ZERO ), AFAC, LDA )
601 CALL ZLASET( 'full
', N, NRHS, DCMPLX( ZERO ),
602 $ DCMPLX( ZERO ), X, LDA )
610 CALL ZHESVXX( FACT, UPLO, N, NRHS, A, LDA, AFAC,
611 $ LDA, IWORK, EQUED, WORK( N+1 ), B, LDA, X,
612 $ LDA, RCOND, RPVGRW_SVXX, BERR, N_ERR_BNDS,
613 $ ERRBNDS_N, ERRBNDS_C, 0, ZERO, WORK,
614 $ RWORK(2*NRHS+1), INFO )
622.LT.
IF( IWORK( K )0 ) THEN
623.NE.
IF( IWORK( K )-K ) THEN
627.NE.
ELSE IF( IWORK( K )K ) THEN
635.NE..AND..LE.
IF( INFOK INFON) THEN
636 CALL ALAERH( PATH, 'zhesvxx', INFO, K,
637 $ FACT // UPLO, N, N, -1, -1, NRHS, IMAT, NFAIL,
643.GE.
IF( IFACT2 ) THEN
648 CALL ZHET01( UPLO, N, A, LDA, AFAC, LDA, IWORK,
649 $ AINV, LDA, RWORK(2*NRHS+1),
658 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
659 CALL ZPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
660 $ LDA, RWORK( 2*NRHS+1 ), RESULT( 2 ) )
665 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
670 CALL ZPOT05( UPLO, N, NRHS, A, LDA, B, LDA, X, LDA,
671 $ XACT, LDA, RWORK, RWORK( NRHS+1 ),
680 RESULT( 6 ) = DGET06( RCOND, RCONDC )
686.GE.
IF( RESULT( K )THRESH ) THEN
687.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
688 $ CALL ALADHD( NOUT, PATH )
689 WRITE( NOUT, FMT = 9998 )'zhesvxx',
690 $ FACT, UPLO, N, IMAT, K,
705 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
710 CALL ZEBCHVXX(THRESH, PATH)
712 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ',
type ', I2,
713 $ ', test
', I2, ', ratio =
', G12.5 )
714 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n =', i5,
715 $
', type ', i2,
', test ', i2,
', ratio =', g12.5 )
subroutine xlaenv(ispec, nvalue)
XLAENV
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 zhetrf(uplo, n, a, lda, ipiv, work, lwork, info)
ZHETRF
subroutine zhetri2(uplo, n, a, lda, ipiv, work, lwork, info)
ZHETRI2
subroutine zhesvx(fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, lwork, rwork, info)
ZHESVX computes the solution to system of linear equations A * X = B for HE matrices
subroutine zhesvxx(fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, equed, s, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, rwork, info)
ZHESVXX computes the solution to system of linear equations A * X = B for HE matrices
subroutine zhesv(uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
ZHESV computes the solution to system of linear equations A * X = B for HE matrices
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
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 zlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
ZLARHS
subroutine zdrvhe(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
ZDRVHE
subroutine zerrvx(path, nunit)
ZERRVX
subroutine zget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
ZGET04
subroutine zhet01(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
ZHET01
subroutine zpot05(uplo, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
ZPOT05
subroutine zpot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
ZPOT02
subroutine zlaipd(n, a, inda, vinda)
ZLAIPD
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