174 SUBROUTINE cchkhe_rk( DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL,
175 $ THRESH, TSTERR, NMAX, A, AFAC, E, AINV, B,
176 $ X, XACT, WORK, RWORK, IWORK, NOUT )
184 INTEGER NMAX, NN, NNB, NNS, NOUT
189 INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
191 COMPLEX A( * ), AFAC( * ), AINV( * ), B( * ), E( * ),
192 $ work( * ), x( * ), xact( * )
199 PARAMETER ( = 0.0e+0, one = 1.0e+0 )
201 parameter( onehalf = 0.5e+0 )
203 parameter( eight = 8.0e+0, sevten = 17.0e+0 )
205 parameter( czero = ( 0.0e+0, 0.0e+0 ) )
207 parameter( ntypes = 10 )
209 parameter( ntests = 7 )
212 LOGICAL TRFCON, ZEROT
213 CHARACTER DIST,
TYPE, UPLO, XTYPE
214 CHARACTER*3 PATH, MATPATH
215 INTEGER I, I1, I2, IMAT, IN, INB, INFO, IOFF, IRHS,
216 $ itemp, itemp2, iuplo, izero, j, k, kl, ku, lda,
217 $ lwork, mode, n, nb, nerrs, nfail, nimat, nrhs,
219 REAL ALPHA, ANORM, CNDNUM, CONST, SING_MAX,
220 $ SING_MIN, RCOND, RCONDC, STEMP
224 INTEGER ISEED( 4 ), ISEEDY( 4 ), IDUMMY( 1 )
225 REAL RESULT( NTESTS )
226 COMPLEX BLOCK( 2, 2 ), CDUMMY( 1 )
229 REAL CLANGE, CLANHE, SGET06
230 EXTERNAL CLANGE, CLANHE, SGET06
239 INTRINSIC conjg,
max,
min, sqrt
247 COMMON / infoc / infot, nunit, ok, lerr
248 COMMON / srnamc / srnamt
251 DATA iseedy / 1988, 1989, 1990, 1991 /
252 DATA uplos /
'U',
'L' /
258 alpha = ( one+sqrt( sevten ) ) / eight
262 path( 1: 1 ) =
'Complex precision'
267 matpath( 1: 1 ) =
'Complex precision'
268 matpath( 2: 3 ) =
'HE'
274 iseed( i ) = iseedy( i )
280 $
CALL cerrhe( path, nout )
302 DO 260 imat = 1, nimat
306 IF( .NOT.dotype( imat ) )
311 zerot = imat.GE.3 .AND. imat.LE.6
312 IF( zerot .AND. n.LT.imat-2 )
318 uplo = uplos( iuplo )
325 CALL clatb4( matpath, imat, n, n,
TYPE, kl, ku, anorm,
326 $ mode, cndnum, dist )
331 CALL clatms( n, n, dist, iseed,
TYPE, rwork, mode,
332 $ cndnum, anorm, kl, ku, uplo, a, lda,
338 CALL alaerh( path,
'CLATMS', info, 0, uplo, n, n,
339 $ -1, -1, -1, imat, nfail, nerrs, nout )
353 ELSE IF( imat.EQ.4 )
THEN
363 IF( iuplo.EQ.1 )
THEN
364 ioff = ( izero-1 )*lda
365 DO 20 i = 1, izero - 1
375 DO 40 i = 1, izero - 1
385 IF( iuplo.EQ.1 )
THEN
432 CALL clacpy( uplo, n, n, a, lda, afac, lda )
439 lwork =
max( 2, nb )*lda
441 CALL chetrf_rk( uplo, n, afac, lda, e, iwork, ainv,
450 IF( iwork( k ).LT.0 )
THEN
451 IF( iwork( k ).NE.-k )
THEN
455 ELSE IF( iwork( k ).NE.k )
THEN
464 $
CALL alaerh( path,
'CHETRF_RK', info, k,
465 $ uplo, n, n, -1, -1, nb, imat,
466 $ nfail, nerrs, nout )
479 CALL chet01_3( uplo, n, a, lda, afac, lda, e, iwork,
480 $ ainv, lda, rwork, result( 1 ) )
489 IF( inb.EQ.1 .AND. .NOT.trfcon )
THEN
490 CALL clacpy( uplo, n, n, afac, lda, ainv, lda )
497 lwork = (n+nb+1)*(nb+3)
498 CALL chetri_3( uplo, n, ainv, lda, e, iwork, work,
505 $ UPLO, N, N, -1, -1, -1, IMAT,
506 $ NFAIL, NERRS, NOUT )
511 CALL CPOT03( UPLO, N, A, LDA, AINV, LDA, WORK, LDA,
512 $ RWORK, RCONDC, RESULT( 2 ) )
520.GE.
IF( RESULT( K )THRESH ) THEN
521.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
522 $ CALL ALAHD( NOUT, PATH )
523 WRITE( NOUT, FMT = 9999 )UPLO, N, NB, IMAT, K,
536 CONST = ( ( ALPHA**2-ONE ) / ( ALPHA**2-ONEHALF ) ) /
539.EQ.
IF( IUPLO1 ) THEN
548.GT.
IF( IWORK( K )ZERO ) THEN
553 STEMP = CLANGE( 'm
', K-1, 1,
554 $ AFAC( ( K-1 )*LDA+1 ), LDA, RWORK )
560 STEMP = CLANGE( 'm
', K-2, 2,
561 $ AFAC( ( K-2 )*LDA+1 ), LDA, RWORK )
568 STEMP = STEMP - CONST + THRESH
569.GT.
IF( STEMPRESULT( 3 ) )
570 $ RESULT( 3 ) = STEMP
586.GT.
IF( IWORK( K )ZERO ) THEN
591 STEMP = CLANGE( 'm
', N-K, 1,
592 $ AFAC( ( K-1 )*LDA+K+1 ), LDA, RWORK )
598 STEMP = CLANGE( 'm
', N-K-1, 2,
599 $ AFAC( ( K-1 )*LDA+K+2 ), LDA, RWORK )
606 STEMP = STEMP - CONST + THRESH
607.GT.
IF( STEMPRESULT( 3 ) )
608 $ RESULT( 3 ) = STEMP
624 CONST = ( ( ALPHA**2-ONE ) / ( ALPHA**2-ONEHALF ) )*
625 $ ( ( ONE + ALPHA ) / ( ONE - ALPHA ) )
626 CALL CLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
628.EQ.
IF( IUPLO1 ) THEN
637.LT.
IF( IWORK( K )ZERO ) THEN
643 BLOCK( 1, 1 ) = AFAC( ( K-2 )*LDA+K-1 )
644 BLOCK( 1, 2 ) = E( K )
645 BLOCK( 2, 1 ) = CONJG( BLOCK( 1, 2 ) )
646 BLOCK( 2, 2 ) = AFAC( (K-1)*LDA+K )
648 CALL CGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
649 $ CDUMMY, 1, CDUMMY, 1,
650 $ WORK, 6, RWORK( 3 ), INFO )
653 SING_MAX = RWORK( 1 )
654 SING_MIN = RWORK( 2 )
656 STEMP = SING_MAX / SING_MIN
660 STEMP = STEMP - CONST + THRESH
661.GT.
IF( STEMPRESULT( 4 ) )
662 $ RESULT( 4 ) = STEMP
681.LT.
IF( IWORK( K )ZERO ) THEN
687 BLOCK( 1, 1 ) = AFAC( ( K-1 )*LDA+K )
688 BLOCK( 2, 1 ) = E( K )
689 BLOCK( 1, 2 ) = CONJG( BLOCK( 2, 1 ) )
690 BLOCK( 2, 2 ) = AFAC( K*LDA+K+1 )
692 CALL CGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
693 $ CDUMMY, 1, CDUMMY, 1,
694 $ WORK, 6, RWORK(3), INFO )
696 SING_MAX = RWORK( 1 )
697 SING_MIN = RWORK( 2 )
699 STEMP = SING_MAX / SING_MIN
703 STEMP = STEMP - CONST + THRESH
704.GT.
IF( STEMPRESULT( 4 ) )
705 $ RESULT( 4 ) = STEMP
720.GE.
IF( RESULT( K )THRESH ) THEN
721.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
722 $ CALL ALAHD( NOUT, PATH )
723 WRITE( NOUT, FMT = 9999 )UPLO, N, NB, IMAT, K,
758 CALL CLARHS( MATPATH, XTYPE, UPLO, ' ', N, N,
759 $ KL, KU, NRHS, A, LDA, XACT, LDA,
760 $ B, LDA, ISEED, INFO )
761 CALL CLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
764 CALL CHETRS_3( UPLO, N, NRHS, AFAC, LDA, E, IWORK,
770 $ CALL ALAERH( PATH, 'chetrs_3', INFO, 0,
771 $ UPLO, N, N, -1, -1, NRHS, IMAT,
772 $ NFAIL, NERRS, NOUT )
774 CALL CLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
778 CALL CPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
779 $ LDA, RWORK, RESULT( 5 ) )
784 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
791.GE.
IF( RESULT( K )THRESH ) THEN
792.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
793 $ CALL ALAHD( NOUT, PATH )
794 WRITE( NOUT, FMT = 9998 )UPLO, N, NRHS,
795 $ IMAT, K, RESULT( K )
809 ANORM = CLANHE( '1
', UPLO, N, A, LDA, RWORK )
811 CALL CHECON_3( UPLO, N, AFAC, LDA, E, IWORK, ANORM,
812 $ RCOND, WORK, INFO )
817 $ CALL ALAERH( PATH, 'checon_3', INFO, 0,
818 $ UPLO, N, N, -1, -1, -1, IMAT,
819 $ NFAIL, NERRS, NOUT )
823 RESULT( 7 ) = SGET06( RCOND, RCONDC )
828.GE.
IF( RESULT( 7 )THRESH ) THEN
829.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
830 $ CALL ALAHD( NOUT, PATH )
831 WRITE( NOUT, FMT = 9997 )UPLO, N, IMAT, 7,
844 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
846 9999 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ', nb =
', I4, ',
type ',
847 $ I2, ', test
', I2, ', ratio =
', G12.5 )
848 9998 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ', nrhs=
', I3, ',
type ',
849 $ I2, ', test
', I2, ', ratio =
', G12.5 )
850 9997 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ',
', 10X, ' type ', I2,
851 $ ', test
', I2, ', ratio =
', G12.5 )
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alasum(type, nout, nfail, nrun, nerrs)
ALASUM
subroutine alahd(iounit, path)
ALAHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine cgesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, rwork, info)
CGESVD computes the singular value decomposition (SVD) for GE matrices
subroutine checon_3(uplo, n, a, lda, e, ipiv, anorm, rcond, work, info)
CHECON_3
subroutine chetrs_3(uplo, n, nrhs, a, lda, e, ipiv, b, ldb, info)
CHETRS_3
subroutine chetri_3(uplo, n, a, lda, e, ipiv, work, lwork, info)
CHETRI_3
subroutine chetrf_rk(uplo, n, a, lda, e, ipiv, work, lwork, info)
CHETRF_RK computes the factorization of a complex Hermitian indefinite matrix using the bounded Bunch...
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine chet01_3(uplo, n, a, lda, afac, ldafac, e, ipiv, c, ldc, rwork, resid)
CHET01_3
subroutine cerrhe(path, nunit)
CERRHE
subroutine cpot03(uplo, n, a, lda, ainv, ldainv, work, ldwork, rwork, rcond, resid)
CPOT03
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 cchkhe_rk(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, afac, e, ainv, b, x, xact, work, rwork, iwork, nout)
CCHKHE_RK
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