587 SUBROUTINE schkst( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
588 $ NOUNIT, A, LDA, AP, SD, SE, D1, D2, D3, D4, D5,
589 $ WA1, WA2, WA3, WR, U, LDU, V, VP, TAU, Z, WORK,
590 $ LWORK, IWORK, LIWORK, RESULT, INFO )
597 INTEGER INFO, LDA, LDU, LIWORK, LWORK, NOUNIT, NSIZES,
603 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
604 REAL A( LDA, * ), AP( * ), D1( * ), D2( * ),
605 $ d3( * ), d4( * ), d5( * ), result( * ),
606 $ sd( * ), se( * ), tau( * ), u( ldu, * ),
607 $ v( ldu, * ), vp( * ), wa1( * ), wa2( * ),
608 $ wa3( * ), work( * ), wr( * ), z( ldu, * )
614 REAL ZERO, ONE, TWO, EIGHT, TEN, HUN
615 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
616 $ eight = 8.0e0, ten = 10.0e0, hun = 100.0e0 )
618 parameter( half = one / two )
620 parameter( maxtyp = 21 )
622 parameter( srange = .false. )
624 parameter( srel = .false. )
627 LOGICAL BADNN, TRYRAC
628 INTEGER I, IINFO, IL, IMODE, ITEMP, ITYPE, IU, J, JC,
629 $ JR, JSIZE, JTYPE, LGN, LIWEDC, LOG2UI, LWEDC,
630 $ m, m2, m3, mtypes, n, nap, nblock, nerrs,
631 $ nmats, nmax, nsplit, ntest, ntestt
632 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
633 $ RTUNFL, TEMP1, TEMP2, TEMP3, TEMP4, ULP,
634 $ ULPINV, UNFL, VL, VU
637 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
638 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
644 REAL SLAMCH, SLARND, SSXT1
645 EXTERNAL ILAENV, SLAMCH, SLARND, SSXT1
654 INTRINSIC abs, int, log, max, min, real, sqrt
657 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
658 $ 8, 8, 9, 9, 9, 9, 9, 10 /
659 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
660 $ 2, 3, 1, 1, 1, 2, 3, 1 /
661 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
662 $ 0, 0, 4, 3, 1, 4, 4, 3 /
680 nmax = max( nmax, nn( j ) )
685 nblock = ilaenv( 1,
'SSYTRD',
'L', nmax, -1, -1, -1 )
686 nblock = min( nmax, max( 1, nblock ) )
690 IF( nsizes.LT.0 )
THEN
692 ELSE IF( badnn )
THEN
694 ELSE IF( ntypes.LT.0 )
THEN
696 ELSE IF( lda.LT.nmax )
THEN
698 ELSE IF( ldu.LT.nmax )
THEN
700 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN
705 CALL xerbla(
'SCHKST', -info )
711 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
716 unfl = slamch(
'Safe minimum' )
718 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
720 log2ui = int( log( ulpinv ) / log( two ) )
721 rtunfl = sqrt( unfl )
722 rtovfl = sqrt( ovfl )
727 iseed2( i ) = iseed( i )
732 DO 310 jsize = 1, nsizes
735 lgn = int( log( real( n ) ) / log( two ) )
740 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
741 liwedc = 6 + 6*n + 5*n*lgn
746 nap = ( n*( n+1 ) ) / 2
747 aninv = one / real( max( 1, n ) )
749 IF( nsizes.NE.1 )
THEN
750 mtypes = min( maxtyp, ntypes )
752 mtypes = min( maxtyp+1, ntypes )
755 DO 300 jtype = 1, mtypes
756 IF( .NOT.dotype( jtype ) )
762 ioldsd( j ) = iseed( j )
781 IF( mtypes.GT.maxtyp )
784 itype = ktype( jtype )
785 imode = kmode( jtype )
789 GO TO ( 40, 50, 60 )kmagn( jtype )
796 anorm = ( rtovfl*ulp )*aninv
800 anorm = rtunfl*n*ulpinv
805 CALL slaset(
'Full', lda, n, zero, zero, a, lda )
807 IF( jtype.LE.15 )
THEN
810 cond = ulpinv*aninv / ten
817 IF( itype.EQ.1 )
THEN
820 ELSE IF( itype.EQ.2 )
THEN
828 ELSE IF( itype.EQ.4 )
THEN
832 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
833 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
837 ELSE IF( itype.EQ.5 )
THEN
841 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
842 $ anorm, n, n,
'N', a, lda, work( n+1 ),
845 ELSE IF( itype.EQ.7 )
THEN
849 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
850 $
'T',
'N', work( n+1 ), 1, one,
851 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
852 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
854 ELSE IF( itype.EQ.8 )
THEN
858 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
859 $
'T',
'N', work( n+1 ), 1, one,
860 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
861 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
863 ELSE IF( itype.EQ.9 )
THEN
867 CALL slatms( n, n,
'S', iseed,
'P', work, imode, cond,
868 $ anorm, n, n,
'N', a, lda, work( n+1 ),
871 ELSE IF( itype.EQ.10 )
THEN
875 CALL slatms( n, n,
'S', iseed,
'P', work, imode, cond,
876 $ anorm, 1, 1,
'N', a, lda, work( n+1 ),
879 temp1 = abs( a( i-1, i ) ) /
880 $ sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
881 IF( temp1.GT.half )
THEN
882 a( i-1, i ) = half*sqrt( abs( a( i-1, i-1 )*a( i,
884 a( i, i-1 ) = a( i-1, i )
893 IF( iinfo.NE.0 )
THEN
894 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
905 CALL slacpy(
'U', n, n, a, lda, v, ldu )
908 CALL ssytrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
911 IF( iinfo.NE.0 )
THEN
912 WRITE( nounit, fmt = 9999 )
'SSYTRD(U)', iinfo, n, jtype,
915 IF( iinfo.LT.0 )
THEN
923 CALL slacpy(
'U', n, n, v, ldu, u, ldu )
926 CALL sorgtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
927 IF( iinfo.NE.0 )
THEN
928 WRITE( nounit, fmt = 9999 )
'SORGTR(U)', iinfo, n, jtype,
931 IF( iinfo.LT.0 )
THEN
941 CALL ssyt21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
942 $ ldu, tau, work, result( 1 ) )
943 CALL ssyt21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
944 $ ldu, tau, work, result( 2 ) )
949 CALL slacpy(
'L', n, n, a, lda, v, ldu )
952 CALL ssytrd(
'L', n, v, ldu, sd, se, tau, work, lwork,
955 IF( iinfo.NE.0 )
THEN
956 WRITE( nounit, fmt = 9999 )
'SSYTRD(L)', iinfo, n, jtype,
959 IF( iinfo.LT.0 )
THEN
967 CALL slacpy(
'L', n, n, v, ldu, u, ldu )
970 CALL sorgtr(
'L', n, u, ldu, tau, work, lwork, iinfo )
971 IF( iinfo.NE.0 )
THEN
972 WRITE( nounit, fmt = 9999 )
'SORGTR(L)', iinfo, n, jtype,
975 IF( iinfo.LT.0 )
THEN
983 CALL ssyt21( 2,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
984 $ ldu, tau, work, result( 3 ) )
985 CALL ssyt21( 3,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
986 $ ldu, tau, work, result( 4 ) )
994 ap( i ) = a( jr, jc )
1000 CALL scopy( nap, ap, 1, vp, 1 )
1003 CALL ssptrd(
'U', n, vp, sd, se, tau, iinfo )
1005 IF( iinfo.NE.0 )
THEN
1006 WRITE( nounit, fmt = 9999 )
'SSPTRD(U)', iinfo, n, jtype,
1009 IF( iinfo.LT.0 )
THEN
1012 result( 5 ) = ulpinv
1018 CALL sopgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1019 IF( iinfo.NE.0 )
THEN
1020 WRITE( nounit, fmt = 9999 )
'SOPGTR(U)', iinfo, n, jtype,
1023 IF( iinfo.LT.0 )
THEN
1026 result( 6 ) = ulpinv
1033 CALL sspt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1034 $ work, result( 5 ) )
1035 CALL sspt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1036 $ work, result( 6 ) )
1044 ap( i ) = a( jr, jc )
1050 CALL scopy( nap, ap, 1, vp, 1 )
1053 CALL ssptrd(
'L', n, vp, sd, se, tau, iinfo )
1055 IF( iinfo.NE.0 )
THEN
1056 WRITE( nounit, fmt = 9999 )
'SSPTRD(L)', iinfo, n, jtype,
1059 IF( iinfo.LT.0 )
THEN
1062 result( 7 ) = ulpinv
1068 CALL sopgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1069 IF( iinfo.NE.0 )
THEN
1070 WRITE( nounit, fmt = 9999 )
'SOPGTR(L)', iinfo, n, jtype,
1073 IF( iinfo.LT.0 )
THEN
1076 result( 8 ) = ulpinv
1081 CALL sspt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1082 $ work, result( 7 ) )
1083 CALL sspt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1084 $ work, result( 8 ) )
1090 CALL scopy( n, sd, 1, d1, 1 )
1092 $
CALL scopy( n-1, se, 1, work, 1 )
1093 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1096 CALL ssteqr(
'V', n, d1, work, z, ldu, work( n+1 ), iinfo )
1097 IF( iinfo.NE.0 )
THEN
1098 WRITE( nounit, fmt = 9999 )
'SSTEQR(V)', iinfo, n, jtype,
1101 IF( iinfo.LT.0 )
THEN
1104 result( 9 ) = ulpinv
1111 CALL scopy( n, sd, 1, d2, 1 )
1113 $
CALL scopy( n-1, se, 1, work, 1 )
1116 CALL ssteqr(
'N', n, d2, work, work( n+1 ), ldu,
1117 $ work( n+1 ), iinfo )
1118 IF( iinfo.NE.0 )
THEN
1119 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1122 IF( iinfo.LT.0 )
THEN
1125 result( 11 ) = ulpinv
1132 CALL scopy( n, sd, 1, d3, 1 )
1134 $
CALL scopy( n-1, se, 1, work, 1 )
1137 CALL ssterf( n, d3, work, iinfo )
1138 IF( iinfo.NE.0 )
THEN
1139 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1142 IF( iinfo.LT.0 )
THEN
1145 result( 12 ) = ulpinv
1152 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1163 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1164 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1165 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1166 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1169 result( 11 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1170 result( 12 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1176 temp1 = thresh*( half-ulp )
1178 DO 160 j = 0, log2ui
1179 CALL sstech( n, sd, se, d1, temp1, work, iinfo )
1186 result( 13 ) = temp1
1191 IF( jtype.GT.15 )
THEN
1195 CALL scopy( n, sd, 1, d4, 1 )
1197 $
CALL scopy( n-1, se, 1, work, 1 )
1198 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1201 CALL spteqr(
'V', n, d4, work, z, ldu, work( n+1 ),
1203 IF( iinfo.NE.0 )
THEN
1204 WRITE( nounit, fmt = 9999 )
'SPTEQR(V)', iinfo, n,
1207 IF( iinfo.LT.0 )
THEN
1210 result( 14 ) = ulpinv
1217 CALL sstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1222 CALL scopy( n, sd, 1, d5, 1 )
1224 $
CALL scopy( n-1, se, 1, work, 1 )
1227 CALL spteqr(
'N', n, d5, work, z, ldu, work( n+1 ),
1229 IF( iinfo.NE.0 )
THEN
1230 WRITE( nounit, fmt = 9999 )
'SPTEQR(N)', iinfo, n,
1233 IF( iinfo.LT.0 )
THEN
1236 result( 16 ) = ulpinv
1246 temp1 = max( temp1, abs( d4( j ) ), abs( d5( j ) ) )
1247 temp2 = max( temp2, abs( d4( j )-d5( j ) ) )
1250 result( 16 ) = temp2 / max( unfl,
1251 $ hun*ulp*max( temp1, temp2 ) )
1267 IF( jtype.EQ.21 )
THEN
1269 abstol = unfl + unfl
1270 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1271 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1272 $ work, iwork( 2*n+1 ), iinfo )
1273 IF( iinfo.NE.0 )
THEN
1274 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1277 IF( iinfo.LT.0 )
THEN
1280 result( 17 ) = ulpinv
1287 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1292 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1293 $ ( abstol+abs( d4( j ) ) ) )
1296 result( 17 ) = temp1 / temp2
1304 abstol = unfl + unfl
1305 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1306 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1307 $ iwork( 2*n+1 ), iinfo )
1308 IF( iinfo.NE.0 )
THEN
1309 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1312 IF( iinfo.LT.0 )
THEN
1315 result( 18 ) = ulpinv
1325 temp1 = max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1326 temp2 = max( temp2, abs( d3( j )-wa1( j ) ) )
1329 result( 18 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1339 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1340 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1348 CALL sstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1349 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1350 $ work, iwork( 2*n+1 ), iinfo )
1351 IF( iinfo.NE.0 )
THEN
1352 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1355 IF( iinfo.LT.0 )
THEN
1358 result( 19 ) = ulpinv
1368 vl = wa1( il ) - max( half*( wa1( il )-wa1( il-1 ) ),
1369 $ ulp*anorm, two*rtunfl )
1371 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1372 $ ulp*anorm, two*rtunfl )
1375 vu = wa1( iu ) + max( half*( wa1( iu+1 )-wa1( iu ) ),
1376 $ ulp*anorm, two*rtunfl )
1378 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1379 $ ulp*anorm, two*rtunfl )
1386 CALL sstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1387 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1388 $ work, iwork( 2*n+1 ), iinfo )
1389 IF( iinfo.NE.0 )
THEN
1390 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1393 IF( iinfo.LT.0 )
THEN
1396 result( 19 ) = ulpinv
1401 IF( m3.EQ.0 .AND. n.NE.0 )
THEN
1402 result( 19 ) = ulpinv
1408 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1409 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1411 temp3 = max( abs( wa1( n ) ), abs( wa1( 1 ) ) )
1416 result( 19 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1423 CALL sstebz(
'A',
'B', n, vl, vu, il, iu, abstol, sd, se, m,
1424 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1425 $ iwork( 2*n+1 ), iinfo )
1426 IF( iinfo.NE.0 )
THEN
1427 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1430 IF( iinfo.LT.0 )
THEN
1433 result( 20 ) = ulpinv
1434 result( 21 ) = ulpinv
1439 CALL sstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1440 $ ldu, work, iwork( 2*n+1 ), iwork( 3*n+1 ),
1442 IF( iinfo.NE.0 )
THEN
1443 WRITE( nounit, fmt = 9999 )
'SSTEIN', iinfo, n, jtype,
1446 IF( iinfo.LT.0 )
THEN
1449 result( 20 ) = ulpinv
1450 result( 21 ) = ulpinv
1457 CALL sstt21( n, 0, sd, se, wa1, dumma, z, ldu, work,
1464 CALL scopy( n, sd, 1, d1, 1 )
1466 $
CALL scopy( n-1, se, 1, work, 1 )
1467 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1470 CALL sstedc(
'I', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1471 $ iwork, liwedc, iinfo )
1472 IF( iinfo.NE.0 )
THEN
1473 WRITE( nounit, fmt = 9999 )
'SSTEDC(I)', iinfo, n, jtype,
1476 IF( iinfo.LT.0 )
THEN
1479 result( 22 ) = ulpinv
1486 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1493 CALL scopy( n, sd, 1, d1, 1 )
1495 $
CALL scopy( n-1, se, 1, work, 1 )
1496 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1499 CALL sstedc(
'V', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1500 $ iwork, liwedc, iinfo )
1501 IF( iinfo.NE.0 )
THEN
1502 WRITE( nounit, fmt = 9999 )
'SSTEDC(V)', iinfo, n, jtype,
1505 IF( iinfo.LT.0 )
THEN
1508 result( 24 ) = ulpinv
1515 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1522 CALL scopy( n, sd, 1, d2, 1 )
1524 $
CALL scopy( n-1, se, 1, work, 1 )
1525 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1528 CALL sstedc(
'N', n, d2, work, z, ldu, work( n+1 ), lwedc-n,
1529 $ iwork, liwedc, iinfo )
1530 IF( iinfo.NE.0 )
THEN
1531 WRITE( nounit, fmt = 9999 )
'SSTEDC(N)', iinfo, n, jtype,
1534 IF( iinfo.LT.0 )
THEN
1537 result( 26 ) = ulpinv
1548 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1549 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1552 result( 26 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1556 IF( ilaenv( 10,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1557 $ ilaenv( 11,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1568 IF( jtype.EQ.21 .AND. srel )
THEN
1570 abstol = unfl + unfl
1571 CALL sstemr(
'V',
'A', n, sd, se, vl, vu, il, iu,
1572 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1573 $ work, lwork, iwork( 2*n+1 ), lwork-2*n,
1575 IF( iinfo.NE.0 )
THEN
1576 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A,rel)',
1577 $ iinfo, n, jtype, ioldsd
1579 IF( iinfo.LT.0 )
THEN
1582 result( 27 ) = ulpinv
1589 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1594 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1595 $ ( abstol+abs( d4( j ) ) ) )
1598 result( 27 ) = temp1 / temp2
1600 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1601 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1610 abstol = unfl + unfl
1611 CALL sstemr(
'V',
'I', n, sd, se, vl, vu, il, iu,
1612 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1613 $ work, lwork, iwork( 2*n+1 ),
1614 $ lwork-2*n, iinfo )
1616 IF( iinfo.NE.0 )
THEN
1617 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I,rel)',
1618 $ iinfo, n, jtype, ioldsd
1620 IF( iinfo.LT.0 )
THEN
1623 result( 28 ) = ulpinv
1631 temp2 = two*( two*n-one )*ulp*
1632 $ ( one+eight*half**2 ) / ( one-half )**4
1636 temp1 = max( temp1, abs( wr( j-il+1 )-d4( n-j+
1637 $ 1 ) ) / ( abstol+abs( wr( j-il+1 ) ) ) )
1640 result( 28 ) = temp1 / temp2
1653 CALL scopy( n, sd, 1, d5, 1 )
1655 $
CALL scopy( n-1, se, 1, work, 1 )
1656 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1660 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1661 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1667 CALL sstemr(
'V',
'I', n, d5, work, vl, vu, il, iu,
1668 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1669 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1670 $ liwork-2*n, iinfo )
1671 IF( iinfo.NE.0 )
THEN
1672 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I)', iinfo,
1675 IF( iinfo.LT.0 )
THEN
1678 result( 29 ) = ulpinv
1685 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1692 CALL scopy( n, sd, 1, d5, 1 )
1694 $
CALL scopy( n-1, se, 1, work, 1 )
1697 CALL sstemr(
'N',
'I', n, d5, work, vl, vu, il, iu,
1698 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1699 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1700 $ liwork-2*n, iinfo )
1701 IF( iinfo.NE.0 )
THEN
1702 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,I)', iinfo,
1705 IF( iinfo.LT.0 )
THEN
1708 result( 31 ) = ulpinv
1718 DO 240 j = 1, iu - il + 1
1719 temp1 = max( temp1, abs( d1( j ) ),
1721 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1724 result( 31 ) = temp2 / max( unfl,
1725 $ ulp*max( temp1, temp2 ) )
1732 CALL scopy( n, sd, 1, d5, 1 )
1734 $
CALL scopy( n-1, se, 1, work, 1 )
1735 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1741 vl = d2( il ) - max( half*
1742 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1745 vl = d2( 1 ) - max( half*( d2( n )-d2( 1 ) ),
1746 $ ulp*anorm, two*rtunfl )
1749 vu = d2( iu ) + max( half*
1750 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1753 vu = d2( n ) + max( half*( d2( n )-d2( 1 ) ),
1754 $ ulp*anorm, two*rtunfl )
1761 CALL sstemr(
'V',
'V', n, d5, work, vl, vu, il, iu,
1762 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1763 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1764 $ liwork-2*n, iinfo )
1765 IF( iinfo.NE.0 )
THEN
1766 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,V)', iinfo,
1769 IF( iinfo.LT.0 )
THEN
1772 result( 32 ) = ulpinv
1779 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1786 CALL scopy( n, sd, 1, d5, 1 )
1788 $
CALL scopy( n-1, se, 1, work, 1 )
1791 CALL sstemr(
'N',
'V', n, d5, work, vl, vu, il, iu,
1792 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1793 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1794 $ liwork-2*n, iinfo )
1795 IF( iinfo.NE.0 )
THEN
1796 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,V)', iinfo,
1799 IF( iinfo.LT.0 )
THEN
1802 result( 34 ) = ulpinv
1812 DO 250 j = 1, iu - il + 1
1813 temp1 = max( temp1, abs( d1( j ) ),
1815 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1818 result( 34 ) = temp2 / max( unfl,
1819 $ ulp*max( temp1, temp2 ) )
1834 CALL scopy( n, sd, 1, d5, 1 )
1836 $
CALL scopy( n-1, se, 1, work, 1 )
1840 CALL sstemr(
'V',
'A', n, d5, work, vl, vu, il, iu,
1841 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1842 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1843 $ liwork-2*n, iinfo )
1844 IF( iinfo.NE.0 )
THEN
1845 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A)', iinfo, n,
1848 IF( iinfo.LT.0 )
THEN
1851 result( 35 ) = ulpinv
1858 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1865 CALL scopy( n, sd, 1, d5, 1 )
1867 $
CALL scopy( n-1, se, 1, work, 1 )
1870 CALL sstemr(
'N',
'A', n, d5, work, vl, vu, il, iu,
1871 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1872 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1873 $ liwork-2*n, iinfo )
1874 IF( iinfo.NE.0 )
THEN
1875 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,A)', iinfo, n,
1878 IF( iinfo.LT.0 )
THEN
1881 result( 37 ) = ulpinv
1892 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1893 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1896 result( 37 ) = temp2 / max( unfl,
1897 $ ulp*max( temp1, temp2 ) )
1901 ntestt = ntestt + ntest
1908 DO 290 jr = 1, ntest
1909 IF( result( jr ).GE.thresh )
THEN
1914 IF( nerrs.EQ.0 )
THEN
1915 WRITE( nounit, fmt = 9998 )
'SST'
1916 WRITE( nounit, fmt = 9997 )
1917 WRITE( nounit, fmt = 9996 )
1918 WRITE( nounit, fmt = 9995 )
'Symmetric'
1919 WRITE( nounit, fmt = 9994 )
1923 WRITE( nounit, fmt = 9988 )
1926 WRITE( nounit, fmt = 9990 )n, ioldsd, jtype, jr,
1935 CALL slasum(
'SST', nounit, nerrs, ntestt )
1938 9999
FORMAT(
' SCHKST: ', a,
' returned INFO=', i6,
'.', / 9x,
'N=',
1939 $ i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
1941 9998
FORMAT( / 1x, a3,
' -- Real Symmetric eigenvalue problem' )
1942 9997
FORMAT(
' Matrix types (see SCHKST for details): ' )
1944 9996
FORMAT( /
' Special Matrices:',
1945 $ /
' 1=Zero matrix. ',
1946 $
' 5=Diagonal: clustered entries.',
1947 $ /
' 2=Identity matrix. ',
1948 $
' 6=Diagonal: large, evenly spaced.',
1949 $ /
' 3=Diagonal: evenly spaced entries. ',
1950 $
' 7=Diagonal: small, evenly spaced.',
1951 $ /
' 4=Diagonal: geometr. spaced entries.' )
1952 9995
FORMAT(
' Dense ', a,
' Matrices:',
1953 $ /
' 8=Evenly spaced eigenvals. ',
1954 $
' 12=Small, evenly spaced eigenvals.',
1955 $ /
' 9=Geometrically spaced eigenvals. ',
1956 $
' 13=Matrix with random O(1) entries.',
1957 $ /
' 10=Clustered eigenvalues. ',
1958 $
' 14=Matrix with large random entries.',
1959 $ /
' 11=Large, evenly spaced eigenvals. ',
1960 $
' 15=Matrix with small random entries.' )
1961 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
1962 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
1963 $ /
' 18=Positive definite, clustered eigenvalues',
1964 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
1965 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
1966 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
1967 $
' spaced eigenvalues' )
1969 9990
FORMAT(
' N=', i5,
', seed=', 4( i4,
',' ),
' type ', i2,
1970 $
', test(', i2,
')=', g10.3 )
1972 9988
FORMAT( /
'Test performed: see SCHKST for details.', / )