169 $ THRESH, TSTERR, NMAX, A, AFAC, AINV, B, X,
170 $ XACT, WORK, RWORK, IWORK, NOUT )
178 INTEGER NMAX, NN, NNB, NNS, NOUT
183 INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
184 REAL A( * ), AFAC( * ), AINV( * ), B( * ),
185 $ rwork( * ), work( * ), x( * ), xact( * )
192 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0 )
194 parameter( eight = 8.0d+0, sevten = 17.0d+0 )
196 parameter( ntypes = 10 )
198 parameter( ntests = 7 )
201 LOGICAL TRFCON, ZEROT
202 CHARACTER DIST,
TYPE, UPLO, XTYPE
203 CHARACTER*3 PATH, MATPATH
204 INTEGER I, I1, I2, IMAT, IN, INB, INFO, IOFF, IRHS,
205 $ iuplo, izero, j, k, kl, ku, lda, lwork, mode,
206 $ n, nb, nerrs, nfail, nimat, nrhs, nrun, nt
207 REAL ALPHA, ANORM, CNDNUM, CONST, SING_MAX,
208 $ SING_MIN, RCOND, RCONDC, STEMP
212 INTEGER ISEED( 4 ), ISEEDY( 4 )
213 REAL BLOCK( 2, 2 ), ( NTESTS ), SDUMMY( 1 )
216 REAL SGET06, SLANGE, SLANSY
217 EXTERNAL SGET06, SLANGE, SLANSY
234 COMMON / infoc / infot, nunit, ok, lerr
235 COMMON / srnamc / srnamt
238 DATA iseedy / 1988, 1989, 1990, 1991 /
239 DATA uplos / 'u
', 'l
' /
245 ALPHA = ( ONE+SQRT( SEVTEN ) ) / EIGHT
249 PATH( 1: 1 ) = 'single precision
'
254 MATPATH( 1: 1 ) = 'single precision
'
255 MATPATH( 2: 3 ) = 'sy
'
261 ISEED( I ) = ISEEDY( I )
267 $ CALL SERRSY( PATH, NOUT )
289 DO 260 IMAT = 1, NIMAT
293.NOT.
IF( DOTYPE( IMAT ) )
298.GE..AND..LE.
ZEROT = IMAT3 IMAT6
299.AND..LT.
IF( ZEROT NIMAT-2 )
305 UPLO = UPLOS( IUPLO )
312 CALL SLATB4( MATPATH, IMAT, N, N, TYPE, KL, KU, ANORM,
313 $ MODE, CNDNUM, DIST )
318 CALL SLATMS( N, N, DIST, ISEED, TYPE, RWORK, MODE,
319 $ CNDNUM, ANORM, KL, KU, UPLO, A, LDA, WORK,
325 CALL ALAERH( PATH, 'slatms', INFO, 0, UPLO, N, N, -1,
326 $ -1, -1, IMAT, NFAIL, NERRS, NOUT )
340.EQ.
ELSE IF( IMAT4 ) THEN
350.EQ.
IF( IUPLO1 ) THEN
351 IOFF = ( IZERO-1 )*LDA
352 DO 20 I = 1, IZERO - 1
362 DO 40 I = 1, IZERO - 1
372.EQ.
IF( IUPLO1 ) THEN
419 CALL SLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
426 LWORK = MAX( 2, NB )*LDA
428 CALL SSYTRF_ROOK( UPLO, N, AFAC, LDA, IWORK, AINV,
437.LT.
IF( IWORK( K )0 ) THEN
438.NE.
IF( IWORK( K )-K ) THEN
442.NE.
ELSE IF( IWORK( K )K ) THEN
452 $ UPLO, N, N, -1, -1, NB, IMAT,
453 $ NFAIL, NERRS, NOUT )
466 CALL SSYT01_ROOK( UPLO, N, A, LDA, AFAC, LDA, IWORK,
467 $ AINV, LDA, RWORK, RESULT( 1 ) )
476.EQ..AND..NOT.
IF( INB1 TRFCON ) THEN
477 CALL SLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
479 CALL SSYTRI_ROOK( UPLO, N, AINV, LDA, IWORK, WORK,
486 $ UPLO, N, N, -1, -1, -1, IMAT,
487 $ NFAIL, NERRS, NOUT )
492 CALL SPOT03( UPLO, N, A, LDA, AINV, LDA, WORK, LDA,
493 $ RWORK, RCONDC, RESULT( 2 ) )
501.GE.
IF( RESULT( K )THRESH ) THEN
502.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
503 $ CALL ALAHD( NOUT, PATH )
504 WRITE( NOUT, FMT = 9999 )UPLO, N, NB, IMAT, K,
517 CONST = ONE / ( ONE-ALPHA )
519.EQ.
IF( IUPLO1 ) THEN
528.GT.
IF( IWORK( K )ZERO ) THEN
533 STEMP = SLANGE( 'm
', K-1, 1,
534 $ AFAC( ( K-1 )*LDA+1 ), LDA, RWORK )
540 STEMP = SLANGE( 'm
', K-2, 2,
541 $ AFAC( ( K-2 )*LDA+1 ), LDA, RWORK )
548 STEMP = STEMP - CONST + THRESH
549.GT.
IF( STEMPRESULT( 3 ) )
550 $ RESULT( 3 ) = STEMP
566.GT.
IF( IWORK( K )ZERO ) THEN
571 STEMP = SLANGE( 'm
', N-K, 1,
572 $ AFAC( ( K-1 )*LDA+K+1 ), LDA, RWORK )
578 STEMP = SLANGE( 'm
', N-K-1, 2,
579 $ AFAC( ( K-1 )*LDA+K+2 ), LDA, RWORK )
586 STEMP = STEMP - CONST + THRESH
587.GT.
IF( STEMPRESULT( 3 ) )
588 $ RESULT( 3 ) = STEMP
604 CONST = ( ONE+ALPHA ) / ( ONE-ALPHA )
605 CALL SLACPY( UPLO, N, N, AFAC, LDA, AINV, LDA )
607.EQ.
IF( IUPLO1 ) THEN
616.LT.
IF( IWORK( K )ZERO ) THEN
622 BLOCK( 1, 1 ) = AFAC( ( K-2 )*LDA+K-1 )
623 BLOCK( 1, 2 ) = AFAC( (K-1)*LDA+K-1 )
624 BLOCK( 2, 1 ) = BLOCK( 1, 2 )
625 BLOCK( 2, 2 ) = AFAC( (K-1)*LDA+K )
627 CALL SGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
628 $ SDUMMY, 1, SDUMMY, 1,
632 SING_MAX = RWORK( 1 )
633 SING_MIN = RWORK( 2 )
635 STEMP = SING_MAX / SING_MIN
639 STEMP = STEMP - CONST + THRESH
640.GT.
IF( STEMPRESULT( 4 ) )
641 $ RESULT( 4 ) = STEMP
660.LT.
IF( IWORK( K )ZERO ) THEN
666 BLOCK( 1, 1 ) = AFAC( ( K-1 )*LDA+K )
667 BLOCK( 2, 1 ) = AFAC( ( K-1 )*LDA+K+1 )
668 BLOCK( 1, 2 ) = BLOCK( 2, 1 )
669 BLOCK( 2, 2 ) = AFAC( K*LDA+K+1 )
671 CALL SGESVD( 'n
', 'n
', 2, 2, BLOCK, 2, RWORK,
672 $ SDUMMY, 1, SDUMMY, 1,
676 SING_MAX = RWORK( 1 )
677 SING_MIN = RWORK( 2 )
679 STEMP = SING_MAX / SING_MIN
683 STEMP = STEMP - CONST + THRESH
684.GT.
IF( STEMPRESULT( 4 ) )
685 $ RESULT( 4 ) = STEMP
700.GE.
IF( RESULT( K )THRESH ) THEN
701.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
702 $ CALL ALAHD( NOUT, PATH )
703 WRITE( NOUT, FMT = 9999 )UPLO, N, NB, IMAT, K,
735 CALL SLARHS( MATPATH, XTYPE, UPLO, ' ', N, N,
736 $ KL, KU, NRHS, A, LDA, XACT, LDA,
737 $ B, LDA, ISEED, INFO )
738 CALL SLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
741 CALL SSYTRS_ROOK( UPLO, N, NRHS, AFAC, LDA, IWORK,
748 $ UPLO, N, N, -1, -1, NRHS, IMAT,
749 $ NFAIL, NERRS, NOUT )
751 CALL SLACPY( 'full
', N, NRHS, B, LDA, WORK, LDA )
755 CALL SPOT02( UPLO, N, NRHS, A, LDA, X, LDA, WORK,
756 $ LDA, RWORK, RESULT( 5 ) )
761 CALL SGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
768.GE.
IF( RESULT( K )THRESH ) THEN
769.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
770 $ CALL ALAHD( NOUT, PATH )
771 WRITE( NOUT, FMT = 9998 )UPLO, N, NRHS,
772 $ IMAT, K, RESULT( K )
786 ANORM = SLANSY( '1
', UPLO, N, A, LDA, RWORK )
788 CALL SSYCON_ROOK( UPLO, N, AFAC, LDA, IWORK, ANORM,
789 $ RCOND, WORK, IWORK( N+1 ), INFO )
795 $ UPLO, N, N, -1, -1, -1, IMAT,
796 $ NFAIL, NERRS, NOUT )
800 RESULT( 7 ) = SGET06( RCOND, RCONDC )
805.GE.
IF( RESULT( 7 )THRESH ) THEN
806.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
807 $ CALL ALAHD( NOUT, PATH )
808 WRITE( NOUT, FMT = 9997 )UPLO, N, IMAT, 7,
821 CALL ALASUM( PATH, NOUT, NFAIL, NRUN, NERRS )
823 9999 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ', nb =
', I4, ',
type ',
824 $ I2, ', test
', I2, ', ratio =
', G12.5 )
825 9998 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ', nrhs=
', I3, ',
type ',
826 $ I2, ', test(
', I2, ') =
', G12.5 )
827 9997 FORMAT( ' uplo =
''', A1, ''', n =
', I5, ',
', 10X, ' type ', I2,
828 $ ', test(
', I2, ') =
', G12.5 )
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY 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 sgesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, info)
SGESVD computes the singular value decomposition (SVD) for GE matrices
subroutine ssycon_rook(uplo, n, a, lda, ipiv, anorm, rcond, work, iwork, info)
SSYCON_ROOK
subroutine ssytrf_rook(uplo, n, a, lda, ipiv, work, lwork, info)
SSYTRF_ROOK
subroutine ssytrs_rook(uplo, n, nrhs, a, lda, ipiv, b, ldb, info)
SSYTRS_ROOK
subroutine ssytri_rook(uplo, n, a, lda, ipiv, work, info)
SSYTRI_ROOK
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS
subroutine spot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
SPOT02
subroutine ssyt01_rook(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
SSYT01_ROOK
subroutine serrsy(path, nunit)
SERRSY
subroutine schksy_rook(dotype, nn, nval, nnb, nbval, nns, nsval, thresh, tsterr, nmax, a, afac, ainv, b, x, xact, work, rwork, iwork, nout)
SCHKSY_ROOK
subroutine spot03(uplo, n, a, lda, ainv, ldainv, work, ldwork, rwork, rcond, resid)
SPOT03
subroutine sget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
SGET04
subroutine slatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
SLATB4