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,
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. )
649 INTEGER I, IINFO, IL, IMODE, ITEMP, ITYPE, IU, J, ,
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
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,
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
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 )
1292 IF( iinfo.NE.0 )
THEN
1293 WRITE( nounit, fmt = 9999 )'
spteqr(v)
', IINFO, N,
1296.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1319 WRITE( NOUNIT, FMT = 9999 )'spteqr(n)
', IINFO, N,
1322.LT.
IF( IINFO0 ) 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.EQ.
IF( JTYPE21 ) 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.NE.
IF( IINFO0 ) THEN
1363 WRITE( NOUNIT, FMT = 9999 )'sstebz(a,rel)
', IINFO, N,
1366.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1398 WRITE( NOUNIT, FMT = 9999 )'sstebz(a)
', IINFO, N, JTYPE,
1401.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1441 WRITE( NOUNIT, FMT = 9999 )'sstebz(i)
', IINFO, N, JTYPE,
1444.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1479 WRITE( NOUNIT, FMT = 9999 )'sstebz(v)
', IINFO, N, JTYPE,
1482.LT.
IF( IINFO0 ) THEN
1485 RESULT( 19 ) = ULPINV
1490.EQ..AND..NE.
IF( M30 N0 ) 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.NE.
IF( IINFO0 ) THEN
1516 WRITE( NOUNIT, FMT = 9999 )'sstebz(a,b)
', IINFO, N,
1519.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1532 WRITE( NOUNIT, FMT = 9999 )'sstein', IINFO, N, JTYPE,
1535.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1562 WRITE( NOUNIT, FMT = 9999 )'sstedc(i)
', IINFO, N, JTYPE,
1565.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1591 WRITE( NOUNIT, FMT = 9999 )'sstedc(v)
', IINFO, N, JTYPE,
1594.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1620 WRITE( NOUNIT, FMT = 9999 )'sstedc(n)
', IINFO, N, JTYPE,
1623.LT.
IF( IINFO0 ) 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.EQ..AND.
', 1, 0, 0, 0 )1
1646 $ ILAENV( 11, 'sstemr', 'va.EQ.
', 1, 0, 0, 0 )1 ) THEN
1657.EQ..AND.
IF( JTYPE21 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.NE.
IF( IINFO0 ) THEN
1665 WRITE( NOUNIT, FMT = 9999 )'sstemr(v,a,rel)
',
1666 $ IINFO, N, JTYPE, IOLDSD
1668.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1706 WRITE( NOUNIT, FMT = 9999 )'sstemr(v,i,rel)
',
1707 $ IINFO, N, JTYPE, IOLDSD
1709.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1760 WRITE( NOUNIT, FMT = 9999 )'sstemr(v,i)
', IINFO,
1763.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1790 WRITE( NOUNIT, FMT = 9999 )'sstemr(n,i)
', IINFO,
1793.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1853 WRITE( NOUNIT, FMT = 9999 )'sstemr(v,v)
', IINFO,
1856.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1883 WRITE( NOUNIT, FMT = 9999 )'sstemr(n,v)
', IINFO,
1886.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1931 WRITE( NOUNIT, FMT = 9999 )'sstemr(v,a)
', IINFO, N,
1934.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1961 WRITE( NOUNIT, FMT = 9999 )'sstemr(n,a)
', IINFO, N,
1964.LT.
IF( IINFO0 ) 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.GE.
IF( RESULT( JR )THRESH ) THEN
1999.EQ.
IF( NERRS0 ) 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.
', / )