170 $ THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
171 $ XACT, WORK, RWORK, IWORK, NOUT )
179 INTEGER NMAX, NN, NNB, NNS, NOUT
180 DOUBLE PRECISION THRESH
184 INTEGER ( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
185 DOUBLE PRECISION RWORK( * )
186 COMPLEX*16 A( * ), AFAC( * ), AINV( * ), B( * ),
187 $ work( * ), x( * ), xact( * )
193 DOUBLE PRECISION ZERO, ONE
194 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0 )
195 DOUBLE PRECISION ONEHALF
196 parameter( onehalf = 0.5d+0 )
197 DOUBLE PRECISION EIGHT, SEVTEN
198 parameter( eight = 8.0d+0, sevten = 17.0d+0 )
200 parameter( czero = ( 0.0d+0, 0.0d+0 ) )
202 parameter( ntypes = 11 )
204 parameter( ntests = 7 )
207 LOGICAL TRFCON, ZEROT
208 CHARACTER DIST,
TYPE, UPLO, XTYPE
209 CHARACTER*3 PATH, MATPATH
210 INTEGER I, I1, I2, IMAT, IN, INB, INFO, IOFF, IRHS,
211 $ iuplo, izero, j, k, kl, ku, lda, lwork, mode,
212 $ n, nb, nerrs, nfail, nimat, nrhs, nrun, nt
213 DOUBLE PRECISION ALPHA, ANORM, CNDNUM, CONST, DTEMP, SING_MAX,
214 $ SING_MIN, RCOND, RCONDC
218 INTEGER ISEED( 4 ), ISEEDY( 4 )
219 DOUBLE PRECISION RESULT( NTESTS )
220 COMPLEX*16 BLOCK( 2, 2 ), ZDUMMY( 1 )
223 DOUBLE PRECISION DGET06, ZLANGE, ZLANSY
224 EXTERNAL DGET06, ZLANGE, ZLANSY
241 COMMON / infoc / infot, nunit, ok, lerr
242 COMMON / srnamc / srnamt
245 DATA iseedy / 1988, 1989, 1990, 1991 /
246 DATA uplos /
'U',
'L' /
252 alpha = ( one+sqrt( sevten ) ) / eight
256 path( 1: 1 ) =
'Zomplex precision'
261 matpath( 1: 1 ) =
'Zomplex precision'
262 matpath( 2: 3 ) =
'SY'
268 iseed( i ) = iseedy( i )
274 $
CALL zerrsy( path, nout )
296 DO 260 imat = 1, nimat
300 IF( .NOT.dotype( imat ) )
305 zerot = imat.GE.3 .AND. imat.LE.6
306 IF( zerot .AND. n.LT.imat-2 )
312 uplo = uplos( iuplo )
316 IF( imat.NE.ntypes )
THEN
321 CALL zlatb4( matpath, imat, n, n,
TYPE, kl, ku, anorm,
322 $ mode, cndnum, dist )
327 CALL zlatms( n, n, dist, iseed,
TYPE, rwork, mode,
328 $ cndnum, anorm, kl, ku, uplo, a, lda,
335 $ -1, -1, -1, IMAT, NFAIL, NERRS, NOUT )
349.EQ.
ELSE IF( IMAT4 ) THEN
359.EQ.
IF( IUPLO1 ) THEN
360 IOFF = ( IZERO-1 )*LDA
361 DO 20 I = 1, IZERO - 1
371 DO 40 I = 1, IZERO - 1
381.EQ.
IF( IUPLO1 ) THEN
417 CALL ZLATSY( UPLO, N, A, LDA, ISEED )
438 CALL ZLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
445 LWORK = MAX( 2, NB )*LDA
447 CALL ZSYTRF_ROOK( UPLO, N, AFAC, LDA, IWORK, AINV,
456.LT.
IF( IWORK( K )0 ) THEN
457.NE.
IF( IWORK( K )-K ) THEN
461.NE.
ELSE IF( IWORK( K )K ) THEN
471 $ UPLO, N, N, -1, -1, NB, IMAT,
472 $ NFAIL, NERRS, NOUT )
485 CALL ZSYT01_ROOK( UPLO, N, A, LDA, AFAC, LDA, IWORK,
486 $ AINV, LDA, RWORK, RESULT( 1 ) )
495.EQ..AND..NOT.
IF( INB1 TRFCON ) THEN
496 CALL ZLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
498 CALL ZSYTRI_ROOK( UPLO, N, AINV, LDA, IWORK, WORK,
505 $ UPLO, N, N, -1, -1, -1, IMAT,
506 $ NFAIL, NERRS, NOUT )
511 CALL ZSYT03( 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 DTEMP = ZLANGE( 'm
', K-1, 1,
554 $ AFAC( ( K-1 )*LDA+1 ), LDA, RWORK )
560 DTEMP = ZLANGE( 'm
', K-2, 2,
561 $ AFAC( ( K-2 )*LDA+1 ), LDA, RWORK )
568 DTEMP = DTEMP - CONST + THRESH
569.GT.
IF( DTEMPRESULT( 3 ) )
570 $ RESULT( 3 ) = DTEMP
586.GT.
IF( IWORK( K )ZERO ) THEN
591 DTEMP = ZLANGE( 'm
', N-K, 1,
592 $ AFAC( ( K-1 )*LDA+K+1 ), LDA, RWORK )
598 DTEMP = ZLANGE( 'm
', N-K-1, 2,
599 $ AFAC( ( K-1 )*LDA+K+2 ), LDA, RWORK )
606 DTEMP = DTEMP - CONST + THRESH
607.GT.
IF( DTEMPRESULT( 3 ) )
608 $ RESULT( 3 ) = DTEMP
624 CONST = ( ( ALPHA**2-ONE ) / ( ALPHA**2-ONEHALF ) )*
625 $ ( ( ONE + ALPHA ) / ( ONE - ALPHA ) )
627.EQ.
IF( IUPLO1 ) THEN
636.LT.
IF( IWORK( K )ZERO ) THEN
642 BLOCK( 1, 1 ) = AFAC( ( K-2 )*LDA+K-1 )
643 BLOCK( 1, 2 ) = AFAC( (K-1)*LDA+K-1 )
644 BLOCK( 2, 1 ) = BLOCK( 1, 2 )
645 BLOCK( 2, 2 ) = AFAC( (K-1)*LDA+K )
647 CALL ZGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
648 $ ZDUMMY, 1, ZDUMMY, 1,
649 $ WORK, 6, RWORK( 3 ), INFO )
652 SING_MAX = RWORK( 1 )
653 SING_MIN = RWORK( 2 )
655 DTEMP = SING_MAX / SING_MIN
659 DTEMP = DTEMP - CONST + THRESH
660.GT.
IF( DTEMPRESULT( 4 ) )
661 $ RESULT( 4 ) = DTEMP
680.LT.
IF( IWORK( K )ZERO ) THEN
686 BLOCK( 1, 1 ) = AFAC( ( K-1 )*LDA+K )
687 BLOCK( 2, 1 ) = AFAC( ( K-1 )*LDA+K+1 )
688 BLOCK( 1, 2 ) = BLOCK( 2, 1 )
689 BLOCK( 2, 2 ) = AFAC( K*LDA+K+1 )
691 CALL ZGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
692 $ ZDUMMY, 1, ZDUMMY, 1,
693 $ WORK, 6, RWORK(3), INFO )
695 SING_MAX = RWORK( 1 )
696 SING_MIN = RWORK( 2 )
698 DTEMP = SING_MAX / SING_MIN
702 DTEMP = DTEMP - CONST + THRESH
703.GT.
IF( DTEMPRESULT( 4 ) )
704 $ RESULT( 4 ) = DTEMP
719.GE.
IF( RESULT( K )THRESH ) THEN
720.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
721 $ CALL ALAHD( NOUT, PATH )
722 WRITE( NOUT, FMT = 9999 )UPLO, N, NB, IMAT, K,
754 CALL ZLARHS( MATPATH, XTYPE, UPLO, ' ', N, N,
755 $ KL, KU, NRHS, A, LDA, XACT, LDA,
756 $ B, LDA, ISEED, INFO )
757 CALL ZLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
760 CALL ZSYTRS_ROOK( UPLO, N, NRHS, AFAC, LDA, IWORK,
767 $ UPLO, N, N, -1, -1, NRHS, IMAT,
768 $ NFAIL, NERRS, NOUT )
770 CALL ZLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
774 CALL ZSYT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
775 $ LDA, RWORK, RESULT( 5 ) )
780 CALL ZGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
787.GE.
IF( RESULT( K )THRESH ) THEN
788.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
789 $ CALL ALAHD( NOUT, PATH )
790 WRITE( NOUT, FMT = 9998 )UPLO, N, NRHS,
791 $ IMAT, K, RESULT( K )
805 ANORM = ZLANSY( '1
', UPLO, N, A, LDA, RWORK )
807 CALL ZSYCON_ROOK( UPLO, N, AFAC, LDA, IWORK, ANORM,
808 $ RCOND, WORK, INFO )
814 $ UPLO, N, N, -1, -1, -1, IMAT,
815 $ NFAIL, NERRS, NOUT )
819 RESULT( 7 ) = DGET06( RCOND, RCONDC )
824.GE.
IF( RESULT( 7 )THRESH ) THEN
825.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
826 $ CALL ALAHD( NOUT, PATH )
827 WRITE( NOUT, FMT = 9997 )UPLO, N, IMAT, 7,
840 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
842 9999 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ', nb =
', I4, ',
type ',
843 $ I2, ', test
', I2, ', ratio =
', G12.5 )
844 9998 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ', nrhs=
', I3, ',
type ',
845 $ I2, ', test(
', I2, ') =
', G12.5 )
846 9997 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ',
', 10X, ' type ', I2,
847 $ ', test(
', I2, ') =
', 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 zgesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, rwork, info)
ZGESVD computes the singular value decomposition (SVD) for GE matrices
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zsytrf_rook(uplo, n, a, lda, ipiv, work, lwork, info)
ZSYTRF_ROOK
subroutine zsytri_rook(uplo, n, a, lda, ipiv, work, info)
ZSYTRI_ROOK
subroutine zsytrs_rook(uplo, n, nrhs, a, lda, ipiv, b, ldb, info)
ZSYTRS_ROOK
subroutine zsycon_rook(uplo, n, a, lda, ipiv, anorm, rcond, work, info)
ZSYCON_ROOK
subroutine zlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
ZLARHS
subroutine zget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
ZGET04
subroutine zsyt01_rook(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
ZSYT01_ROOK
subroutine zsyt03(uplo, n, a, lda, ainv, ldainv, work, ldwork, rwork, rcond, resid)
ZSYT03
subroutine zlatsy(uplo, n, x, ldx, iseed)
ZLATSY
subroutine zerrsy(path, nunit)
ZERRSY
subroutine zchksy_rook(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
ZCHKSY_ROOK
subroutine zsyt02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
ZSYT02
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