587 SUBROUTINE dchkst( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
588 $ NOUNIT, A, LDA, AP, SD, SE, D1, D2, D3, D4, D5,
589 $ WA1, WA2, WA3, WR, U, LDU, V, VP, TAU, Z, WORK,
590 $ LWORK, IWORK, LIWORK, RESULT, INFO )
597 INTEGER INFO, LDA, LDU, LIWORK, LWORK, NOUNIT, NSIZES,
599 DOUBLE PRECISION THRESH
603 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
604 DOUBLE PRECISION A( LDA, * ), ( * ), D1( * ), D2( * ),
605 $ d3( * ), d4( * ), d5( * ), result( * ),
606 $ sd( * ), se( * ), tau( * ), u( ldu, * ),
607 $ v( ldu, * ), vp( * ), wa1( * ), wa2( * ),
608 $ wa3( * ), work( * ), wr( * ), z( ldu, * )
614 DOUBLE PRECISION ZERO, ONE, TWO, EIGHT, TEN, HUN
615 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
616 $ eight = 8.0d0, ten = 10.0d0, hun = 100.0d0 )
617 DOUBLE PRECISION HALF
618 parameter( half = one / two )
620 parameter( maxtyp = 21 )
622 parameter( srange = .false. )
624 parameter( srel = .false. )
627 LOGICAL BADNN, TRYRAC
628 INTEGER I, IINFO, IL, IMODE, ITEMP, ITYPE, IU, J, JC,
629 $ JR, JSIZE, JTYPE, LGN, LIWEDC, LOG2UI, LWEDC,
630 $ m, m2, m3, mtypes, n, nap, nblock, nerrs,
631 $ nmats, nmax, nsplit, ntest, ntestt
632 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
633 $ RTUNFL, TEMP1, TEMP2, TEMP3, TEMP4, ULP,
634 $ ULPINV, UNFL, VL, VU
637 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
638 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
640 DOUBLE PRECISION DUMMA( 1 )
644 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
645 EXTERNAL ILAENV, DLAMCH, DLARND, DSXT1
654 INTRINSIC abs, dble, int, log,
max,
min, sqrt
657 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
658 $ 8, 8, 9, 9, 9, 9, 9, 10 /
659 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
660 $ 2, 3, 1, 1, 1, 2, 3, 1 /
661 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
662 $ 0, 0, 4, 3, 1, 4, 4, 3 /
680 nmax =
max( nmax, nn( j ) )
685 nblock = ilaenv( 1,
'DSYTRD',
'L', nmax, -1, -1, -1 )
686 nblock =
min( nmax,
max( 1, nblock ) )
690 IF( nsizes.LT.0 )
THEN
692 ELSE IF( badnn )
THEN
694 ELSE IF( ntypes.LT.0 )
THEN
696 ELSE IF( lda.LT.nmax )
THEN
698 ELSE IF( ldu.LT.nmax )
THEN
700 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
705 CALL xerbla(
'DCHKST', -info )
711 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
716 unfl = dlamch(
'Safe minimum' )
719 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
721 log2ui = int( log( ulpinv ) / log( two ) )
722 rtunfl = sqrt( unfl )
723 rtovfl = sqrt( ovfl )
728 iseed2( i ) = iseed( i )
733 DO 310 jsize = 1, nsizes
736 lgn = int( log( dble( n ) ) / log( two ) )
741 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
742 liwedc = 6 + 6*n + 5*n*lgn
747 nap = ( n*( n+1 ) ) / 2
748 aninv = one / dble(
max( 1, n ) )
750 IF( nsizes.NE.1 )
THEN
751 mtypes =
min( maxtyp, ntypes )
753 mtypes =
min( maxtyp+1, ntypes )
756 DO 300 jtype = 1, mtypes
757 IF( .NOT.dotype( jtype ) )
763 ioldsd( j ) = iseed( j )
782 IF( mtypes.GT.maxtyp )
785 itype = ktype( jtype )
786 imode = kmode( jtype )
790 GO TO ( 40, 50, 60 )kmagn( jtype )
797 anorm = ( rtovfl*ulp )*aninv
801 anorm = rtunfl*n*ulpinv
806 CALL dlaset(
'Full', lda, n, zero, zero, a, lda )
808 IF( jtype.LE.15 )
THEN
811 cond = ulpinv*aninv / ten
818 IF( itype.EQ.1 )
THEN
821 ELSE IF( itype.EQ.2 )
THEN
829 ELSE IF( itype.EQ.4 )
THEN
833 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
834 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
838 ELSE IF( itype.EQ.5 )
THEN
842 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
843 $ anorm, n, n,
'N', a, lda, work( n+1 ),
846 ELSE IF( itype.EQ.7 )
THEN
850 CALL dlatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
851 $
'T',
'N', work( n+1 ), 1, one,
852 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
853 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
855 ELSE IF( itype.EQ.8 )
THEN
859 CALL dlatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
860 $
'T',
'N', work( n+1 ), 1, one,
861 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
862 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
864 ELSE IF( itype.EQ.9 )
THEN
868 CALL dlatms( n, n,
'S', iseed,
'P', work, imode, cond,
869 $ anorm, n, n,
'N', a, lda, work( n+1 ),
872 ELSE IF( itype.EQ.10 )
THEN
876 CALL dlatms( n, n,
'S', iseed,
'P', work, imode, cond,
877 $ anorm, 1, 1,
'N', a, lda, work( n+1 ),
880 temp1 = abs( a( i-1, i ) ) /
881 $ sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
882 IF( temp1.GT.half )
THEN
883 a( i-1, i ) = half*sqrt( abs( a( i-1, i-1 )*a( i,
885 a( i, i-1 ) = a( i-1, i )
894 IF( iinfo.NE.0 )
THEN
895 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
906 CALL dlacpy(
'U', n, n, a, lda, v, ldu )
909 CALL dsytrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
912 IF( iinfo.NE.0 )
THEN
913 WRITE( nounit, fmt = 9999 )
'DSYTRD(U)', iinfo, n, jtype,
916 IF( iinfo.LT.0 )
THEN
924 CALL dlacpy(
'U', n, n, v, ldu, u, ldu )
927 CALL dorgtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
928 IF( iinfo.NE.0 )
THEN
929 WRITE( nounit, fmt = 9999 )
'DORGTR(U)', iinfo, n, jtype,
932 IF( iinfo.LT.0 )
THEN
942 CALL dsyt21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
943 $ ldu, tau, work, result( 1 ) )
944 CALL dsyt21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
945 $ ldu, tau, work, result( 2 ) )
950 CALL dlacpy(
'L', n, n, a, lda, v, ldu )
953 CALL dsytrd(
'L', n, v, ldu, sd, se, tau, work, lwork,
956 IF( iinfo.NE.0 )
THEN
957 WRITE( nounit, fmt = 9999 )
'DSYTRD(L)', iinfo, n, jtype,
960 IF( iinfo.LT.0 )
THEN
968 CALL dlacpy(
'L', n, n, v, ldu, u, ldu )
971 CALL dorgtr(
'L', n, u, ldu, tau, work, lwork, iinfo )
972 IF( iinfo.NE.0 )
THEN
973 WRITE( nounit, fmt = 9999 )
'DORGTR(L)', iinfo, n, jtype,
976 IF( iinfo.LT.0 )
THEN
984 CALL dsyt21( 2,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
985 $ ldu, tau, work, result( 3 ) )
986 CALL dsyt21( 3,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
987 $ ldu, tau, work, result( 4 ) )
995 ap( i ) = a( jr, jc )
1001 CALL dcopy( nap, ap, 1, vp, 1 )
1004 CALL dsptrd( 'u
', N, VP, SD, SE, TAU, IINFO )
1006.NE.
IF( IINFO0 ) THEN
1007 WRITE( NOUNIT, FMT = 9999 )'dsptrd(u)
', IINFO, N, JTYPE,
1010.LT.
IF( IINFO0 ) THEN
1013 RESULT( 5 ) = ULPINV
1019 CALL DOPGTR( 'u
', N, VP, TAU, U, LDU, WORK, IINFO )
1020.NE.
IF( IINFO0 ) THEN
1021 WRITE( NOUNIT, FMT = 9999 )'dopgtr(u)
', IINFO, N, JTYPE,
1024.LT.
IF( IINFO0 ) THEN
1027 RESULT( 6 ) = ULPINV
1034 CALL DSPT21( 2, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1035 $ WORK, RESULT( 5 ) )
1036 CALL DSPT21( 3, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1037 $ WORK, RESULT( 6 ) )
1045 AP( I ) = A( JR, JC )
1051 CALL DCOPY( NAP, AP, 1, VP, 1 )
1054 CALL DSPTRD( 'l
', N, VP, SD, SE, TAU, IINFO )
1056.NE.
IF( IINFO0 ) THEN
1057 WRITE( NOUNIT, FMT = 9999 )'dsptrd(l)
', IINFO, N, JTYPE,
1060.LT.
IF( IINFO0 ) THEN
1063 RESULT( 7 ) = ULPINV
1069 CALL DOPGTR( 'l
', N, VP, TAU, U, LDU, WORK, IINFO )
1070.NE.
IF( IINFO0 ) THEN
1071 WRITE( NOUNIT, FMT = 9999 )'dopgtr(l)
', IINFO, N, JTYPE,
1074.LT.
IF( IINFO0 ) THEN
1077 RESULT( 8 ) = ULPINV
1082 CALL DSPT21( 2, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1083 $ WORK, RESULT( 7 ) )
1084 CALL DSPT21( 3, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1085 $ WORK, RESULT( 8 ) )
1091 CALL DCOPY( N, SD, 1, D1, 1 )
1093 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1094 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1097 CALL DSTEQR( 'v
', N, D1, WORK, Z, LDU, WORK( N+1 ), IINFO )
1098.NE.
IF( IINFO0 ) THEN
1099 WRITE( NOUNIT, FMT = 9999 )'dsteqr(v)
', IINFO, N, JTYPE,
1102.LT.
IF( IINFO0 ) THEN
1105 RESULT( 9 ) = ULPINV
1112 CALL DCOPY( N, SD, 1, D2, 1 )
1114 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1117 CALL DSTEQR( 'n
', N, D2, WORK, WORK( N+1 ), LDU,
1118 $ WORK( N+1 ), IINFO )
1119.NE.
IF( IINFO0 ) THEN
1120 WRITE( NOUNIT, FMT = 9999 )'dsteqr(n)
', IINFO, N, JTYPE,
1123.LT.
IF( IINFO0 ) THEN
1126 RESULT( 11 ) = ULPINV
1133 CALL DCOPY( N, SD, 1, D3, 1 )
1135 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1138 CALL DSTERF( N, D3, WORK, IINFO )
1139.NE.
IF( IINFO0 ) THEN
1140 WRITE( NOUNIT, FMT = 9999 )'dsterf', IINFO, N, JTYPE,
1143.LT.
IF( IINFO0 ) THEN
1146 RESULT( 12 ) = ULPINV
1153 CALL DSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK,
1164 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1165 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1166 TEMP3 = MAX( TEMP3, ABS( D1( J ) ), ABS( D3( J ) ) )
1167 TEMP4 = MAX( TEMP4, ABS( D1( J )-D3( J ) ) )
1170 RESULT( 11 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1171 RESULT( 12 ) = TEMP4 / MAX( UNFL, ULP*MAX( TEMP3, TEMP4 ) )
1177 TEMP1 = THRESH*( HALF-ULP )
1179 DO 160 J = 0, LOG2UI
1180 CALL DSTECH( N, SD, SE, D1, TEMP1, WORK, IINFO )
1187 RESULT( 13 ) = TEMP1
1192.GT.
IF( JTYPE15 ) THEN
1196 CALL DCOPY( N, SD, 1, D4, 1 )
1198 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1199 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1202 CALL DPTEQR( 'v
', N, D4, WORK, Z, LDU, WORK( N+1 ),
1204.NE.
IF( IINFO0 ) THEN
1205 WRITE( NOUNIT, FMT = 9999 )'dpteqr(v)
', IINFO, N,
1208.LT.
IF( IINFO0 ) THEN
1211 RESULT( 14 ) = ULPINV
1218 CALL DSTT21( N, 0, SD, SE, D4, DUMMA, Z, LDU, WORK,
1223 CALL DCOPY( N, SD, 1, D5, 1 )
1225 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1228 CALL DPTEQR( 'n
', N, D5, WORK, Z, LDU, WORK( N+1 ),
1230.NE.
IF( IINFO0 ) THEN
1231 WRITE( NOUNIT, FMT = 9999 )'dpteqr(n)
', IINFO, N,
1234.LT.
IF( IINFO0 ) THEN
1237 RESULT( 16 ) = ULPINV
1247 TEMP1 = MAX( TEMP1, ABS( D4( J ) ), ABS( D5( J ) ) )
1248 TEMP2 = MAX( TEMP2, ABS( D4( J )-D5( J ) ) )
1251 RESULT( 16 ) = TEMP2 / MAX( UNFL,
1252 $ HUN*ULP*MAX( TEMP1, TEMP2 ) )
1268.EQ.
IF( JTYPE21 ) THEN
1270 ABSTOL = UNFL + UNFL
1271 CALL DSTEBZ( 'a
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1272 $ M, NSPLIT, WR, IWORK( 1 ), IWORK( N+1 ),
1273 $ WORK, IWORK( 2*N+1 ), IINFO )
1274.NE.
IF( IINFO0 ) THEN
1275 WRITE( NOUNIT, FMT = 9999 )'dstebz(a,rel)
', IINFO, N,
1278.LT.
IF( IINFO0 ) THEN
1281 RESULT( 17 ) = ULPINV
1288 TEMP2 = TWO*( TWO*N-ONE )*ULP*( ONE+EIGHT*HALF**2 ) /
1293 TEMP1 = MAX( TEMP1, ABS( D4( J )-WR( N-J+1 ) ) /
1294 $ ( ABSTOL+ABS( D4( J ) ) ) )
1297 RESULT( 17 ) = TEMP1 / TEMP2
1305 ABSTOL = UNFL + UNFL
1306 CALL DSTEBZ( 'a
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE, M,
1307 $ NSPLIT, WA1, IWORK( 1 ), IWORK( N+1 ), WORK,
1308 $ IWORK( 2*N+1 ), IINFO )
1309.NE.
IF( IINFO0 ) THEN
1310 WRITE( NOUNIT, FMT = 9999 )'dstebz(a)
', IINFO, N, JTYPE,
1313.LT.
IF( IINFO0 ) THEN
1316 RESULT( 18 ) = ULPINV
1326 TEMP1 = MAX( TEMP1, ABS( D3( J ) ), ABS( WA1( J ) ) )
1327 TEMP2 = MAX( TEMP2, ABS( D3( J )-WA1( J ) ) )
1330 RESULT( 18 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1340 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1341 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1349 CALL DSTEBZ( 'i
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1350 $ M2, NSPLIT, WA2, IWORK( 1 ), IWORK( N+1 ),
1351 $ WORK, IWORK( 2*N+1 ), IINFO )
1352.NE.
IF( IINFO0 ) THEN
1353 WRITE( NOUNIT, FMT = 9999 )'dstebz(i)
', IINFO, N, JTYPE,
1356.LT.
IF( IINFO0 ) THEN
1359 RESULT( 19 ) = ULPINV
1369 VL = WA1( IL ) - MAX( HALF*( WA1( IL )-WA1( IL-1 ) ),
1370 $ ULP*ANORM, TWO*RTUNFL )
1372 VL = WA1( 1 ) - MAX( HALF*( WA1( N )-WA1( 1 ) ),
1373 $ ULP*ANORM, TWO*RTUNFL )
1376 VU = WA1( IU ) + MAX( HALF*( WA1( IU+1 )-WA1( IU ) ),
1377 $ ULP*ANORM, TWO*RTUNFL )
1379 VU = WA1( N ) + MAX( HALF*( WA1( N )-WA1( 1 ) ),
1380 $ ULP*ANORM, TWO*RTUNFL )
1387 CALL DSTEBZ( 'v
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1388 $ M3, NSPLIT, WA3, IWORK( 1 ), IWORK( N+1 ),
1389 $ WORK, IWORK( 2*N+1 ), IINFO )
1390.NE.
IF( IINFO0 ) THEN
1391 WRITE( NOUNIT, FMT = 9999 )'dstebz(v)
', IINFO, N, JTYPE,
1394.LT.
IF( IINFO0 ) THEN
1397 RESULT( 19 ) = ULPINV
1402.EQ..AND..NE.
IF( M30 N0 ) THEN
1403 RESULT( 19 ) = ULPINV
1409 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1410 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1412 TEMP3 = MAX( ABS( WA1( N ) ), ABS( WA1( 1 ) ) )
1417 RESULT( 19 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, TEMP3*ULP )
1424 CALL DSTEBZ( 'a
', 'b
', N, VL, VU, IL, IU, ABSTOL, SD, SE, M,
1425 $ NSPLIT, WA1, IWORK( 1 ), IWORK( N+1 ), WORK,
1426 $ IWORK( 2*N+1 ), IINFO )
1427.NE.
IF( IINFO0 ) THEN
1428 WRITE( NOUNIT, FMT = 9999 )'dstebz(a,b)
', IINFO, N,
1431.LT.
IF( IINFO0 ) THEN
1434 RESULT( 20 ) = ULPINV
1435 RESULT( 21 ) = ULPINV
1440 CALL DSTEIN( N, SD, SE, M, WA1, IWORK( 1 ), IWORK( N+1 ), Z,
1441 $ LDU, WORK, IWORK( 2*N+1 ), IWORK( 3*N+1 ),
1443.NE.
IF( IINFO0 ) THEN
1444 WRITE( NOUNIT, FMT = 9999 )'dstein', IINFO, N, JTYPE,
1447.LT.
IF( IINFO0 ) THEN
1450 RESULT( 20 ) = ULPINV
1451 RESULT( 21 ) = ULPINV
1458 CALL DSTT21( N, 0, SD, SE, WA1, DUMMA, Z, LDU, WORK,
1465 CALL DCOPY( N, SD, 1, D1, 1 )
1467 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1468 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1471 CALL DSTEDC( 'i
', N, D1, WORK, Z, LDU, WORK( N+1 ), LWEDC-N,
1472 $ IWORK, LIWEDC, IINFO )
1473.NE.
IF( IINFO0 ) THEN
1474 WRITE( NOUNIT, FMT = 9999 )'dstedc(i)
', IINFO, N, JTYPE,
1477.LT.
IF( IINFO0 ) THEN
1480 RESULT( 22 ) = ULPINV
1487 CALL DSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK,
1494 CALL DCOPY( N, SD, 1, D1, 1 )
1496 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1497 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1500 CALL DSTEDC( 'v
', N, D1, WORK, Z, LDU, WORK( N+1 ), LWEDC-N,
1501 $ IWORK, LIWEDC, IINFO )
1502.NE.
IF( IINFO0 ) THEN
1503 WRITE( NOUNIT, FMT = 9999 )'dstedc(v)
', IINFO, N, JTYPE,
1506.LT.
IF( IINFO0 ) THEN
1509 RESULT( 24 ) = ULPINV
1516 CALL DSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK,
1523 CALL DCOPY( N, SD, 1, D2, 1 )
1525 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1526 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1529 CALL DSTEDC( 'n
', N, D2, WORK, Z, LDU, WORK( N+1 ), LWEDC-N,
1530 $ IWORK, LIWEDC, IINFO )
1531.NE.
IF( IINFO0 ) THEN
1532 WRITE( NOUNIT, FMT = 9999 )'dstedc(n)
', IINFO, N, JTYPE,
1535.LT.
IF( IINFO0 ) THEN
1538 RESULT( 26 ) = ULPINV
1549 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1550 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1553 RESULT( 26 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1557 IF( ILAENV( 10, 'dstemr', 'va.EQ..AND.
', 1, 0, 0, 0 )1
1558 $ ILAENV( 11, 'dstemr', 'va.EQ.
', 1, 0, 0, 0 )1 ) THEN
1569.EQ..AND.
IF( JTYPE21 SREL ) THEN
1571 ABSTOL = UNFL + UNFL
1572 CALL DSTEMR( 'v
', 'a
', N, SD, SE, VL, VU, IL, IU,
1573 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1574 $ WORK, LWORK, IWORK( 2*N+1 ), LWORK-2*N,
1576.NE.
IF( IINFO0 ) THEN
1577 WRITE( NOUNIT, FMT = 9999 )'dstemr(v,a,rel)
',
1578 $ IINFO, N, JTYPE, IOLDSD
1580.LT.
IF( IINFO0 ) THEN
1583 RESULT( 27 ) = ULPINV
1590 TEMP2 = TWO*( TWO*N-ONE )*ULP*( ONE+EIGHT*HALF**2 ) /
1595 TEMP1 = MAX( TEMP1, ABS( D4( J )-WR( N-J+1 ) ) /
1596 $ ( ABSTOL+ABS( D4( J ) ) ) )
1599 RESULT( 27 ) = TEMP1 / TEMP2
1601 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1602 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1611 ABSTOL = UNFL + UNFL
1612 CALL DSTEMR( 'v
', 'i
', N, SD, SE, VL, VU, IL, IU,
1613 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1614 $ WORK, LWORK, IWORK( 2*N+1 ),
1615 $ LWORK-2*N, IINFO )
1617.NE.
IF( IINFO0 ) THEN
1618 WRITE( NOUNIT, FMT = 9999 )'dstemr(v,i,rel)
',
1619 $ IINFO, N, JTYPE, IOLDSD
1621.LT.
IF( IINFO0 ) THEN
1624 RESULT( 28 ) = ULPINV
1632 TEMP2 = TWO*( TWO*N-ONE )*ULP*
1633 $ ( ONE+EIGHT*HALF**2 ) / ( ONE-HALF )**4
1637 TEMP1 = MAX( TEMP1, ABS( WR( J-IL+1 )-D4( N-J+
1638 $ 1 ) ) / ( ABSTOL+ABS( WR( J-IL+1 ) ) ) )
1641 RESULT( 28 ) = TEMP1 / TEMP2
1654 CALL DCOPY( N, SD, 1, D5, 1 )
1656 $ CALL DCOPY( N-1, SE, 1, WORK, 1 )
1657 CALL DLASET( 'full
', N, N, ZERO, ONE, Z, LDU )
1661 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1662 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1668 CALL DSTEMR( 'v',
'I', n, d5, work, vl, vu, il, iu,
1669 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1670 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1671 $ liwork-2*n, iinfo )
1672 IF( iinfo.NE.0 )
THEN
1673 WRITE( nounit, fmt = 9999 )
'DSTEMR(V,I)', iinfo,
1676 IF( iinfo.LT.0 )
THEN
1679 result( 29 ) = ulpinv
1686 CALL dstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1693 CALL dcopy( n, sd, 1, d5, 1 )
1695 $
CALL dcopy( n-1, se, 1, work, 1 )
1698 CALL dstemr(
'N',
'I', n, d5, work, vl, vu, il, iu,
1699 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1700 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1701 $ liwork-2*n, iinfo )
1702 IF( iinfo.NE.0 )
THEN
1703 WRITE( nounit, fmt = 9999 )
'DSTEMR(N,I)', iinfo,
1706 IF( iinfo.LT.0 )
THEN
1709 result( 31 ) = ulpinv
1719 DO 240 j = 1, iu - il + 1
1720 temp1 =
max( temp1, abs( d1( j ) ),
1722 temp2 =
max( temp2, abs( d1( j )-d2( j ) ) )
1725 result( 31 ) = temp2 /
max( unfl,
1726 $ ulp*
max( temp1, temp2 ) )
1733 CALL dcopy( n, sd, 1, d5, 1 )
1735 $
CALL dcopy( n-1, se, 1, work, 1 )
1736 CALL dlaset(
'Full', n, n, zero, one, z, ldu )
1742 vl = d2( il ) -
max( half*
1743 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1746 vl = d2( 1 ) -
max( half*( d2( n )-d2( 1 ) ),
1747 $ ulp*anorm, two*rtunfl )
1750 vu = d2( iu ) +
max( half*
1751 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1754 vu = d2( n ) +
max( half*( d2( n )-d2( 1 ) ),
1755 $ ulp*anorm, two*rtunfl )
1762 CALL dstemr(
'V',
'V', n, d5, work, vl, vu, il, iu,
1763 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1764 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1765 $ liwork-2*n, iinfo )
1766 IF( iinfo.NE.0 )
THEN
1767 WRITE( nounit, fmt = 9999 )
'DSTEMR(V,V)', iinfo,
1770 IF( iinfo.LT.0 )
THEN
1773 result( 32 ) = ulpinv
1780 CALL dstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1787 CALL dcopy( n, sd, 1, d5, 1 )
1789 $
CALL dcopy( n-1, se, 1, work, 1 )
1792 CALL dstemr(
'N',
'V', n, d5, work, vl, vu, il, iu,
1793 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1794 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1795 $ liwork-2*n, iinfo )
1796 IF( iinfo.NE.0 )
THEN
1797 WRITE( nounit, fmt = 9999 )
'DSTEMR(N,V)', iinfo,
1800 IF( iinfo.LT.0 )
THEN
1803 result( 34 ) = ulpinv
1813 DO 250 j = 1, iu - il + 1
1814 temp1 =
max( temp1, abs( d1( j ) ),
1816 temp2 =
max( temp2, abs( d1( j )-d2( j ) ) )
1819 result( 34 ) = temp2 /
max( unfl,
1820 $ ulp*
max( temp1, temp2 ) )
1835 CALL dcopy( n, sd, 1, d5, 1 )
1837 $
CALL dcopy( n-1, se, 1, work, 1 )
1841 CALL dstemr(
'V',
'A', n, d5, work, vl, vu, il, iu,
1842 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1843 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1844 $ liwork-2*n, iinfo )
1845 IF( iinfo.NE.0 )
THEN
1846 WRITE( nounit, fmt = 9999 )
'DSTEMR(V,A)', iinfo, n,
1849 IF( iinfo.LT.0 )
THEN
1852 result( 35 ) = ulpinv
1859 CALL dstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1866 CALL dcopy( n, sd, 1, d5, 1 )
1868 $
CALL dcopy( n-1, se, 1, work, 1 )
1871 CALL dstemr(
'N',
'A', n, d5, work, vl, vu, il, iu,
1872 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1873 $ work( n+1 ), lwork-n, iwork( 2*n+1 ),
1874 $ liwork-2*n, iinfo )
1875 IF( iinfo.NE.0 )
THEN
1876 WRITE( nounit, fmt = 9999 )
'DSTEMR(N,A)', iinfo, n,
1879 IF( iinfo.LT.0 )
THEN
1893 temp1 =
max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1894 temp2 =
max( temp2, abs( d1( j )-d2( j ) ) )
1897 result( 37 ) = temp2 /
max( unfl,
1898 $ ulp*
max( temp1, temp2 ) )
1902 ntestt = ntestt + ntest
1909 DO 290 jr = 1, ntest
1910 IF( result( jr ).GE.thresh )
THEN
1915 IF( nerrs.EQ.0 )
THEN
1916 WRITE( nounit, fmt = 9998 )
'DST'
1917 WRITE( nounit, fmt = 9997 )
1918 WRITE( nounit, fmt = 9996 )
1919 WRITE( nounit, fmt = 9995 )
'Symmetric'
1920 WRITE( nounit, fmt = 9994 )
1924 WRITE( nounit, fmt = 9988 )
1927 WRITE( nounit, fmt = 9990 )n, ioldsd, jtype, jr,
1936 CALL dlasum(
'DST', nounit, nerrs, ntestt )
1939 9999
FORMAT(
' DCHKST: ', a,
' returned INFO=', i6,
'.', / 9x,
'N=',
1940 $ i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
1942 9998
FORMAT( / 1x, a3,
' -- Real Symmetric eigenvalue problem' )
1943 9997
FORMAT(
' Matrix types (see DCHKST for details): ' )
1945 9996
FORMAT( /
' Special Matrices:',
1946 $ /
' 1=Zero matrix. ',
1947 $
' 5=Diagonal: clustered entries.',
1948 $ /
' 2=Identity matrix. ',
1949 $
' 6=Diagonal: large, evenly spaced.',
1950 $ /
' 3=Diagonal: evenly spaced entries. ',
1951 $
' 7=Diagonal: small, evenly spaced.',
1952 $ /
' 4=Diagonal: geometr. spaced entries.' )
1953 9995
FORMAT(
' Dense ', a,
' Matrices:',
1954 $ /
' 8=Evenly spaced eigenvals. ',
1955 $
' 12=Small, evenly spaced eigenvals.',
1956 $ /
' 9=Geometrically spaced eigenvals. ',
1957 $
' 13=Matrix with random O(1) entries.',
1958 $ /
' 10=Clustered eigenvalues. ',
1959 $
' 14=Matrix with large random entries.',
1960 $ /
' 11=Large, evenly spaced eigenvals. ',
1961 $
' 15=Matrix with small random entries.' )
1962 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
1963 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
1964 $ /
' 18=Positive definite, clustered eigenvalues',
1965 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
1966 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
1967 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
1968 $
' spaced eigenvalues' )
1970 9990
FORMAT(
' N=', i5,
', seed=', 4( i4,
',' ),
' type ', i2,
1971 $
', test(', i2,
')=', g10.3 )
1973 9988
FORMAT( /
'Test performed: see DCHKST for details.', / )