151 $ NMAX, A, AFAC, AINV, B, X, XACT, WORK,
152 $ RWORK, IWORK, NOUT )
160 INTEGER NMAX, NN, NOUT,
161 DOUBLE PRECISION THRESH
165 INTEGER IWORK( * ), NVAL( * )
166 DOUBLE PRECISION RWORK( * )
167 COMPLEX*16 A( * ), AFAC( * ), AINV(
174 DOUBLE PRECISION ONE,
175 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
176 INTEGER NTYPES, NTESTS
177 parameter( ntypes = 10, ntests = 3 )
179 parameter( nfact = 2 )
183 CHARACTER DIST, FACT,
TYPE, UPLO, XTYPE
184 CHARACTER*3 MATPATH, PATH
185 INTEGER I, , I2, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
186 $ izero, j, k, kl, ku, lda, lwork, mode, n,
187 $ nb, nbmin, nerrs, nfail, nimat, nrun, nt
188 DOUBLE PRECISION AINVNM, ANORM, CNDNUM, RCONDC
191 CHARACTER FACTS( NFACT ), UPLOS( 2 )
192 INTEGER ISEED( 4 ), ISEEDY( 4 )
193 DOUBLE PRECISION RESULT( NTESTS )
197 DOUBLE PRECISION ZLANHE
212 COMMON / infoc / infot, nunit, ok, lerr
213 COMMON / srnamc / srnamt
219 DATA iseedy / 1988, 1989, 1990, 1991 /
220 DATA uplos /
'U',
'L' / , facts /
'F',
'N' /
228 path( 1: 1 ) =
'Zomplex precision'
233 matpath( 1: 1 ) =
'Zomplex precision'
234 matpath( 2: 3 ) =
'HE'
240 iseed( i ) = iseedy( i )
242 lwork =
max( 2*nmax, nmax*nrhs )
247 $
CALL zerrvx( path, nout )
268 DO 170 imat = 1, nimat
272 IF( .NOT.dotype( imat ) )
277 zerot = imat.GE.3 .AND. imat.LE.6
278 IF( zerot .AND. n.LT.imat-2 )
284 uplo = uplos( iuplo )
291 CALL zlatb4( matpath, imat, n, n,
TYPE, kl, ku, anorm,
292 $ mode, cndnum, dist )
297 CALL zlatms( n, n, dist, iseed,
TYPE, rwork, mode,
298 $ cndnum, anorm, kl, ku, uplo, a, lda,
304 CALL alaerh( path,
'ZLATMS', info, 0, uplo, n, n,
315 ELSE IF( imat.EQ.4 )
THEN
325 IF( iuplo.EQ.1 )
THEN
326 ioff = ( izero-1 )*lda
327 DO 20 i = 1, izero - 1
337 DO 40 i = 1, izero - 1
347 IF( iuplo.EQ.1 )
THEN
380 DO 150 ifact = 1, nfact
384 fact = facts( ifact )
394 ELSE IF( ifact.EQ.1 )
THEN
398 anorm = zlanhe(
'1', uplo, n, a, lda, rwork )
403 CALL zlacpy( uplo, n, n, a, lda, afac, lda )
409 CALL zlacpy( uplo, n, n, afac, lda, ainv, lda )
410 lwork = (n+nb+1)*(nb+3)
413 ainvnm = zlanhe(
'1', uplo, n, ainv, lda, rwork )
417 IF( anorm.LE.zero .OR. ainvnm.LE.zero )
THEN
420 rcondc = ( one / anorm ) / ainvnm
427 CALL zlarhs( matpath, xtype, uplo,
' ', n, n, kl, ku,
428 $ nrhs, a, lda, xact, lda, b, lda, iseed,
434.EQ.
IF( IFACT2 ) THEN
435 CALL ZLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
436 CALL ZLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
442 CALL ZHESV_ROOK( UPLO, N, NRHS, AFAC, LDA, IWORK,
443 $ X, LDA, WORK, LWORK, INFO )
451.LT.
IF( IWORK( K )0 ) THEN
452.NE.
IF( IWORK( K )-K ) THEN
456.NE.
ELSE IF( IWORK( K )K ) THEN
465 CALL ALAERH( PATH, 'zhesv_rook', INFO, K, UPLO,
466 $ N, N, -1, -1, NRHS, IMAT, NFAIL,
469.NE.
ELSE IF( INFO0 ) THEN
476 CALL ZHET01_ROOK( UPLO, N, A, LDA, AFAC, LDA,
477 $ IWORK, AINV, LDA, RWORK,
482 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
483 CALL ZPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
484 $ LDA, RWORK, RESULT( 2 ) )
489 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
497.GE.
IF( RESULT( K )THRESH ) THEN
498.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
499 $ CALL ALADHD( NOUT, PATH )
501 $ N, IMAT, K, RESULT( K )
517 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
519 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ',
type ', I2,
520 $ ', 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 zhetri_rook(uplo, n, a, lda, ipiv, work, info)
ZHETRI_ROOK computes the inverse of HE matrix using the factorization obtained with the bounded Bunch...
subroutine zhetrf_rook(uplo, n, a, lda, ipiv, work, lwork, info)
ZHETRF_ROOK computes the factorization of a complex Hermitian indefinite matrix using the bounded Bun...
subroutine zhesv_rook(uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
ZHESV_ROOK computes the solution to a system of linear equations A * X = B for HE matrices using the ...
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
ZLARHS
subroutine zerrvx(path, nunit)
ZERRVX
subroutine zget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
ZGET04
subroutine zdrvhe_rook(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
ZDRVHE_ROOK
subroutine zpot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
ZPOT02
subroutine zhet01_rook(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
ZHET01_ROOK
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