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
1069 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1070 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1071 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1072 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1075 result( 3 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1076 result( 4 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1084 ap( i ) = a( jr, jc )
1090 CALL scopy( nap, ap, 1, vp, 1 )
1093 CALL ssptrd(
'U', n, vp, sd, se, tau, iinfo )
1095 IF( iinfo.NE.0 )
THEN
1096 WRITE( nounit, fmt = 9999 )
'SSPTRD(U)', iinfo, n, jtype,
1099 IF( iinfo.LT.0 )
THEN
1102 result( 5 ) = ulpinv
1108 CALL sopgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1109 IF( iinfo.NE.0 )
THEN
1110 WRITE( nounit, fmt = 9999 )
'SOPGTR(U)', iinfo, n, jtype,
1113 IF( iinfo.LT.0 )
THEN
1116 result( 6 ) = ulpinv
1123 CALL sspt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1124 $ work, result( 5 ) )
1125 CALL sspt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1126 $ work, result( 6 ) )
1134 ap( i ) = a( jr, jc )
1140 CALL scopy( nap, ap, 1, vp, 1 )
1143 CALL ssptrd(
'L', n, vp, sd, se, tau, iinfo )
1145 IF( iinfo.NE.0 )
THEN
1146 WRITE( nounit, fmt = 9999 )
'SSPTRD(L)', iinfo, n, jtype,
1149 IF( iinfo.LT.0 )
THEN
1152 result( 7 ) = ulpinv
1158 CALL sopgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1159 IF( iinfo.NE.0 )
THEN
1160 WRITE( nounit, fmt = 9999 )
'SOPGTR(L)', iinfo, n, jtype,
1163 IF( iinfo.LT.0 )
THEN
1166 result( 8 ) = ulpinv
1171 CALL sspt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1172 $ work, result( 7 ) )
1173 CALL sspt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1174 $ work, result( 8 ) )
1180 CALL scopy( n, sd, 1, d1, 1 )
1182 $
CALL scopy( n-1, se, 1, work, 1 )
1183 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1186 CALL ssteqr(
'V', n, d1, work, z, ldu, work( n+1 ), iinfo )
1187 IF( iinfo.NE.0 )
THEN
1188 WRITE( nounit, fmt = 9999 )
'SSTEQR(V)', iinfo, n, jtype,
1191 IF( iinfo.LT.0 )
THEN
1194 result( 9 ) = ulpinv
1201 CALL scopy( n, sd, 1, d2, 1 )
1203 $
CALL scopy( n-1, se, 1, work, 1 )
1206 CALL ssteqr(
'N', n, d2, work, work( n+1 ), ldu,
1207 $ work( n+1 ), iinfo )
1208 IF( iinfo.NE.0 )
THEN
1209 WRITE( nounit, fmt = 9999 )
'SSTEQR(N)', iinfo, n, jtype,
1212 IF( iinfo.LT.0 )
THEN
1215 result( 11 ) = ulpinv
1222 CALL scopy( n, sd, 1, d3, 1 )
1224 $
CALL scopy( n-1, se, 1, work, 1 )
1227 CALL ssterf( n, d3, work, iinfo )
1228 IF( iinfo.NE.0 )
THEN
1229 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1232 IF( iinfo.LT.0 )
THEN
1235 result( 12 ) = ulpinv
1242 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1253 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1254 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1255 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1256 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1259 result( 11 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1260 result( 12 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1266 temp1 = thresh*( half-ulp )
1268 DO 160 j = 0, log2ui
1269 CALL sstech( n, sd, se, d1, temp1, work, iinfo )
1276 result( 13 ) = temp1
1281 IF( jtype.GT.15 )
THEN
1285 CALL scopy( n, sd, 1, d4, 1 )
1287 $
CALL scopy( n-1, se, 1, work, 1 )
1288 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1291 CALL spteqr(
'V', n, d4, work, z, ldu, work( n+1 ),
1293 IF( iinfo.NE.0 )
THEN
1294 WRITE( nounit, fmt = 9999 )
'SPTEQR(V)', iinfo, n,
1297 IF( iinfo.LT.0 )
THEN
1300 result( 14 ) = ulpinv
1307 CALL sstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1312 CALL scopy( n, sd, 1, d5, 1 )
1314 $
CALL scopy( n-1, se, 1, work, 1 )
1317 CALL spteqr(
'N', n, d5, work, z, ldu, work( n+1 ),
1319 IF( iinfo.NE.0 )
THEN
1320 WRITE( nounit, fmt = 9999 )
'SPTEQR(N)', iinfo, n,
1323 IF( iinfo.LT.0 )
THEN
1326 result( 16 ) = ulpinv
1336 temp1 = max( temp1, abs( d4( j ) ), abs( d5( j ) ) )
1337 temp2 = max( temp2, abs( d4( j )-d5( j ) ) )
1340 result( 16 ) = temp2 / max( unfl,
1341 $ hun*ulp*max( temp1, temp2 ) )
1357 IF( jtype.EQ.21 )
THEN
1359 abstol = unfl + unfl
1360 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1361 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1362 $ work, iwork( 2*n+1 ), iinfo )
1363 IF( iinfo.NE.0 )
THEN
1364 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1367 IF( iinfo.LT.0 )
THEN
1370 result( 17 ) = ulpinv
1377 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1382 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1383 $ ( abstol+abs( d4( j ) ) ) )
1386 result( 17 ) = temp1 / temp2
1394 abstol = unfl + unfl
1395 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1396 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1397 $ iwork( 2*n+1 ), iinfo )
1398 IF( iinfo.NE.0 )
THEN
1399 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1402 IF( iinfo.LT.0 )
THEN
1405 result( 18 ) = ulpinv
1415 temp1 = max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1416 temp2 = max( temp2, abs( d3( j )-wa1( j ) ) )
1419 result( 18 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1429 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1430 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1438 CALL sstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1439 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1440 $ work, iwork( 2*n+1 ), iinfo )
1441 IF( iinfo.NE.0 )
THEN
1442 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1445 IF( iinfo.LT.0 )
THEN
1448 result( 19 ) = ulpinv
1458 vl = wa1( il ) - max( half*( wa1( il )-wa1( il-1 ) ),
1459 $ ulp*anorm, two*rtunfl )
1461 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1462 $ ulp*anorm, two*rtunfl )
1465 vu = wa1( iu ) + max( half*( wa1( iu+1 )-wa1( iu ) ),
1466 $ ulp*anorm, two*rtunfl )
1468 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1469 $ ulp*anorm, two*rtunfl )
1476 CALL sstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1477 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1478 $ work, iwork( 2*n+1 ), iinfo )
1479 IF( iinfo.NE.0 )
THEN
1480 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1483 IF( iinfo.LT.0 )
THEN
1486 result( 19 ) = ulpinv
1491 IF( m3.EQ.0 .AND. n.NE.0 )
THEN
1492 result( 19 ) = ulpinv
1498 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1499 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1501 temp3 = max( abs( wa1( n ) ), abs( wa1( 1 ) ) )
1506 result( 19 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1513 CALL sstebz(
'A',
'B', n, vl, vu, il, iu, abstol, sd, se, m,
1514 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), work,
1515 $ iwork( 2*n+1 ), iinfo )
1516 IF( iinfo.NE.0 )
THEN
1517 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1520 IF( iinfo.LT.0 )
THEN
1523 result( 20 ) = ulpinv
1524 result( 21 ) = ulpinv
1529 CALL sstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1530 $ ldu, work, iwork( 2*n+1 ), iwork( 3*n+1 ),
1532 IF( iinfo.NE.0 )
THEN
1533 WRITE( nounit, fmt = 9999 )
'SSTEIN', iinfo, n, jtype,
1536 IF( iinfo.LT.0 )
THEN
1539 result( 20 ) = ulpinv
1540 result( 21 ) = ulpinv
1547 CALL sstt21( n, 0, sd, se, wa1, dumma, z, ldu, work,
1554 CALL scopy( n, sd, 1, d1, 1 )
1556 $
CALL scopy( n-1, se, 1, work, 1 )
1557 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1560 CALL sstedc(
'I', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1561 $ iwork, liwedc, iinfo )
1562 IF( iinfo.NE.0 )
THEN
1563 WRITE( nounit, fmt = 9999 )
'SSTEDC(I)', iinfo, n, jtype,
1566 IF( iinfo.LT.0 )
THEN
1569 result( 22 ) = ulpinv
1576 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1583 CALL scopy( n, sd, 1, d1, 1 )
1585 $
CALL scopy( n-1, se, 1, work, 1 )
1586 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1589 CALL sstedc(
'V', n, d1, work, z, ldu, work( n+1 ), lwedc-n,
1590 $ iwork, liwedc, iinfo )
1591 IF( iinfo.NE.0 )
THEN
1592 WRITE( nounit, fmt = 9999 )
'SSTEDC(V)', iinfo, n, jtype,
1595 IF( iinfo.LT.0 )
THEN
1598 result( 24 ) = ulpinv
1605 CALL sstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1612 CALL scopy( n, sd, 1, d2, 1 )
1614 $
CALL scopy( n-1, se, 1, work, 1 )
1615 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1618 CALL sstedc(
'N', n, d2, work, z, ldu, work( n+1 ), lwedc-n,
1619 $ iwork, liwedc, iinfo )
1620 IF( iinfo.NE.0 )
THEN
1621 WRITE( nounit, fmt = 9999 )
'SSTEDC(N)', iinfo, n, jtype,
1624 IF( iinfo.LT.0 )
THEN
1627 result( 26 ) = ulpinv
1638 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1639 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1642 result( 26 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1646 IF( ilaenv( 10,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1647 $ ilaenv( 11,
'SSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1658 IF( jtype.EQ.21 .AND. srel )
THEN
1660 abstol = unfl + unfl
1661 CALL sstemr(
'V',
'A', n, sd, se, vl, vu, il, iu,
1662 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1663 $ work, lwork, iwork( 2*n+1 ), lwork-2*n,
1665 IF( iinfo.NE.0 )
THEN
1666 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A,rel)',
1667 $ iinfo, n, jtype, ioldsd
1669 IF( iinfo.LT.0 )
THEN
1672 result( 27 ) = ulpinv
1679 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1684 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1685 $ ( abstol+abs( d4( j ) ) ) )
1688 result( 27 ) = temp1 / temp2
1690 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1691 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1700 abstol = unfl + unfl
1701 CALL sstemr(
'V',
'I', n, sd, se, vl, vu, il, iu,
1702 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1703 $ work, lwork, iwork( 2*n+1 ),
1704 $ lwork-2*n, iinfo )
1706 IF( iinfo.NE.0 )
THEN
1707 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I,rel)',
1708 $ iinfo, n, jtype, ioldsd
1710 IF( iinfo.LT.0 )
THEN
1713 result( 28 ) = ulpinv
1721 temp2 = two*( two*n-one )*ulp*
1722 $ ( one+eight*half**2 ) / ( one-half )**4
1726 temp1 = max( temp1, abs( wr( j-il+1 )-d4( n-j+
1727 $ 1 ) ) / ( abstol+abs( wr( j-il+1 ) ) ) )
1730 result( 28 ) = temp1 / temp2
1743 CALL scopy( n, sd, 1, d5, 1 )
1745 $
CALL scopy( n-1, se, 1, work, 1 )
1746 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1750 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1751 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1757 CALL sstemr(
'V',
'I', n, d5, work, vl, vu, il, iu,
1758 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1759 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1760 $ liwork-2*n, iinfo )
1761 IF( iinfo.NE.0 )
THEN
1762 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,I)', iinfo,
1765 IF( iinfo.LT.0 )
THEN
1768 result( 29 ) = ulpinv
1775 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1782 CALL scopy( n, sd, 1, d5, 1 )
1784 $
CALL scopy( n-1, se, 1, work, 1 )
1787 CALL sstemr(
'N',
'I', n, d5, work, vl, vu, il, iu,
1788 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1789 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1790 $ liwork-2*n, iinfo )
1791 IF( iinfo.NE.0 )
THEN
1792 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,I)', iinfo,
1795 IF( iinfo.LT.0 )
THEN
1798 result( 31 ) = ulpinv
1808 DO 240 j = 1, iu - il + 1
1809 temp1 = max( temp1, abs( d1( j ) ),
1811 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1814 result( 31 ) = temp2 / max( unfl,
1815 $ ulp*max( temp1, temp2 ) )
1822 CALL scopy( n, sd, 1, d5, 1 )
1824 $
CALL scopy( n-1, se, 1, work, 1 )
1825 CALL slaset(
'Full', n, n, zero, one, z, ldu )
1831 vl = d2( il ) - max( half*
1832 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1835 vl = d2( 1 ) - max( half*( d2( n )-d2( 1 ) ),
1836 $ ulp*anorm, two*rtunfl )
1839 vu = d2( iu ) + max( half*
1840 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1843 vu = d2( n ) + max( half*( d2( n )-d2( 1 ) ),
1844 $ ulp*anorm, two*rtunfl )
1851 CALL sstemr(
'V',
'V', n, d5, work, vl, vu, il, iu,
1852 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1853 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1854 $ liwork-2*n, iinfo )
1855 IF( iinfo.NE.0 )
THEN
1856 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,V)', iinfo,
1859 IF( iinfo.LT.0 )
THEN
1862 result( 32 ) = ulpinv
1869 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1876 CALL scopy( n, sd, 1, d5, 1 )
1878 $
CALL scopy( n-1, se, 1, work, 1 )
1881 CALL sstemr(
'N',
'V', n, d5, work, vl, vu, il, iu,
1882 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1883 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1884 $ liwork-2*n, iinfo )
1885 IF( iinfo.NE.0 )
THEN
1886 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,V)', iinfo,
1889 IF( iinfo.LT.0 )
THEN
1892 result( 34 ) = ulpinv
1902 DO 250 j = 1, iu - il + 1
1903 temp1 = max( temp1, abs( d1( j ) ),
1905 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1908 result( 34 ) = temp2 / max( unfl,
1909 $ ulp*max( temp1, temp2 ) )
1924 CALL scopy( n, sd, 1, d5, 1 )
1926 $
CALL scopy( n-1, se, 1, work, 1 )
1930 CALL sstemr(
'V',
'A', n, d5, work, vl, vu, il, iu,
1931 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1932 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1933 $ liwork-2*n, iinfo )
1934 IF( iinfo.NE.0 )
THEN
1935 WRITE( nounit, fmt = 9999 )
'SSTEMR(V,A)', iinfo, n,
1938 IF( iinfo.LT.0 )
THEN
1941 result( 35 ) = ulpinv
1948 CALL sstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1955 CALL scopy( n, sd, 1, d5, 1 )
1957 $
CALL scopy( n-1, se, 1, work, 1 )
1960 CALL sstemr(
'N',
'A', n, d5, work, vl, vu, il, iu,
1961 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1962 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1963 $ liwork-2*n, iinfo )
1964 IF( iinfo.NE.0 )
THEN
1965 WRITE( nounit, fmt = 9999 )
'SSTEMR(N,A)', iinfo, n,
1968 IF( iinfo.LT.0 )
THEN
1971 result( 37 ) = ulpinv
1982 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1983 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1986 result( 37 ) = temp2 / max( unfl,
1987 $ ulp*max( temp1, temp2 ) )
1991 ntestt = ntestt + ntest
1998 DO 290 jr = 1, ntest
1999 IF( result( jr ).GE.thresh )
THEN
2004 IF( nerrs.EQ.0 )
THEN
2005 WRITE( nounit, fmt = 9998 )
'SST'
2006 WRITE( nounit, fmt = 9997 )
2007 WRITE( nounit, fmt = 9996 )
2008 WRITE( nounit, fmt = 9995 )
'Symmetric'
2009 WRITE( nounit, fmt = 9994 )
2013 WRITE( nounit, fmt = 9988 )
2016 WRITE( nounit, fmt = 9990 )n, ioldsd, jtype, jr,
2025 CALL slasum(
'SST', nounit, nerrs, ntestt )
2028 9999
FORMAT(
' SCHKST2STG: ', a,
' returned INFO=', i6,
'.', / 9x,
2029 $
'N=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2031 9998
FORMAT( / 1x, a3,
' -- Real Symmetric eigenvalue problem' )
2032 9997
FORMAT(
' Matrix types (see SCHKST2STG for details): ' )
2034 9996
FORMAT( /
' Special Matrices:',
2035 $ /
' 1=Zero matrix. ',
2036 $
' 5=Diagonal: clustered entries.',
2037 $ /
' 2=Identity matrix. ',
2038 $
' 6=Diagonal: large, evenly spaced.',
2039 $ /
' 3=Diagonal: evenly spaced entries. ',
2040 $
' 7=Diagonal: small, evenly spaced.',
2041 $ /
' 4=Diagonal: geometr. spaced entries.' )
2042 9995
FORMAT(
' Dense ', a,
' Matrices:',
2043 $ /
' 8=Evenly spaced eigenvals. ',
2044 $
' 12=Small, evenly spaced eigenvals.',
2045 $ /
' 9=Geometrically spaced eigenvals. ',
2046 $
' 13=Matrix with random O(1) entries.',
2047 $ /
' 10=Clustered eigenvalues. ',
2048 $
' 14=Matrix with large random entries.',
2049 $ /
' 11=Large, evenly spaced eigenvals. ',
2050 $
' 15=Matrix with small random entries.' )
2051 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
2052 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
2053 $ /
' 18=Positive definite, clustered eigenvalues',
2054 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
2055 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
2056 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
2057 $
' spaced eigenvalues' )
2059 9990
FORMAT(
' N=', i5,
', seed=', 4( i4,
',' ),
' type ', i2,
2060 $
', test(', i2,
')=', g10.3 )
2062 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