608 SUBROUTINE schkst2stg( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
609 $ NOUNIT, A, LDA, AP, SD, SE, D1, D2, D3, D4, D5,
610 $ WA1, WA2, WA3, WR, U, LDU, V, VP, TAU, Z, WORK,
611 $ LWORK, IWORK, LIWORK, RESULT, INFO )
618 INTEGER INFO, LDA, LDU, LIWORK, LWORK, NOUNIT, NSIZES,
624 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
625 REAL A( LDA, * ), AP( * ), D1( * ), D2( * ),
626 $ d3( * ), d4( * ), d5( * ), result( * ),
627 $ sd( * ), se( * ), tau( * ), u( ldu, * ),
628 $ v( ldu, * ), vp( * ), wa1( * ), wa2( * ),
629 $ wa3( * ), work( * ), wr( * ), z( ldu, * )
635 REAL ZERO, ONE, TWO, EIGHT, TEN, HUN
636 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
637 $ eight = 8.0e0, ten = 10.0e0, hun = 100.0e0 )
639 parameter( half = one / two )
641 parameter( maxtyp = 21 )
643 parameter( srange = .false. )
645 parameter( srel = .false. )
648 LOGICAL BADNN, TRYRAC
649 INTEGER I, IINFO, IL, IMODE, ITEMP, ITYPE, IU, J, JC,
650 $ JR, JSIZE, JTYPE, LGN, LIWEDC, LOG2UI, LWEDC,
651 $ m, m2, m3, mtypes, n, nap, nblock, nerrs,
652 $ nmats, nmax, nsplit, ntest, ntestt, lh, lw
653 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
654 $ RTUNFL, TEMP1, TEMP2, TEMP3, TEMP4, ULP,
655 $ ULPINV, UNFL, VL, VU
658 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
659 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
665 REAL SLAMCH, SLARND, SSXT1
666 EXTERNAL ILAENV, SLAMCH, SLARND, SSXT1
676 INTRINSIC abs, real, int, log, max, min, sqrt
679 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
680 $ 8, 8, 9, 9, 9, 9, 9, 10 /
681 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
682 $ 2, 3, 1, 1, 1, 2, 3, 1 /
683 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
684 $ 0, 0, 4, 3, 1, 4, 4, 3 /
702 nmax = max( nmax, nn( j ) )
707 nblock = ilaenv( 1,
'SSYTRD',
'L', nmax, -1, -1, -1 )
708 nblock = min( nmax, max( 1, nblock ) )
712 IF( nsizes.LT.0 )
THEN
714 ELSE IF( badnn )
THEN
716 ELSE IF( ntypes.LT.0 )
THEN
718 ELSE IF( lda.LT.nmax )
THEN
720 ELSE IF( ldu.LT.nmax )
THEN
722 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN
727 CALL xerbla(
'SCHKST2STG', -info )
733 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
738 unfl = slamch(
'Safe minimum' )
740 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
742 log2ui = int( log( ulpinv ) / log( two ) )
743 rtunfl = sqrt( unfl )
744 rtovfl = sqrt( ovfl )
749 iseed2( i ) = iseed( i )
754 DO 310 jsize = 1, nsizes
757 lgn = int( log( real( n ) ) / log( two ) )
762 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
763 liwedc = 6 + 6*n + 5*n*lgn
768 nap = ( n*( n+1 ) ) / 2
769 aninv = one / real( max( 1, n ) )
771 IF( nsizes.NE.1 )
THEN
772 mtypes = min( maxtyp, ntypes )
774 mtypes = min( maxtyp+1, ntypes )
777 DO 300 jtype = 1, mtypes
778 IF( .NOT.dotype( jtype ) )
784 ioldsd( j ) = iseed( j )
803 IF( mtypes.GT.maxtyp )
806 itype = ktype( jtype )
807 imode = kmode( jtype )
811 GO TO ( 40, 50, 60 )kmagn( jtype )
818 anorm = ( rtovfl*ulp )*aninv
822 anorm = rtunfl*n*ulpinv
827 CALL slaset(
'Full', lda, n, zero, zero, a, lda )
829 IF( jtype.LE.15 )
THEN
832 cond = ulpinv*aninv / ten
839 IF( itype.EQ.1 )
THEN
842 ELSE IF( itype.EQ.2 )
THEN
850 ELSE IF( itype.EQ.4 )
THEN
854 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
855 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
859 ELSE IF( itype.EQ.5 )
THEN
863 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
864 $ anorm, n, n,
'N', a, lda, work( n+1 ),
867 ELSE IF( itype.EQ.7 )
THEN
871 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
872 $
'T',
'N', work( n+1 ), 1, one,
873 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
874 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
876 ELSE IF( itype.EQ.8 )
THEN
880 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
881 $
'T',
'N', work( n+1 ), 1, one,
882 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
883 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
885 ELSE IF( itype.EQ.9 )
THEN
889 CALL slatms( n, n,
'S', iseed,
'P', work, imode, cond,
890 $ anorm, n, n,
'N', a, lda, work( n+1 ),
893 ELSE IF( itype.EQ.10 )
THEN
897 CALL slatms( n, n,
'S', iseed,
'P', work, imode, cond,
898 $ anorm, 1, 1,
'N', a, lda, work( n+1 ),
901 temp1 = abs( a( i-1, i ) ) /
902 $ sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
903 IF( temp1.GT.half )
THEN
904 a( i-1, i ) = half*sqrt( abs( a( i-1, i-1 )*a( i,
906 a( i, i-1 ) = a( i-1, i )
915 IF( iinfo.NE.0 )
THEN
916 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
927 CALL slacpy(
'U', n, n, a, lda, v, ldu )
930 CALL ssytrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
933 IF( iinfo.NE.0 )
THEN
934 WRITE( nounit, fmt = 9999 )
'SSYTRD(U)', iinfo, n, jtype,
937 IF( iinfo.LT.0 )
THEN
945 CALL slacpy(
'U', n, n, v, ldu, u, ldu )
948 CALL sorgtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
949 IF( iinfo.NE.0 )
THEN
950 WRITE( nounit, fmt = 9999 )
'SORGTR(U)', iinfo, n, jtype,
953 IF( iinfo.LT.0 )
THEN
963 CALL ssyt21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
964 $ ldu, tau, work, result( 1 ) )
965 CALL ssyt21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
966 $ ldu, tau, work, result( 2 ) )
975 CALL scopy( n, sd, 1, d1, 1 )
977 $
CALL scopy( n-1, se, 1, work, 1 )
979 CALL ssteqr(
'N', n, d1, work, work( n+1 ), ldu,
980 $ work( n+1 ), iinfo )
981 IF( iinfo.NE.0 )
THEN
982 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
985 IF( iinfo.LT.0 )
THEN
998 CALL slaset(
'Full', n, 1, zero, zero, sd, n )
999 CALL slaset(
'Full', n, 1, zero, zero, se, n )
1000 CALL slacpy(
"U", n, n, a, lda, v, ldu )
1004 $ work, lh, work( lh+1 ), lw, iinfo )
1008 CALL scopy( n, sd, 1, d2, 1 )
1010 $
CALL scopy( n-1, se, 1, work, 1 )
1012 CALL ssteqr(
'N', n, d2, work, work( n+1 ), ldu,
1013 $ work( n+1 ), iinfo )
1014 IF( iinfo.NE.0 )
THEN
1015 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1018 IF( iinfo.LT.0 )
THEN
1021 result( 3 ) = ulpinv
1031 CALL slaset(
'Full', n, 1, zero, zero, sd, n )
1032 CALL slaset(
'Full', n, 1, zero, zero, se, n )
1033 CALL slacpy(
"L", n, n, a, lda, v, ldu )
1035 $ work, lh, work( lh+1 ), lw, iinfo )
1039 CALL scopy( n, sd, 1, d3, 1 )
1041 $
CALL scopy( n-1, se, 1, work, 1 )
1043 CALL ssteqr(
'N', n, d3, work, work( n+1 ), ldu,
1044 $ work( n+1 ), iinfo )
1045 IF( iinfo.NE.0 )
THEN
1046 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1049 IF( iinfo.LT.0 )
THEN
1052 result( 4 ) = ulpinv
1067 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1068 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1069 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1070 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1073 result( 3 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1074 result( 4 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1082 ap( i ) = a( jr, jc )
1088 CALL scopy( nap, ap, 1, vp, 1 )
1091 CALL ssptrd(
'U', n, vp, sd, se, tau, iinfo )
1093 IF( iinfo.NE.0 )
THEN
1094 WRITE( nounit, fmt = 9999 )
'SSPTRD(U)', iinfo, n, jtype,
1097 IF( iinfo.LT.0 )
THEN
1100 result( 5 ) = ulpinv
1106 CALL sopgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1107 IF( iinfo.NE.0 )
THEN
1108 WRITE( nounit, fmt = 9999 )
'SOPGTR(U)', iinfo, n, jtype,
1111 IF( iinfo.LT.0 )
THEN
1114 result( 6 ) = ulpinv
1121 CALL sspt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1122 $ work, result( 5 ) )
1123 CALL sspt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1124 $ work, result( 6 ) )
1132 ap( i ) = a( jr, jc )
1138 CALL scopy( nap, ap, 1, vp, 1 )
1141 CALL ssptrd(
'L', n, vp, sd, se, tau, iinfo )
1143 IF( iinfo.NE.0 )
THEN
1144 WRITE( nounit, fmt = 9999 )
'SSPTRD(L)', iinfo, n, jtype,
1147 IF( iinfo.LT.0 )
THEN
1150 result( 7 ) = ulpinv
1156 CALL sopgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1157 IF( iinfo.NE.0 )
THEN
1158 WRITE( nounit, fmt = 9999 )
'SOPGTR(L)', iinfo, n, jtype,
1161 IF( iinfo.LT.0 )
THEN
1164 result( 8 ) = ulpinv
1169 CALL sspt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1170 $ work, result( 7 ) )
1171 CALL sspt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1172 $ work, result( 8 ) )
1178 CALL scopy( n, sd, 1, d1, 1 )
1180 $
CALL scopy( n-1, se, 1, work, 1 )
1181 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1184 CALL ssteqr(
'V', n, d1, work, z, ldu, work( n+1 ), iinfo )
1185 IF( iinfo.NE.0 )
THEN
1186 WRITE( nounit, fmt = 9999 )
'SSTEQR(V)', iinfo, n, jtype,
1189 IF( iinfo.LT.0 )
THEN
1192 result( 9 ) = ulpinv
1199 CALL scopy( n, sd, 1, d2, 1 )
1201 $
CALL scopy( n-1, se, 1, work, 1 )
1204 CALL ssteqr(
'N', n, d2, work, work( n+1 ), ldu,
1205 $ work( n+1 ), iinfo )
1206 IF( iinfo.NE.0 )
THEN
1207 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1210 IF( iinfo.LT.0 )
THEN
1213 result( 11 ) = ulpinv
1220 CALL scopy( n, sd, 1, d3, 1 )
1222 $
CALL scopy( n-1, se, 1, work, 1 )
1225 CALL ssterf( n, d3, work, iinfo )
1226 IF( iinfo.NE.0 )
THEN
1227 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1230 IF( iinfo.LT.0 )
THEN
1233 result( 12 ) = ulpinv
1240 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1251 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1252 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1253 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1254 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1257 result( 11 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1258 result( 12 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1264 temp1 = thresh*( half-ulp )
1266 DO 160 j = 0, log2ui
1267 CALL sstech( n, sd, se, d1, temp1, work, iinfo )
1274 result( 13 ) = temp1
1279 IF( jtype.GT.15 )
THEN
1283 CALL scopy( n, sd, 1, d4, 1 )
1285 $
CALL scopy( n-1, se, 1, work, 1 )
1286 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1289 CALL spteqr(
'V', n, d4, work, z, ldu, work( n+1 ),
1291 IF( iinfo.NE.0 )
THEN
1292 WRITE( nounit, fmt = 9999 )
'SPTEQR(V)', iinfo, n,
1295 IF( iinfo.LT.0 )
THEN
1298 result( 14 ) = ulpinv
1305 CALL sstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1310 CALL scopy( n, sd, 1, d5, 1 )
1312 $
CALL scopy( n-1, se, 1, work, 1 )
1315 CALL spteqr(
'N', n, d5, work, z, ldu, work( n+1 ),
1317 IF( iinfo.NE.0 )
THEN
1318 WRITE( nounit, fmt = 9999 )
'SPTEQR(N)', iinfo, n,
1321 IF( iinfo.LT.0 )
THEN
1324 result( 16 ) = ulpinv
1334 temp1 = max( temp1, abs( d4( j ) ), abs( d5( j ) ) )
1335 temp2 = max( temp2, abs( d4( j )-d5( j ) ) )
1338 result( 16 ) = temp2 / max( unfl,
1339 $ hun*ulp*max( temp1, temp2 ) )
1355 IF( jtype.EQ.21 )
THEN
1357 abstol = unfl + unfl
1358 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1359 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1360 $ work, iwork( 2*n+1 ), iinfo )
1361 IF( iinfo.NE.0 )
THEN
1362 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1365 IF( iinfo.LT.0 )
THEN
1368 result( 17 ) = ulpinv
1375 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1380 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1381 $ ( abstol+abs( d4( j ) ) ) )
1384 result( 17 ) = temp1 / temp2
1392 abstol = unfl + unfl
1393 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1394 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1395 $ iwork( 2*n+1 ), iinfo )
1396 IF( iinfo.NE.0 )
THEN
1397 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1400 IF( iinfo.LT.0 )
THEN
1403 result( 18 ) = ulpinv
1413 temp1 = max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1414 temp2 = max( temp2, abs( d3( j )-wa1( j ) ) )
1417 result( 18 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1427 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1428 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1436 CALL sstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1437 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1438 $ work, iwork( 2*n+1 ), iinfo )
1439 IF( iinfo.NE.0 )
THEN
1440 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1443 IF( iinfo.LT.0 )
THEN
1446 result( 19 ) = ulpinv
1456 vl = wa1( il ) - max( half*( wa1( il )-wa1( il-1 ) ),
1457 $ ulp*anorm, two*rtunfl )
1459 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1460 $ ulp*anorm, two*rtunfl )
1463 vu = wa1( iu ) + max( half*( wa1( iu+1 )-wa1( iu ) ),
1464 $ ulp*anorm, two*rtunfl )
1466 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1467 $ ulp*anorm, two*rtunfl )
1474 CALL sstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1475 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1476 $ work, iwork( 2*n+1 ), iinfo )
1477 IF( iinfo.NE.0 )
THEN
1478 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1481 IF( iinfo.LT.0 )
THEN
1484 result( 19 ) = ulpinv
1489 IF( m3.EQ.0 .AND. n.NE.0 )
THEN
1490 result( 19 ) = ulpinv
1496 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1497 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1499 temp3 = max( abs( wa1( n ) ), abs( wa1( 1 ) ) )
1504 result( 19 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1511 CALL sstebz(
'A',
'B', n, vl, vu, il, iu, abstol, sd, se, m,
1512 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1513 $ iwork( 2*n+1 ), iinfo )
1514 IF( iinfo.NE.0 )
THEN
1515 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1518 IF( iinfo.LT.0 )
THEN
1521 result( 20 ) = ulpinv
1522 result( 21 ) = ulpinv
1527 CALL sstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1528 $ ldu, work, iwork( 2*n+1 ), iwork( 3*n+1 ),
1530 IF( iinfo.NE.0 )
THEN
1531 WRITE( nounit, fmt = 9999 )
'SSTEIN', iinfo, n, jtype,
1534 IF( iinfo.LT.0 )
THEN
1537 result( 20 ) = ulpinv
1538 result( 21 ) = ulpinv
1545 CALL sstt21( n, 0, sd, se, wa1, dumma, z, ldu, work,
1552 CALL scopy( n, sd, 1, d1, 1 )
1554 $
CALL scopy( n-1, se, 1, work, 1 )
1555 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1558 CALL sstedc(
'I', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1559 $ iwork, liwedc, iinfo )
1560 IF( iinfo.NE.0 )
THEN
1561 WRITE( nounit, fmt = 9999 )
'SSTEDC(I)', iinfo, n, jtype,
1564 IF( iinfo.LT.0 )
THEN
1567 result( 22 ) = ulpinv
1574 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1581 CALL scopy( n, sd, 1, d1, 1 )
1583 $
CALL scopy( n-1, se, 1, work, 1 )
1584 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1587 CALL sstedc(
'V', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1588 $ iwork, liwedc, iinfo )
1589 IF( iinfo.NE.0 )
THEN
1590 WRITE( nounit, fmt = 9999 )
'SSTEDC(V)', iinfo, n, jtype,
1593 IF( iinfo.LT.0 )
THEN
1596 result( 24 ) = ulpinv
1603 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1610 CALL scopy( n, sd, 1, d2, 1 )
1612 $
CALL scopy( n-1, se, 1, work, 1 )
1613 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1616 CALL sstedc(
'N', n, d2, work, z, ldu, work( n+1 ), lwedc-n,
1617 $ iwork, liwedc, iinfo )
1618 IF( iinfo.NE.0 )
THEN
1619 WRITE( nounit, fmt = 9999 )
'SSTEDC(N)', iinfo, n, jtype,
1622 IF( iinfo.LT.0 )
THEN
1625 result( 26 ) = ulpinv
1636 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1637 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1640 result( 26 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1644 IF( ilaenv( 10,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1645 $ ilaenv( 11,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1656 IF( jtype.EQ.21 .AND. srel )
THEN
1658 abstol = unfl + unfl
1659 CALL sstemr(
'V',
'A', n, sd, se, vl, vu, il, iu,
1660 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1661 $ work, lwork, iwork( 2*n+1 ), lwork-2*n,
1663 IF( iinfo.NE.0 )
THEN
1664 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A,rel)',
1665 $ iinfo, n, jtype, ioldsd
1667 IF( iinfo.LT.0 )
THEN
1670 result( 27 ) = ulpinv
1677 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1682 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1683 $ ( abstol+abs( d4( j ) ) ) )
1686 result( 27 ) = temp1 / temp2
1688 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1689 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1698 abstol = unfl + unfl
1699 CALL sstemr(
'V',
'I', n, sd, se, vl, vu, il, iu,
1700 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1701 $ work, lwork, iwork( 2*n+1 ),
1702 $ lwork-2*n, iinfo )
1704 IF( iinfo.NE.0 )
THEN
1705 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I,rel)',
1706 $ iinfo, n, jtype, ioldsd
1708 IF( iinfo.LT.0 )
THEN
1711 result( 28 ) = ulpinv
1718 temp2 = two*( two*n-one )*ulp*
1719 $ ( one+eight*half**2 ) / ( one-half )**4
1723 temp1 = max( temp1, abs( wr( j-il+1 )-d4( n-j+
1724 $ 1 ) ) / ( abstol+abs( wr( j-il+1 ) ) ) )
1727 result( 28 ) = temp1 / temp2
1740 CALL scopy( n, sd, 1, d5, 1 )
1742 $
CALL scopy( n-1, se, 1, work, 1 )
1743 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1747 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1748 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1754 CALL sstemr(
'V',
'I', n, d5, work, vl, vu, il, iu,
1755 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1756 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1757 $ liwork-2*n, iinfo )
1758 IF( iinfo.NE.0 )
THEN
1759 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I)', iinfo,
1762 IF( iinfo.LT.0 )
THEN
1765 result( 29 ) = ulpinv
1772 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1779 CALL scopy( n, sd, 1, d5, 1 )
1781 $
CALL scopy( n-1, se, 1, work, 1 )
1784 CALL sstemr(
'N',
'I', n, d5, work, vl, vu, il, iu,
1785 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1786 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1787 $ liwork-2*n, iinfo )
1788 IF( iinfo.NE.0 )
THEN
1789 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,I)', iinfo,
1792 IF( iinfo.LT.0 )
THEN
1795 result( 31 ) = ulpinv
1805 DO 240 j = 1, iu - il + 1
1806 temp1 = max( temp1, abs( d1( j ) ),
1808 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1811 result( 31 ) = temp2 / max( unfl,
1812 $ ulp*max( temp1, temp2 ) )
1818 CALL scopy( n, sd, 1, d5, 1 )
1820 $
CALL scopy( n-1, se, 1, work, 1 )
1821 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1827 vl = d2( il ) - max( half*
1828 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1831 vl = d2( 1 ) - max( half*( d2( n )-d2( 1 ) ),
1832 $ ulp*anorm, two*rtunfl )
1835 vu = d2( iu ) + max( half*
1836 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1839 vu = d2( n ) + max( half*( d2( n )-d2( 1 ) ),
1840 $ ulp*anorm, two*rtunfl )
1847 CALL sstemr(
'V',
'V', n, d5, work, vl, vu, il, iu,
1848 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1849 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1850 $ liwork-2*n, iinfo )
1851 IF( iinfo.NE.0 )
THEN
1852 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,V)', iinfo,
1855 IF( iinfo.LT.0 )
THEN
1858 result( 32 ) = ulpinv
1865 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1872 CALL scopy( n, sd, 1, d5, 1 )
1874 $
CALL scopy( n-1, se, 1, work, 1 )
1877 CALL sstemr(
'N',
'V', n, d5, work, vl, vu, il, iu,
1878 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1879 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1880 $ liwork-2*n, iinfo )
1881 IF( iinfo.NE.0 )
THEN
1882 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,V)', iinfo,
1885 IF( iinfo.LT.0 )
THEN
1888 result( 34 ) = ulpinv
1898 DO 250 j = 1, iu - il + 1
1899 temp1 = max( temp1, abs( d1( j ) ),
1901 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1904 result( 34 ) = temp2 / max( unfl,
1905 $ ulp*max( temp1, temp2 ) )
1919 CALL scopy( n, sd, 1, d5, 1 )
1921 $
CALL scopy( n-1, se, 1, work, 1 )
1925 CALL sstemr(
'V',
'A', n, d5, work, vl, vu, il, iu,
1926 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1927 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1928 $ liwork-2*n, iinfo )
1929 IF( iinfo.NE.0 )
THEN
1930 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A)', iinfo, n,
1933 IF( iinfo.LT.0 )
THEN
1936 result( 35 ) = ulpinv
1943 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1950 CALL scopy( n, sd, 1, d5, 1 )
1952 $
CALL scopy( n-1, se, 1, work, 1 )
1955 CALL sstemr(
'N',
'A', n, d5, work, vl, vu, il, iu,
1956 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1957 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1958 $ liwork-2*n, iinfo )
1959 IF( iinfo.NE.0 )
THEN
1960 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,A)', iinfo, n,
1963 IF( iinfo.LT.0 )
THEN
1966 result( 37 ) = ulpinv
1977 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1978 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1981 result( 37 ) = temp2 / max( unfl,
1982 $ ulp*max( temp1, temp2 ) )
1986 ntestt = ntestt + ntest
1992 DO 290 jr = 1, ntest
1993 IF( result( jr ).GE.thresh )
THEN
1998 IF( nerrs.EQ.0 )
THEN
1999 WRITE( nounit, fmt = 9998 )
'SST'
2000 WRITE( nounit, fmt = 9997 )
2001 WRITE( nounit, fmt = 9996 )
2002 WRITE( nounit, fmt = 9995 )
'Symmetric'
2003 WRITE( nounit, fmt = 9994 )
2007 WRITE( nounit, fmt = 9988 )
2010 WRITE( nounit, fmt = 9990 )n, ioldsd, jtype, jr,
2019 CALL slasum(
'SST', nounit, nerrs, ntestt )
2022 9999
FORMAT(
' SCHKST2STG: ', a,
' returned INFO=', i6,
'.', / 9x,
2023 $
'N=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2025 9998
FORMAT( / 1x, a3,
' -- Real Symmetric eigenvalue problem' )
2026 9997
FORMAT(
' Matrix types (see SCHKST2STG for details): ' )
2028 9996
FORMAT( /
' Special Matrices:',
2029 $ /
' 1=Zero matrix. ',
2030 $
' 5=Diagonal: clustered entries.',
2031 $ /
' 2=Identity matrix. ',
2032 $
' 6=Diagonal: large, evenly spaced.',
2033 $ /
' 3=Diagonal: evenly spaced entries. ',
2034 $
' 7=Diagonal: small, evenly spaced.',
2035 $ /
' 4=Diagonal: geometr. spaced entries.' )
2036 9995
FORMAT(
' Dense ', a,
' Matrices:',
2037 $ /
' 8=Evenly spaced eigenvals. ',
2038 $
' 12=Small, evenly spaced eigenvals.',
2039 $ /
' 9=Geometrically spaced eigenvals. ',
2040 $
' 13=Matrix with random O(1) entries.',
2041 $ /
' 10=Clustered eigenvalues. ',
2042 $
' 14=Matrix with large random entries.',
2043 $ /
' 11=Large, evenly spaced eigenvals. ',
2044 $
' 15=Matrix with small random entries.' )
2045 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
2046 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
2047 $ /
' 18=Positive definite, clustered eigenvalues',
2048 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
2049 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
2050 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
2051 $
' spaced eigenvalues' )
2053 9990
FORMAT(
' N=', i5,
', seed=', 4( i4,
',' ),
' type ', i2,
2054 $
', test(', i2,
')=', g10.3 )
2056 9988
FORMAT( /
'Test performed: see SCHKST2STG for details.', / )
subroutine xerbla(srname, info)
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine ssytrd_2stage(vect, uplo, n, a, lda, d, e, tau, hous2, lhous2, work, lwork, info)
SSYTRD_2STAGE
subroutine ssytrd(uplo, n, a, lda, d, e, tau, work, lwork, info)
SSYTRD
subroutine ssptrd(uplo, n, ap, d, e, tau, info)
SSPTRD
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine spteqr(compz, n, d, e, z, ldz, work, info)
SPTEQR
subroutine sstebz(range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
SSTEBZ
subroutine sstedc(compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
SSTEDC
subroutine sstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
SSTEIN
subroutine sstemr(jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
SSTEMR
subroutine ssteqr(compz, n, d, e, z, ldz, work, info)
SSTEQR
subroutine ssterf(n, d, e, info)
SSTERF
subroutine sorgtr(uplo, n, a, lda, tau, work, lwork, info)
SORGTR
subroutine sopgtr(uplo, n, ap, tau, q, ldq, work, info)
SOPGTR
subroutine schkst2stg(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, ap, sd, se, d1, d2, d3, d4, d5, wa1, wa2, wa3, wr, u, ldu, v, vp, tau, z, work, lwork, iwork, liwork, result, info)
SCHKST2STG
subroutine slasum(type, iounit, ie, nrun)
SLASUM
subroutine slatmr(m, n, dist, iseed, sym, d, mode, cond, dmax, rsign, grade, dl, model, condl, dr, moder, condr, pivtng, ipivot, kl, ku, sparse, anorm, pack, a, lda, iwork, info)
SLATMR
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine sspt21(itype, uplo, n, kband, ap, d, e, u, ldu, vp, tau, work, result)
SSPT21
subroutine sstech(n, a, b, eig, tol, work, info)
SSTECH
subroutine sstt21(n, kband, ad, ae, sd, se, u, ldu, work, result)
SSTT21
subroutine sstt22(n, m, kband, ad, ae, sd, se, u, ldu, work, ldwork, result)
SSTT22
subroutine ssyt21(itype, uplo, n, kband, a, lda, d, e, u, ldu, v, ldv, tau, work, result)
SSYT21