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' )
741 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
743 log2ui = int( log( ulpinv ) / log( two ) )
744 rtunfl = sqrt( unfl )
745 rtovfl = sqrt( ovfl )
750 iseed2( i ) = iseed( i )
755 DO 310 jsize = 1, nsizes
758 lgn = int( log( real( n ) ) / log( two ) )
763 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
764 liwedc = 6 + 6*n + 5*n*lgn
769 nap = ( n*( n+1 ) ) / 2
770 aninv = one / real( max( 1, n ) )
772 IF( nsizes.NE.1 )
THEN
773 mtypes = min( maxtyp, ntypes )
775 mtypes = min( maxtyp+1, ntypes )
778 DO 300 jtype = 1, mtypes
779 IF( .NOT.dotype( jtype ) )
785 ioldsd( j ) = iseed( j )
804 IF( mtypes.GT.maxtyp )
807 itype = ktype( jtype )
808 imode = kmode( jtype )
812 GO TO ( 40, 50, 60 )kmagn( jtype )
819 anorm = ( rtovfl*ulp )*aninv
823 anorm = rtunfl*n*ulpinv
828 CALL slaset(
'Full', lda, n, zero, zero, a, lda )
830 IF( jtype.LE.15 )
THEN
833 cond = ulpinv*aninv / ten
840 IF( itype.EQ.1 )
THEN
843 ELSE IF( itype.EQ.2 )
THEN
851 ELSE IF( itype.EQ.4 )
THEN
855 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
856 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
860 ELSE IF( itype.EQ.5 )
THEN
864 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
865 $ anorm, n, n,
'N', a, lda, work( n+1 ),
868 ELSE IF( itype.EQ.7 )
THEN
872 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
873 $
'T',
'N', work( n+1 ), 1, one,
874 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
875 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
877 ELSE IF( itype.EQ.8 )
THEN
881 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
882 $
'T',
'N', work( n+1 ), 1, one,
883 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
884 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
886 ELSE IF( itype.EQ.9 )
THEN
890 CALL slatms( n, n,
'S', iseed,
'P', work, imode, cond,
891 $ anorm, n, n,
'N', a, lda, work( n+1 ),
894 ELSE IF( itype.EQ.10 )
THEN
898 CALL slatms( n, n,
'S', iseed,
'P', work, imode, cond,
899 $ anorm, 1, 1,
'N', a, lda, work( n+1 ),
902 temp1 = abs( a( i-1, i ) ) /
903 $ sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
904 IF( temp1.GT.half )
THEN
905 a( i-1, i ) = half*sqrt( abs( a( i-1, i-1 )*a( i,
907 a( i, i-1 ) = a( i-1, i )
916 IF( iinfo.NE.0 )
THEN
917 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
928 CALL slacpy(
'U', n, n, a, lda, v, ldu )
931 CALL ssytrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
934 IF( iinfo.NE.0 )
THEN
935 WRITE( nounit, fmt = 9999 )
'SSYTRD(U)', iinfo, n, jtype,
938 IF( iinfo.LT.0 )
THEN
946 CALL slacpy(
'U', n, n, v, ldu, u, ldu )
949 CALL sorgtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
950 IF( iinfo.NE.0 )
THEN
951 WRITE( nounit, fmt = 9999 )
'SORGTR(U)', iinfo, n, jtype,
954 IF( iinfo.LT.0 )
THEN
964 CALL ssyt21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
965 $ ldu, tau, work, result( 1 ) )
966 CALL ssyt21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
967 $ ldu, tau, work, result( 2 ) )
976 CALL scopy( n, sd, 1, d1, 1 )
978 $
CALL scopy( n-1, se, 1, work, 1 )
980 CALL ssteqr(
'N', n, d1, work, work( n+1 ), ldu,
981 $ work( n+1 ), iinfo )
982 IF( iinfo.NE.0 )
THEN
983 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
986 IF( iinfo.LT.0 )
THEN
999 CALL slaset(
'Full', n, 1, zero, zero, sd, n )
1000 CALL slaset(
'Full', n, 1, zero, zero, se, n )
1001 CALL slacpy(
"U", n, n, a, lda, v, ldu )
1005 $ work, lh, work( lh+1 ), lw, iinfo )
1009 CALL scopy( n, sd, 1, d2, 1 )
1011 $
CALL scopy( n-1, se, 1, work, 1 )
1013 CALL ssteqr(
'N', n, d2, work, work( n+1 ), ldu,
1014 $ work( n+1 ), iinfo )
1015 IF( iinfo.NE.0 )
THEN
1016 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1019 IF( iinfo.LT.0 )
THEN
1022 result( 3 ) = ulpinv
1032 CALL slaset(
'Full', n, 1, zero, zero, sd, n )
1033 CALL slaset(
'Full', n, 1, zero, zero, se, n )
1034 CALL slacpy(
"L", n, n, a, lda, v, ldu )
1036 $ work, lh, work( lh+1 ), lw, iinfo )
1040 CALL scopy( n, sd, 1, d3, 1 )
1042 $
CALL scopy( n-1, se, 1, work, 1 )
1044 CALL ssteqr(
'N', n, d3, work, work( n+1 ), ldu,
1045 $ work( n+1 ), iinfo )
1046 IF( iinfo.NE.0 )
THEN
1047 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1050 IF( iinfo.LT.0 )
THEN
1053 result( 4 ) = ulpinv
1068 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1069 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1070 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1071 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1074 result( 3 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1075 result( 4 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1083 ap( i ) = a( jr, jc )
1089 CALL scopy( nap, ap, 1, vp, 1 )
1092 CALL ssptrd(
'U', n, vp, sd, se, tau, iinfo )
1094 IF( iinfo.NE.0 )
THEN
1095 WRITE( nounit, fmt = 9999 )
'SSPTRD(U)', iinfo, n, jtype,
1098 IF( iinfo.LT.0 )
THEN
1101 result( 5 ) = ulpinv
1107 CALL sopgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1108 IF( iinfo.NE.0 )
THEN
1109 WRITE( nounit, fmt = 9999 )
'SOPGTR(U)', iinfo, n, jtype,
1112 IF( iinfo.LT.0 )
THEN
1115 result( 6 ) = ulpinv
1122 CALL sspt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1123 $ work, result( 5 ) )
1124 CALL sspt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1125 $ work, result( 6 ) )
1133 ap( i ) = a( jr, jc )
1139 CALL scopy( nap, ap, 1, vp, 1 )
1142 CALL ssptrd(
'L', n, vp, sd, se, tau, iinfo )
1144 IF( iinfo.NE.0 )
THEN
1145 WRITE( nounit, fmt = 9999 )
'SSPTRD(L)', iinfo, n, jtype,
1148 IF( iinfo.LT.0 )
THEN
1151 result( 7 ) = ulpinv
1157 CALL sopgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1158 IF( iinfo.NE.0 )
THEN
1159 WRITE( nounit, fmt = 9999 )
'SOPGTR(L)', iinfo, n, jtype,
1162 IF( iinfo.LT.0 )
THEN
1165 result( 8 ) = ulpinv
1170 CALL sspt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1171 $ work, result( 7 ) )
1172 CALL sspt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1173 $ work, result( 8 ) )
1179 CALL scopy( n, sd, 1, d1, 1 )
1181 $
CALL scopy( n-1, se, 1, work, 1 )
1182 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1185 CALL ssteqr(
'V', n, d1, work, z, ldu, work( n+1 ), iinfo )
1186 IF( iinfo.NE.0 )
THEN
1187 WRITE( nounit, fmt = 9999 )
'SSTEQR(V)', iinfo, n, jtype,
1190 IF( iinfo.LT.0 )
THEN
1193 result( 9 ) = ulpinv
1200 CALL scopy( n, sd, 1, d2, 1 )
1202 $
CALL scopy( n-1, se, 1, work, 1 )
1205 CALL ssteqr(
'N', n, d2, work, work( n+1 ), ldu,
1206 $ work( n+1 ), iinfo )
1207 IF( iinfo.NE.0 )
THEN
1208 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1211 IF( iinfo.LT.0 )
THEN
1214 result( 11 ) = ulpinv
1221 CALL scopy( n, sd, 1, d3, 1 )
1223 $
CALL scopy( n-1, se, 1, work, 1 )
1226 CALL ssterf( n, d3, work, iinfo )
1227 IF( iinfo.NE.0 )
THEN
1228 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1231 IF( iinfo.LT.0 )
THEN
1234 result( 12 ) = ulpinv
1241 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1252 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1253 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1254 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1255 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1258 result( 11 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1259 result( 12 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1265 temp1 = thresh*( half-ulp )
1267 DO 160 j = 0, log2ui
1268 CALL sstech( n, sd, se, d1, temp1, work, iinfo )
1275 result( 13 ) = temp1
1280 IF( jtype.GT.15 )
THEN
1284 CALL scopy( n, sd, 1, d4, 1 )
1286 $
CALL scopy( n-1, se, 1, work, 1 )
1287 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1290 CALL spteqr(
'V', n, d4, work, z, ldu, work( n+1 ),
1292 IF( iinfo.NE.0 )
THEN
1293 WRITE( nounit, fmt = 9999 )
'SPTEQR(V)', iinfo, n,
1296 IF( iinfo.LT.0 )
THEN
1299 result( 14 ) = ulpinv
1306 CALL sstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1311 CALL scopy( n, sd, 1, d5, 1 )
1313 $
CALL scopy( n-1, se, 1, work, 1 )
1316 CALL spteqr(
'N', n, d5, work, z, ldu, work( n+1 ),
1318 IF( iinfo.NE.0 )
THEN
1319 WRITE( nounit, fmt = 9999 )
'SPTEQR(N)', iinfo, n,
1322 IF( iinfo.LT.0 )
THEN
1325 result( 16 ) = ulpinv
1335 temp1 = max( temp1, abs( d4( j ) ), abs( d5( j ) ) )
1336 temp2 = max( temp2, abs( d4( j )-d5( j ) ) )
1339 result( 16 ) = temp2 / max( unfl,
1340 $ hun*ulp*max( temp1, temp2 ) )
1356 IF( jtype.EQ.21 )
THEN
1358 abstol = unfl + unfl
1359 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1360 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1361 $ work, iwork( 2*n+1 ), iinfo )
1362 IF( iinfo.NE.0 )
THEN
1363 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1366 IF( iinfo.LT.0 )
THEN
1369 result( 17 ) = ulpinv
1376 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1381 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1382 $ ( abstol+abs( d4( j ) ) ) )
1385 result( 17 ) = temp1 / temp2
1393 abstol = unfl + unfl
1394 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1395 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1396 $ iwork( 2*n+1 ), iinfo )
1397 IF( iinfo.NE.0 )
THEN
1398 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1401 IF( iinfo.LT.0 )
THEN
1404 result( 18 ) = ulpinv
1414 temp1 = max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1415 temp2 = max( temp2, abs( d3( j )-wa1( j ) ) )
1418 result( 18 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1428 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1429 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1437 CALL sstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1438 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1439 $ work, iwork( 2*n+1 ), iinfo )
1440 IF( iinfo.NE.0 )
THEN
1441 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1444 IF( iinfo.LT.0 )
THEN
1447 result( 19 ) = ulpinv
1457 vl = wa1( il ) - max( half*( wa1( il )-wa1( il-1 ) ),
1458 $ ulp*anorm, two*rtunfl )
1460 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1461 $ ulp*anorm, two*rtunfl )
1464 vu = wa1( iu ) + max( half*( wa1( iu+1 )-wa1( iu ) ),
1465 $ ulp*anorm, two*rtunfl )
1467 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1468 $ ulp*anorm, two*rtunfl )
1475 CALL sstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1476 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1477 $ work, iwork( 2*n+1 ), iinfo )
1478 IF( iinfo.NE.0 )
THEN
1479 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1482 IF( iinfo.LT.0 )
THEN
1485 result( 19 ) = ulpinv
1490 IF( m3.EQ.0 .AND. n.NE.0 )
THEN
1491 result( 19 ) = ulpinv
1497 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1498 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1500 temp3 = max( abs( wa1( n ) ), abs( wa1( 1 ) ) )
1505 result( 19 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1512 CALL sstebz(
'A',
'B', n, vl, vu, il, iu, abstol, sd, se, m,
1513 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1514 $ iwork( 2*n+1 ), iinfo )
1515 IF( iinfo.NE.0 )
THEN
1516 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1519 IF( iinfo.LT.0 )
THEN
1522 result( 20 ) = ulpinv
1523 result( 21 ) = ulpinv
1528 CALL sstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1529 $ ldu, work, iwork( 2*n+1 ), iwork( 3*n+1 ),
1531 IF( iinfo.NE.0 )
THEN
1532 WRITE( nounit, fmt = 9999 )
'SSTEIN', iinfo, n, jtype,
1535 IF( iinfo.LT.0 )
THEN
1538 result( 20 ) = ulpinv
1539 result( 21 ) = ulpinv
1546 CALL sstt21( n, 0, sd, se, wa1, dumma, z, ldu, work,
1553 CALL scopy( n, sd, 1, d1, 1 )
1555 $
CALL scopy( n-1, se, 1, work, 1 )
1556 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1559 CALL sstedc(
'I', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1560 $ iwork, liwedc, iinfo )
1561 IF( iinfo.NE.0 )
THEN
1562 WRITE( nounit, fmt = 9999 )
'SSTEDC(I)', iinfo, n, jtype,
1565 IF( iinfo.LT.0 )
THEN
1568 result( 22 ) = ulpinv
1575 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1582 CALL scopy( n, sd, 1, d1, 1 )
1584 $
CALL scopy( n-1, se, 1, work, 1 )
1585 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1588 CALL sstedc(
'V', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1589 $ iwork, liwedc, iinfo )
1590 IF( iinfo.NE.0 )
THEN
1591 WRITE( nounit, fmt = 9999 )
'SSTEDC(V)', iinfo, n, jtype,
1594 IF( iinfo.LT.0 )
THEN
1597 result( 24 ) = ulpinv
1604 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1611 CALL scopy( n, sd, 1, d2, 1 )
1613 $
CALL scopy( n-1, se, 1, work, 1 )
1614 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1617 CALL sstedc(
'N', n, d2, work, z, ldu, work( n+1 ), lwedc-n,
1618 $ iwork, liwedc, iinfo )
1619 IF( iinfo.NE.0 )
THEN
1620 WRITE( nounit, fmt = 9999 )
'SSTEDC(N)', iinfo, n, jtype,
1623 IF( iinfo.LT.0 )
THEN
1626 result( 26 ) = ulpinv
1637 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1638 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1641 result( 26 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1645 IF( ilaenv( 10,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1646 $ ilaenv( 11,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1657 IF( jtype.EQ.21 .AND. srel )
THEN
1659 abstol = unfl + unfl
1660 CALL sstemr(
'V',
'A', n, sd, se, vl, vu, il, iu,
1661 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1662 $ work, lwork, iwork( 2*n+1 ), lwork-2*n,
1664 IF( iinfo.NE.0 )
THEN
1665 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A,rel)',
1666 $ iinfo, n, jtype, ioldsd
1668 IF( iinfo.LT.0 )
THEN
1671 result( 27 ) = ulpinv
1678 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1683 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1684 $ ( abstol+abs( d4( j ) ) ) )
1687 result( 27 ) = temp1 / temp2
1689 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1690 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1699 abstol = unfl + unfl
1700 CALL sstemr(
'V',
'I', n, sd, se, vl, vu, il, iu,
1701 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1702 $ work, lwork, iwork( 2*n+1 ),
1703 $ lwork-2*n, iinfo )
1705 IF( iinfo.NE.0 )
THEN
1706 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I,rel)',
1707 $ iinfo, n, jtype, ioldsd
1709 IF( iinfo.LT.0 )
THEN
1712 result( 28 ) = ulpinv
1719 temp2 = two*( two*n-one )*ulp*
1720 $ ( one+eight*half**2 ) / ( one-half )**4
1724 temp1 = max( temp1, abs( wr( j-il+1 )-d4( n-j+
1725 $ 1 ) ) / ( abstol+abs( wr( j-il+1 ) ) ) )
1728 result( 28 ) = temp1 / temp2
1741 CALL scopy( n, sd, 1, d5, 1 )
1743 $
CALL scopy( n-1, se, 1, work, 1 )
1744 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1748 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1749 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1755 CALL sstemr(
'V',
'I', n, d5, work, vl, vu, il, iu,
1756 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1757 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1758 $ liwork-2*n, iinfo )
1759 IF( iinfo.NE.0 )
THEN
1760 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I)', iinfo,
1763 IF( iinfo.LT.0 )
THEN
1766 result( 29 ) = ulpinv
1773 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1780 CALL scopy( n, sd, 1, d5, 1 )
1782 $
CALL scopy( n-1, se, 1, work, 1 )
1785 CALL sstemr(
'N',
'I', n, d5, work, vl, vu, il, iu,
1786 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1787 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1788 $ liwork-2*n, iinfo )
1789 IF( iinfo.NE.0 )
THEN
1790 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,I)', iinfo,
1793 IF( iinfo.LT.0 )
THEN
1796 result( 31 ) = ulpinv
1806 DO 240 j = 1, iu - il + 1
1807 temp1 = max( temp1, abs( d1( j ) ),
1809 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1812 result( 31 ) = temp2 / max( unfl,
1813 $ ulp*max( temp1, temp2 ) )
1819 CALL scopy( n, sd, 1, d5, 1 )
1821 $
CALL scopy( n-1, se, 1, work, 1 )
1822 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1828 vl = d2( il ) - max( half*
1829 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1832 vl = d2( 1 ) - max( half*( d2( n )-d2( 1 ) ),
1833 $ ulp*anorm, two*rtunfl )
1836 vu = d2( iu ) + max( half*
1837 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1840 vu = d2( n ) + max( half*( d2( n )-d2( 1 ) ),
1841 $ ulp*anorm, two*rtunfl )
1848 CALL sstemr(
'V',
'V', n, d5, work, vl, vu, il, iu,
1849 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1850 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1851 $ liwork-2*n, iinfo )
1852 IF( iinfo.NE.0 )
THEN
1853 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,V)', iinfo,
1856 IF( iinfo.LT.0 )
THEN
1859 result( 32 ) = ulpinv
1866 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1873 CALL scopy( n, sd, 1, d5, 1 )
1875 $
CALL scopy( n-1, se, 1, work, 1 )
1878 CALL sstemr(
'N',
'V', n, d5, work, vl, vu, il, iu,
1879 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1880 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1881 $ liwork-2*n, iinfo )
1882 IF( iinfo.NE.0 )
THEN
1883 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,V)', iinfo,
1886 IF( iinfo.LT.0 )
THEN
1889 result( 34 ) = ulpinv
1899 DO 250 j = 1, iu - il + 1
1900 temp1 = max( temp1, abs( d1( j ) ),
1902 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1905 result( 34 ) = temp2 / max( unfl,
1906 $ ulp*max( temp1, temp2 ) )
1920 CALL scopy( n, sd, 1, d5, 1 )
1922 $
CALL scopy( n-1, se, 1, work, 1 )
1926 CALL sstemr(
'V',
'A', n, d5, work, vl, vu, il, iu,
1927 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1928 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1929 $ liwork-2*n, iinfo )
1930 IF( iinfo.NE.0 )
THEN
1931 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A)', iinfo, n,
1934 IF( iinfo.LT.0 )
THEN
1937 result( 35 ) = ulpinv
1944 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1951 CALL scopy( n, sd, 1, d5, 1 )
1953 $
CALL scopy( n-1, se, 1, work, 1 )
1956 CALL sstemr(
'N',
'A', n, d5, work, vl, vu, il, iu,
1957 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1958 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1959 $ liwork-2*n, iinfo )
1960 IF( iinfo.NE.0 )
THEN
1961 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,A)', iinfo, n,
1964 IF( iinfo.LT.0 )
THEN
1967 result( 37 ) = ulpinv
1978 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1979 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1982 result( 37 ) = temp2 / max( unfl,
1983 $ ulp*max( temp1, temp2 ) )
1987 ntestt = ntestt + ntest
1993 DO 290 jr = 1, ntest
1994 IF( result( jr ).GE.thresh )
THEN
1999 IF( nerrs.EQ.0 )
THEN
2000 WRITE( nounit, fmt = 9998 )
'SST'
2001 WRITE( nounit, fmt = 9997 )
2002 WRITE( nounit, fmt = 9996 )
2003 WRITE( nounit, fmt = 9995 )
'Symmetric'
2004 WRITE( nounit, fmt = 9994 )
2008 WRITE( nounit, fmt = 9988 )
2011 WRITE( nounit, fmt = 9990 )n, ioldsd, jtype, jr,
2020 CALL slasum(
'SST', nounit, nerrs, ntestt )
2023 9999
FORMAT(
' SCHKST2STG: ', a,
' returned INFO=', i6,
'.', / 9x,
2024 $
'N=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2026 9998
FORMAT( / 1x, a3,
' -- Real Symmetric eigenvalue problem' )
2027 9997
FORMAT(
' Matrix types (see SCHKST2STG for details): ' )
2029 9996
FORMAT( /
' Special Matrices:',
2030 $ /
' 1=Zero matrix. ',
2031 $
' 5=Diagonal: clustered entries.',
2032 $ /
' 2=Identity matrix. ',
2033 $
' 6=Diagonal: large, evenly spaced.',
2034 $ /
' 3=Diagonal: evenly spaced entries. ',
2035 $
' 7=Diagonal: small, evenly spaced.',
2036 $ /
' 4=Diagonal: geometr. spaced entries.' )
2037 9995
FORMAT(
' Dense ', a,
' Matrices:',
2038 $ /
' 8=Evenly spaced eigenvals. ',
2039 $
' 12=Small, evenly spaced eigenvals.',
2040 $ /
' 9=Geometrically spaced eigenvals. ',
2041 $
' 13=Matrix with random O(1) entries.',
2042 $ /
' 10=Clustered eigenvalues. ',
2043 $
' 14=Matrix with large random entries.',
2044 $ /
' 11=Large, evenly spaced eigenvals. ',
2045 $
' 15=Matrix with small random entries.' )
2046 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
2047 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
2048 $ /
' 18=Positive definite, clustered eigenvalues',
2049 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
2050 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
2051 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
2052 $
' spaced eigenvalues' )
2054 9990
FORMAT(
' N=', i5,
', seed=', 4( i4,
',' ),
' type ', i2,
2055 $
', test(', i2,
')=', g10.3 )
2057 9988
FORMAT( /
'Test performed: see SCHKST2STG for details.', / )
subroutine slabad(SMALL, LARGE)
SLABAD
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 slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ssteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
SSTEQR
subroutine sstedc(COMPZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
SSTEDC
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine sstebz(RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO)
SSTEBZ
subroutine slatms(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, KL, KU, PACK, A, LDA, WORK, INFO)
SLATMS
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 ssptrd(UPLO, N, AP, D, E, TAU, INFO)
SSPTRD
subroutine sopgtr(UPLO, N, AP, TAU, Q, LDQ, WORK, INFO)
SOPGTR
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 sstein(N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK, IWORK, IFAIL, INFO)
SSTEIN
subroutine sorgtr(UPLO, N, A, LDA, TAU, WORK, LWORK, INFO)
SORGTR
subroutine spteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
SPTEQR
subroutine ssytrd(UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO)
SSYTRD
subroutine ssytrd_2stage(VECT, UPLO, N, A, LDA, D, E, TAU, HOUS2, LHOUS2, WORK, LWORK, INFO)
SSYTRD_2STAGE
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
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
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 sspt21(ITYPE, UPLO, N, KBAND, AP, D, E, U, LDU, VP, TAU, WORK, RESULT)
SSPT21
subroutine slasum(TYPE, IOUNIT, IE, NRUN)
SLASUM