608 SUBROUTINE dchkst2stg( 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,
620 DOUBLE PRECISION THRESH
624 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
625 DOUBLE PRECISION 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 DOUBLE PRECISION ZERO, ONE, TWO, EIGHT, TEN, HUN
636 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
637 $ eight = 8.0d0, ten = 10.0d0, hun = 100.0d0 )
638 DOUBLE PRECISION HALF
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 DOUBLE PRECISION 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 ),
661 DOUBLE PRECISION DUMMA( 1 )
665 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
666 EXTERNAL ILAENV, DLAMCH, DLARND, DSXT1
676 INTRINSIC abs, dble, 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,
'DSYTRD',
'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(
'DCHKST2STG', -info )
733 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
738 unfl = dlamch(
'Safe minimum' )
741 ulp = dlamch(
'Epsilon' )*dlamch(
'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( dble( 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 / dble(
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 dlaset(
'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 dlatms( 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 dlatms( 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 dlatmr( 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 dlatmr( 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.EQ.
ELSE IF( ITYPE9 ) THEN
890 CALL DLATMS( N, N, 's
', ISEED, 'p
', WORK, IMODE, COND,
891 $ ANORM, N, N, 'n
', A, LDA, WORK( N+1 ),
894.EQ.
ELSE IF( ITYPE10 ) THEN
898 CALL DLATMS( 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.GT.
IF( TEMP1HALF ) 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.NE.
IF( IINFO0 ) THEN
917 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N, JTYPE,
928 CALL DLACPY( 'u
', N, N, A, LDA, V, LDU )
931 CALL DSYTRD( 'u
', N, V, LDU, SD, SE, TAU, WORK, LWORK,
934.NE.
IF( IINFO0 ) THEN
935 WRITE( NOUNIT, FMT = 9999 )'dsytrd(u)
', IINFO, N, JTYPE,
938.LT.
IF( IINFO0 ) THEN
946 CALL DLACPY( 'u
', N, N, V, LDU, U, LDU )
949 CALL DORGTR( 'u
', N, U, LDU, TAU, WORK, LWORK, IINFO )
950.NE.
IF( IINFO0 ) THEN
951 WRITE( NOUNIT, FMT = 9999 )'dorgtr(u)
', IINFO, N, JTYPE,
954.LT.
IF( IINFO0 ) THEN
964 CALL DSYT21( 2, 'upper
', N, 1, A, LDA, SD, SE, U, LDU, V,
965 $ LDU, TAU, WORK, RESULT( 1 ) )
966 CALL DSYT21( 3, 'upper
', N, 1, A, LDA, SD, SE, U, LDU, V,
967 $ LDU, TAU, WORK, RESULT( 2 ) )
976 CALL DCOPY( N, SD, 1, D1, 1 )
978 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
980 CALL DSTEQR( 'n
', N, D1, WORK, WORK( N+1 ), LDU,
981 $ WORK( N+1 ), IINFO )
982.NE.
IF( IINFO0 ) THEN
983 WRITE( NOUNIT, FMT = 9999 )'dsteqr(n)
', IINFO, N, JTYPE,
986.LT.
IF( IINFO0 ) THEN
999 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SD, N )
1000 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SE, N )
1001 CALL DLACPY( "U", N, N, A, LDA, V, LDU )
1004 CALL DSYTRD_2STAGE( 'n
', "U", N, V, LDU, SD, SE, TAU,
1005 $ WORK, LH, WORK( LH+1 ), LW, IINFO )
1009 CALL DCOPY( N, SD, 1, D2, 1 )
1011 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1013 CALL DSTEQR( 'n
', N, D2, WORK, WORK( N+1 ), LDU,
1014 $ WORK( N+1 ), IINFO )
1015.NE.
IF( IINFO0 ) THEN
1016 WRITE( NOUNIT, FMT = 9999 )'dsteqr(n)
', IINFO, N, JTYPE,
1019.LT.
IF( IINFO0 ) THEN
1022 RESULT( 3 ) = ULPINV
1032 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SD, N )
1033 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SE, N )
1034 CALL DLACPY( "L", N, N, A, LDA, V, LDU )
1035 CALL DSYTRD_2STAGE( 'n
', "L", N, V, LDU, SD, SE, TAU,
1036 $ WORK, LH, WORK( LH+1 ), LW, IINFO )
1040 CALL DCOPY( N, SD, 1, D3, 1 )
1042 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1044 CALL DSTEQR( 'n
', N, D3, WORK, WORK( N+1 ), LDU,
1045 $ WORK( N+1 ), IINFO )
1046.NE.
IF( IINFO0 ) THEN
1047 WRITE( NOUNIT, FMT = 9999 )'dsteqr(n)
', IINFO, N, JTYPE,
1050.LT.
IF( IINFO0 ) 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 DCOPY( NAP, AP, 1, VP, 1 )
1092 CALL DSPTRD( 'u
', N, VP, SD, SE, TAU, IINFO )
1094.NE.
IF( IINFO0 ) THEN
1095 WRITE( NOUNIT, FMT = 9999 )'dsptrd(u)
', IINFO, N, JTYPE,
1098.LT.
IF( IINFO0 ) THEN
1101 RESULT( 5 ) = ULPINV
1107 CALL DOPGTR( 'u
', N, VP, TAU, U, LDU, WORK, IINFO )
1108.NE.
IF( IINFO0 ) THEN
1109 WRITE( NOUNIT, FMT = 9999 )'dopgtr(u)
', IINFO, N, JTYPE,
1112.LT.
IF( IINFO0 ) THEN
1115 RESULT( 6 ) = ULPINV
1122 CALL DSPT21( 2, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1123 $ WORK, RESULT( 5 ) )
1124 CALL DSPT21( 3, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1125 $ WORK, RESULT( 6 ) )
1133 AP( I ) = A( JR, JC )
1139 CALL DCOPY( NAP, AP, 1, VP, 1 )
1142 CALL DSPTRD( 'l
', N, VP, SD, SE, TAU, IINFO )
1144.NE.
IF( IINFO0 ) THEN
1145 WRITE( NOUNIT, FMT = 9999 )'dsptrd(l)
', IINFO, N, JTYPE,
1148.LT.
IF( IINFO0 ) THEN
1151 RESULT( 7 ) = ULPINV
1157 CALL DOPGTR( 'l
', N, VP, TAU, U, LDU, WORK, IINFO )
1158.NE.
IF( IINFO0 ) THEN
1159 WRITE( NOUNIT, FMT = 9999 )'dopgtr(l)
', IINFO, N, JTYPE,
1162.LT.
IF( IINFO0 ) THEN
1165 RESULT( 8 ) = ULPINV
1170 CALL DSPT21( 2, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1171 $ WORK, RESULT( 7 ) )
1172 CALL DSPT21( 3, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1173 $ WORK, RESULT( 8 ) )
1179 CALL DCOPY( N, SD, 1, D1, 1 )
1181 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1182 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1185 CALL DSTEQR( 'v
', N, D1, WORK, Z, LDU, WORK( N+1 ), IINFO )
1186.NE.
IF( IINFO0 ) THEN
1187 WRITE( NOUNIT, FMT = 9999 )'dsteqr(v)
', IINFO, N, JTYPE,
1190.LT.
IF( IINFO0 ) THEN
1193 RESULT( 9 ) = ULPINV
1200 CALL DCOPY( N, SD, 1, D2, 1 )
1202 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1205 CALL DSTEQR( 'n
', N, D2, WORK, WORK( N+1 ), LDU,
1206 $ WORK( N+1 ), IINFO )
1207.NE.
IF( IINFO0 ) THEN
1208 WRITE( NOUNIT, FMT = 9999 )'dsteqr(n)
', IINFO, N, JTYPE,
1211.LT.
IF( IINFO0 ) THEN
1214 RESULT( 11 ) = ULPINV
1221 CALL DCOPY( N, SD, 1, D3, 1 )
1223 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1226 CALL DSTERF( N, D3, WORK, IINFO )
1227.NE.
IF( IINFO0 ) THEN
1228 WRITE( NOUNIT, FMT = 9999 )'dsterf', IINFO, N, JTYPE,
1231.LT.
IF( IINFO0 ) THEN
1234 RESULT( 12 ) = ULPINV
1241 CALL DSTT21( 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 DSTECH( N, SD, SE, D1, TEMP1, WORK, IINFO )
1275 RESULT( 13 ) = TEMP1
1280.GT.
IF( JTYPE15 ) THEN
1284 CALL DCOPY( N, SD, 1, D4, 1 )
1286 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1287 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1290 CALL DPTEQR( 'v
', N, D4, WORK, Z, LDU, WORK( N+1 ),
1292.NE.
IF( IINFO0 ) THEN
1293 WRITE( NOUNIT, FMT = 9999 )'dpteqr(v)
', IINFO, N,
1296.LT.
IF( IINFO0 ) THEN
1299 RESULT( 14 ) = ULPINV
1306 CALL DSTT21( N, 0, SD, SE, D4, DUMMA, Z, LDU, WORK,
1311 CALL DCOPY( N, SD, 1, D5, 1 )
1313 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1316 CALL DPTEQR( 'n
', N, D5, WORK, Z, LDU, WORK( N+1 ),
1318.NE.
IF( IINFO0 ) THEN
1319 WRITE( NOUNIT, FMT = 9999 )'dpteqr(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 DSTEBZ( '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 )'dstebz(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 DSTEBZ( '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 )'dstebz(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( DLARND( 1, ISEED2 ) )
1429 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1437 CALL DSTEBZ( '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 )'dstebz(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 DSTEBZ( '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 )'dstebz(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 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1498 TEMP2 = DSXT1( 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 DSTEBZ( '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 )'dstebz(a,b)
', IINFO, N,
1519.LT.
IF( IINFO0 ) THEN
1522 RESULT( 20 ) = ULPINV
1523 RESULT( 21 ) = ULPINV
1528 CALL DSTEIN( 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 )'dstein', IINFO, N, JTYPE,
1535.LT.
IF( IINFO0 ) THEN
1538 RESULT( 20 ) = ULPINV
1539 RESULT( 21 ) = ULPINV
1546 CALL DSTT21( N, 0, SD, SE, WA1, DUMMA, Z, LDU, WORK,
1553 CALL DCOPY( N, SD, 1, D1, 1 )
1555 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1556 CALL DLASET( 'full', n, n, zero, one, z, ldu )
1559 CALL dstedc(
'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 )
'DSTEDC(I)', iinfo, n, jtype,
1565 IF( iinfo.LT.0 )
THEN
1568 result( 22 ) = ulpinv
1575 CALL dstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1582 CALL dcopy( n, sd, 1, d1, 1 )
1584 $
CALL dcopy( n-1, se, 1, work, 1 )
1585 CALL dlaset(
'Full', n, n, zero, one, z, ldu )
1588 CALL dstedc(
'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 )
'DSTEDC(V)', iinfo, n, jtype,
1594 IF( iinfo.LT.0 )
THEN
1597 result( 24 ) = ulpinv
1604 CALL dstt21( n, 0, sd, se, d1, dumma, z, ldu, work,
1611 CALL dcopy( n, sd, 1, d2, 1 )
1613 $
CALL dcopy( n-1, se, 1, work, 1 )
1614 CALL dlaset(
'Full', n, n
1617 CALL dstedc(
'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 )
'DSTEDC(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,
'DSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1646 $ ilaenv( 11,
'DSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1657 IF( jtype.EQ.21 .AND. srel )
THEN
1659 abstol = unfl + unfl
1660 CALL dstemr(
'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 )
'DSTEMR(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( dlarnd( 1, iseed2 ) )
1690 iu = 1 + ( n-1 )*int( dlarnd( 1, iseed2 ) )
1699 abstol = unfl + unfl
1700 CALL dstemr(
'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 )
'DSTEMR(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 dcopy( n, sd, 1, d5, 1 )
1743 $
CALL dcopy( n-1, se, 1, work, 1 )
1744 CALL dlaset(
'Full', n, n, zero, one, z, ldu )
1748 il = 1 + ( n-1 )*int( dlarnd( 1, iseed2 ) )
1749 iu = 1 + ( n-1 )*int( dlarnd( 1, iseed2 ) )
1755 CALL dstemr(
'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 )
'DSTEMR(V,I)', iinfo,
1763 IF( iinfo.LT.0 )
THEN
1766 result( 29 ) = ulpinv
1773 CALL dstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1780 CALL dcopy( n, sd, 1, d5, 1 )
1782 $
CALL dcopy( n-1, se, 1, work, 1 )
1785 CALL dstemr(
'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 )
'DSTEMR(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 dcopy( n, sd, 1, d5, 1 )
1821 $
CALL dcopy( n-1, se, 1, work, 1 )
1822 CALL dlaset(
'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 dstemr(
'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 )
'DSTEMR(V,V)', iinfo,
1856 IF( iinfo.LT.0 )
THEN
1859 result( 32 ) = ulpinv
1866 CALL dstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1873 CALL dcopy( n, sd, 1, d5, 1 )
1875 $
CALL dcopy( n-1, se, 1, work, 1 )
1878 CALL dstemr(
'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 )
'DSTEMR(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 dcopy( n, sd, 1, d5, 1 )
1922 $
CALL dcopy( n-1, se, 1, work, 1 )
1926 CALL dstemr(
'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 )
'DSTEMR(V,A)', iinfo, n,
1934 IF( iinfo.LT.0 )
THEN
1937 result( 35 ) = ulpinv
1944 CALL dstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1951 CALL dcopy( n, sd, 1, d5, 1 )
1953 $
CALL dcopy( n-1, se, 1, work, 1 )
1956 CALL dstemr(
'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 )
'DSTEMR(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 )
'DST'
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 dlasum(
'DST', nounit, nerrs, ntestt )
2023 9999
FORMAT(
' DCHKST2STG: ', 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 DCHKST2STG 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
dchkst2stg for details.
', / )