173 SUBROUTINE dchksy_rk( DOTYPE, NN, NVAL, NNB, NBVAL, NNS, NSVAL,
174 $ THRESH, TSTERR, NMAX, A, AFAC, E, AINV, B,
175 $ X, XACT, WORK, RWORK, IWORK, NOUT )
183 INTEGER NMAX, NN, NNB, NNS, NOUT
184 DOUBLE PRECISION THRESH
188 INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
189 DOUBLE PRECISION A( * ), AFAC( * ), AINV( * ), B( * ), E( * ),
190 $ rwork( * ), work( * ), x( * ), xact( * )
196 DOUBLE PRECISION ZERO, ONE
197 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0 )
198 DOUBLE PRECISION EIGHT, SEVTEN
199 parameter( eight = 8.0d+0, sevten = 17.0d+0 )
201 parameter( ntypes = 10 )
203 parameter( ntests = 7 )
206 LOGICAL TRFCON, ZEROT
207 CHARACTER DIST,
TYPE, UPLO, XTYPE
208 CHARACTER*3 PATH, MATPATH
209 INTEGER I, I1, I2, IMAT, IN, INB, , IOFF, IRHS,
210 $ itemp, iuplo, izero, j, k, kl, ku, lda, lwork,
211 $ mode, n, nb, nerrs, nfail, nimat, nrhs, nrun,
213 DOUBLE PRECISION ALPHA, ANORM, CNDNUM, CONST, DTEMP, SING_MAX,
214 $ SING_MIN, RCOND, RCONDC
218 INTEGER IDUMMY( 1 ), ISEED( 4 ), ISEEDY( 4 )
219 DOUBLE PRECISION BLOCK( 2, 2 ), DDUMMY( 1 ), RESULT( NTESTS )
222 DOUBLE PRECISION DGET06, DLANGE, DLANSY
223 EXTERNAL DGET06, DLANGE, DLANSY
240 COMMON / infoc / infot, nunit, ok, lerr
241 COMMON / srnamc / srnamt
244 DATA iseedy / 1988, 1989, 1990, 1991 /
245 DATA uplos /
'U',
'L' /
251 alpha = ( one+sqrt( sevten ) ) / eight
255 path( 1: 1 ) =
'Double precision'
260 matpath( 1: 1 ) =
'Double precision'
261 matpath( 2: 3 ) =
'SY'
267 iseed( i ) = iseedy( i )
273 $
CALL derrsy( path, nout )
295 DO 260 imat = 1, nimat
299 IF( .NOT.dotype( imat ) )
304 zerot = imat.GE.3 .AND. imat.LE.6
305 IF( zerot .AND. n.LT.imat-2 )
311 uplo = uplos( iuplo )
318 CALL dlatb4( matpath, imat, n, n,
TYPE, kl, ku, anorm,
319 $ mode, cndnum, dist )
324 CALL dlatms( n, n, dist, iseed,
TYPE, rwork, mode,
325 $ cndnum, anorm, kl, ku, uplo, a, lda, work,
332 $ -1, -1, IMAT, NFAIL, NERRS, NOUT )
346.EQ.
ELSE IF( IMAT4 ) THEN
356.EQ.
IF( IUPLO1 ) THEN
357 IOFF = ( IZERO-1 )*LDA
358 DO 20 I = 1, IZERO - 1
368 DO 40 I = 1, IZERO - 1
378.EQ.
IF( IUPLO1 ) THEN
425 CALL DLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
432 LWORK = MAX( 2, NB )*LDA
434 CALL DSYTRF_RK( UPLO, N, AFAC, LDA, E, IWORK, AINV,
443.LT.
IF( IWORK( K )0 ) THEN
444.NE.
IF( IWORK( K )-K ) THEN
448.NE.
ELSE IF( IWORK( K )K ) THEN
457 $ CALL ALAERH( PATH, 'dsytrf_rk', INFO, K,
458 $ UPLO, N, N, -1, -1, NB, IMAT,
459 $ NFAIL, NERRS, NOUT )
472 CALL DSYT01_3( UPLO, N, A, LDA, AFAC, LDA, E, IWORK,
473 $ AINV, LDA, RWORK, RESULT( 1 ) )
482.EQ..AND..NOT.
IF( INB1 TRFCON ) THEN
483 CALL DLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
490 LWORK = (N+NB+1)*(NB+3)
491 CALL DSYTRI_3( UPLO, N, AINV, LDA, E, IWORK, WORK,
497 $ CALL ALAERH( PATH, 'dsytri_3', INFO, -1,
498 $ UPLO, N, N, -1, -1, -1, IMAT,
499 $ NFAIL, NERRS, NOUT )
504 CALL DPOT03( UPLO, N, A, LDA, AINV, LDA, WORK, LDA,
505 $ RWORK, RCONDC, RESULT( 2 ) )
513.GE.
IF( RESULT( K )THRESH ) THEN
514.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
515 $ CALL ALAHD( NOUT, PATH )
516 WRITE( NOUT, FMT = 9999 )UPLO, N, NB, IMAT, K,
529 CONST = ONE / ( ONE-ALPHA )
531.EQ.
IF( IUPLO1 ) THEN
540.GT.
IF( IWORK( K )ZERO ) THEN
545 DTEMP = DLANGE( 'm
', K-1, 1,
546 $ AFAC( ( K-1 )*LDA+1 ), LDA, RWORK )
552 DTEMP = DLANGE( 'm
', K-2, 2,
553 $ AFAC( ( K-2 )*LDA+1 ), LDA, RWORK )
560 DTEMP = DTEMP - CONST + THRESH
561.GT.
IF( DTEMPRESULT( 3 ) )
562 $ RESULT( 3 ) = DTEMP
578.GT.
IF( IWORK( K )ZERO ) THEN
583 DTEMP = DLANGE( 'm
', N-K, 1,
584 $ AFAC( ( K-1 )*LDA+K+1 ), LDA, RWORK )
590 DTEMP = DLANGE( 'm
', N-K-1, 2,
591 $ AFAC( ( K-1 )*LDA+K+2 ), LDA, RWORK )
598 DTEMP = DTEMP - CONST + THRESH
599.GT.
IF( DTEMPRESULT( 3 ) )
600 $ RESULT( 3 ) = DTEMP
615 CONST = ( ONE+ALPHA ) / ( ONE-ALPHA )
616 CALL DLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
618.EQ.
IF( IUPLO1 ) THEN
627.LT.
IF( IWORK( K )ZERO ) THEN
633 BLOCK( 1, 1 ) = AFAC( ( K-2 )*LDA+K-1 )
634 BLOCK( 1, 2 ) = E( K )
635 BLOCK( 2, 1 ) = BLOCK( 1, 2 )
636 BLOCK( 2, 2 ) = AFAC( (K-1)*LDA+K )
638 CALL DGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
639 $ DDUMMY, 1, DDUMMY, 1,
642 SING_MAX = RWORK( 1 )
643 SING_MIN = RWORK( 2 )
645 DTEMP = SING_MAX / SING_MIN
649 DTEMP = DTEMP - CONST + THRESH
650.GT.
IF( DTEMPRESULT( 4 ) )
651 $ RESULT( 4 ) = DTEMP
670.LT.
IF( IWORK( K )ZERO ) THEN
676 BLOCK( 1, 1 ) = AFAC( ( K-1 )*LDA+K )
677 BLOCK( 2, 1 ) = E( K )
678 BLOCK( 1, 2 ) = BLOCK( 2, 1 )
679 BLOCK( 2, 2 ) = AFAC( K*LDA+K+1 )
681 CALL DGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
682 $ DDUMMY, 1, DDUMMY, 1,
686 SING_MAX = RWORK( 1 )
687 SING_MIN = RWORK( 2 )
689 DTEMP = SING_MAX / SING_MIN
693 DTEMP = DTEMP - CONST + THRESH
694.GT.
IF( DTEMPRESULT( 4 ) )
695 $ RESULT( 4 ) = DTEMP
710.GE.
IF( RESULT( K )THRESH ) THEN
711.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
712 $ CALL ALAHD( NOUT, PATH )
713 WRITE( NOUT, FMT = 9999 )UPLO, N, NB, IMAT, K,
745 CALL DLARHS( MATPATH, XTYPE, UPLO, ' ', N, N,
746 $ KL, KU, NRHS, A, LDA, XACT, LDA,
747 $ B, LDA, ISEED, INFO )
748 CALL DLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
751 CALL DSYTRS_3( UPLO, N, NRHS, AFAC, LDA, E, IWORK,
757 $ CALL ALAERH( PATH, 'dsytrs_3', INFO, 0,
758 $ UPLO, N, N, -1, -1, NRHS, IMAT,
759 $ NFAIL, NERRS, NOUT )
761 CALL DLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
765 CALL DPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
766 $ LDA, RWORK, RESULT( 5 ) )
771 CALL DGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
778.GE.
IF( RESULT( K )THRESH ) THEN
779.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
780 $ CALL ALAHD( NOUT, PATH )
781 WRITE( NOUT, FMT = 9998 )UPLO, N, NRHS,
782 $ IMAT, K, RESULT( K )
796 ANORM = DLANSY( '1
', UPLO, N, A, LDA, RWORK )
798 CALL DSYCON_3( UPLO, N, AFAC, LDA, E, IWORK, ANORM,
799 $ RCOND, WORK, IWORK( N+1 ), INFO )
804 $ CALL ALAERH( PATH, 'dsycon_3', INFO, 0,
805 $ UPLO, N, N, -1, -1, -1, IMAT,
806 $ NFAIL, NERRS, NOUT )
810 RESULT( 7 ) = DGET06( RCOND, RCONDC )
815.GE.
IF( RESULT( 7 )THRESH ) THEN
816.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
817 $ CALL ALAHD( NOUT, PATH )
818 WRITE( NOUT, FMT = 9997 ) UPLO, N, IMAT, 7,
831 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
833 9999 FORMAT( ' uplo =
''', A1, ''', n =', i5,
', NB =', i4,
', type ',
834 $ i2,
', test ', i2,
', ratio =', g12.5 )
835 9998
FORMAT(
' UPLO = ''', a1,
''', N =', i5,
', NRHS=', i3,
', type ',
836 $ i2,
', test(', i2,
') =', g12.5 )
837 9997
FORMAT(
' UPLO = ''', a1,
''', N =', i5,
',', 10x,
' type ', i2,
838 $
', test(', i2,
') =', g12.5 )
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
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 dgesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, info)
DGESVD computes the singular value decomposition (SVD) for GE matrices
subroutine dsycon_3(uplo, n, a, lda, e, ipiv, anorm, rcond, work, iwork, info)
DSYCON_3
subroutine dsytrf_rk(uplo, n, a, lda, e, ipiv, work, lwork, info)
DSYTRF_RK computes the factorization of a real symmetric indefinite matrix using the bounded Bunch-Ka...
subroutine dsytrs_3(uplo, n, nrhs, a, lda, e, ipiv, b, ldb, info)
DSYTRS_3
subroutine dsytri_3(uplo, n, a, lda, e, ipiv, work, lwork, info)
DSYTRI_3
subroutine dlarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
DLARHS
subroutine derrsy(path, nunit)
DERRSY
subroutine dlatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
DLATB4
subroutine dpot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
DPOT02
subroutine dpot03(uplo, n, a, lda, ainv, ldainv, work, ldwork, rwork, rcond, resid)
DPOT03
subroutine dsyt01_3(uplo, n, a, lda, afac, ldafac, e, ipiv, c, ldc, rwork, resid)
DSYT01_3
subroutine dget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
DGET04
subroutine dchksy_rk(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, afac, e, ainv, b, x, xact, work, rwork, iwork, nout)
DCHKSY_RK
subroutine dlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
DLATMS