150 SUBROUTINE cdrvhe( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
151 $ A, AFAC, AINV, B, X, XACT, WORK, RWORK, IWORK,
160 INTEGER NMAX, NN, NOUT, NRHS
165 INTEGER IWORK( * ), NVAL( * )
167 COMPLEX A( * ), AFAC( * ), ( * ), B( * ),
168 $ work( * ), x( * ), xact( * )
175 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
176 INTEGER NTYPES, NTESTS
177 parameter( ntypes = 10, ntests = 6 )
179 parameter( nfact = 2 )
183 CHARACTER DIST, FACT,
TYPE, UPLO, XTYPE
185 INTEGER I, I1, I2, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
186 $ izero, j, k, k1, kl, ku, lda, lwork, mode, n,
187 $ nb, nbmin, nerrs, nfail, nimat, nrun, nt
188 REAL AINVNM, ANORM, CNDNUM, RCOND, RCONDC
191 CHARACTER FACTS( NFACT ), UPLOS( 2 )
192 INTEGER ISEED( 4 ), ISEEDY( 4 )
193 REAL RESULT( NTESTS )
197 EXTERNAL CLANHE, SGET06
211 COMMON / infoc / infot, nunit, ok, lerr
212 COMMON / srnamc / srnamt
218 DATA iseedy / 1988, 1989, 1990, 1991 /
219 DATA uplos /
'U',
'L' / , facts / 'f
', 'n
' /
225 PATH( 1: 1 ) = 'Complex precision
'
231 ISEED( I ) = ISEEDY( I )
233 LWORK = MAX( 2*NMAX, NMAX*NRHS )
238 $ CALL CERRVX( PATH, NOUT )
246 CALL XLAENV( 2, NBMIN )
258 DO 170 IMAT = 1, NIMAT
262.NOT.
IF( DOTYPE( IMAT ) )
267.GE..AND..LE.
ZEROT = IMAT3 IMAT6
268.AND..LT.
IF( ZEROT NIMAT-2 )
274 UPLO = UPLOS( IUPLO )
279 CALL CLATB4( PATH, IMAT, N, N, TYPE, KL, KU, ANORM, MODE,
283 CALL CLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE,
284 $ CNDNUM, ANORM, KL, KU, UPLO, A, LDA, WORK,
290 CALL ALAERH( PATH, 'CLATMS
', INFO, 0, UPLO, N, N, -1,
291 $ -1, -1, IMAT, NFAIL, NERRS, NOUT )
301.EQ.
ELSE IF( IMAT4 ) THEN
311.EQ.
IF( IUPLO1 ) THEN
312 IOFF = ( IZERO-1 )*LDA
313 DO 20 I = 1, IZERO - 1
323 DO 40 I = 1, IZERO - 1
334.EQ.
IF( IUPLO1 ) THEN
364 CALL CLAIPD( N, A, LDA+1, 0 )
366 DO 150 IFACT = 1, NFACT
370 FACT = FACTS( IFACT )
380.EQ.
ELSE IF( IFACT1 ) THEN
384 ANORM = CLANHE( '1
', UPLO, N, A, LDA, RWORK )
388 CALL CLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
389 CALL CHETRF( UPLO, N, AFAC, LDA, IWORK, WORK,
394 CALL CLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
395 LWORK = (N+NB+1)*(NB+3)
396 CALL CHETRI2( UPLO, N, AINV, LDA, IWORK, WORK,
398 AINVNM = CLANHE( '1
', UPLO, N, AINV, LDA, RWORK )
402.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
405 RCONDC = ( ONE / ANORM ) / AINVNM
412 CALL CLARHS( PATH, XTYPE, UPLO, ' ', N, N, KL, KU,
413 $ NRHS, A, LDA, XACT, LDA, B, LDA, ISEED,
419.EQ.
IF( IFACT2 ) THEN
420 CALL CLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
421 CALL CLACPY( 'Full
', N, NRHS, B, LDA, X, LDA )
426 CALL CHESV( UPLO, N, NRHS, AFAC, LDA, IWORK, X,
427 $ LDA, WORK, LWORK, INFO )
435.LT.
IF( IWORK( K )0 ) THEN
436.NE.
IF( IWORK( K )-K ) THEN
440.NE.
ELSE IF( IWORK( K )K ) THEN
449 CALL ALAERH( PATH, 'CHESV
', INFO, K, UPLO, N,
450 $ N, -1, -1, NRHS, IMAT, NFAIL,
453.NE.
ELSE IF( INFO0 ) THEN
460 CALL CHET01( UPLO, N, A, LDA, AFAC, LDA, IWORK,
461 $ AINV, LDA, RWORK, RESULT( 1 ) )
465 CALL CLACPY( 'Full
', N, NRHS, B, LDA, WORK, LDA )
466 CALL CPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
467 $ LDA, RWORK, RESULT( 2 ) )
471 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
479.GE.
IF( RESULT( K )THRESH ) THEN
480.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
481 $ CALL ALADHD( NOUT, PATH )
482 WRITE( NOUT, FMT = 9999 )'CHESV
', UPLO, N,
483 $ IMAT, K, RESULT( K )
494 $ CALL CLASET( UPLO, N, N, CMPLX( ZERO ),
495 $ CMPLX( ZERO ), AFAC, LDA )
496 CALL CLASET( 'Full
', N, NRHS, CMPLX( ZERO ),
497 $ CMPLX( ZERO ), X, LDA )
503 CALL CHESVX( FACT, UPLO, N, NRHS, A, LDA, AFAC, LDA,
504 $ IWORK, B, LDA, X, LDA, RCOND, RWORK,
505 $ RWORK( NRHS+1 ), WORK, LWORK,
506 $ RWORK( 2*NRHS+1 ), INFO )
514.LT.
IF( IWORK( K )0 ) THEN
515.NE.
IF( IWORK( K )-K ) THEN
519.NE.
ELSE IF( IWORK( K )K ) THEN
528 CALL ALAERH( PATH, 'CHESVX
', INFO, K, FACT // UPLO,
529 $ N, N, -1, -1, NRHS, IMAT, NFAIL,
535.GE.
IF( IFACT2 ) THEN
540 CALL CHET01( UPLO, N, A, LDA, AFAC, LDA, IWORK,
541 $ AINV, LDA, RWORK( 2*NRHS+1 ),
550 CALL CLACPY( 'Full
', N, NRHS, B, LDA, WORK, LDA )
551 CALL CPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
552 $ LDA, RWORK( 2*NRHS+1 ), RESULT( 2 ) )
556 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
561 CALL CPOT05( UPLO, N, NRHS, A, LDA, B, LDA, X, LDA,
562 $ XACT, LDA, RWORK, RWORK( NRHS+1 ),
571 RESULT( 6 ) = SGET06( RCOND, RCONDC )
577.GE.
IF( RESULT( K )THRESH ) THEN
578.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
579 $ CALL ALADHD( NOUT, PATH )
580 WRITE( NOUT, FMT = 9998 )'CHESVX
', FACT, UPLO,
581 $ N, IMAT, K, RESULT( K )
595 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
597 9999 FORMAT( 1X, A, ', UPLO=
''', A1, ''', n =
', I5, ',
type ', I2,
598 $ ', test
', I2, ', ratio =
', G12.5 )
599 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n =
', I5,
600 $ ',
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 chetri2(uplo, n, a, lda, ipiv, work, lwork, info)
CHETRI2
subroutine chetrf(uplo, n, a, lda, ipiv, work, lwork, info)
CHETRF
subroutine chesvx(fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, lwork, rwork, info)
CHESVX computes the solution to system of linear equations A * X = B for HE matrices
subroutine chesv(uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
CHESV computes the solution to system of linear equations A * X = B for HE matrices
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine cerrvx(path, nunit)
CERRVX
subroutine claipd(n, a, inda, vinda)
CLAIPD
subroutine chet01(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
CHET01
subroutine cdrvhe(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
CDRVHE
subroutine cpot05(uplo, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
CPOT05
subroutine clatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
CLATB4
subroutine cpot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
CPOT02
subroutine cget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
CGET04
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS