620 SUBROUTINE zchkst2stg( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
621 $ NOUNIT, A, LDA, AP, SD, SE, D1, D2, D3, D4, D5,
622 $ WA1, WA2, WA3, WR, U, LDU, V, VP, TAU, Z, WORK,
623 $ LWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT,
631 INTEGER INFO, LDA, LDU, LIWORK, LRWORK, LWORK, NOUNIT,
633 DOUBLE PRECISION THRESH
637 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
638 DOUBLE PRECISION D1( * ), D2( * ), D3( * ), D4( * ), D5( * ),
639 $ RESULT( * ), RWORK( * ), SD( * ), SE( * ),
640 $ wa1( * ), wa2( * ), wa3( * ), wr( * )
641 COMPLEX*16 A( LDA, * ), AP( * ), ( * ), U( LDU, * ),
642 $ v( ldu, * ), vp( * ), work( * ), z( ldu, * )
648 DOUBLE PRECISION ZERO, ONE, TWO, EIGHT, TEN, HUN
649 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
650 $ eight = 8.0d0, ten = 10.0d0, hun = 100.0d0 )
651 COMPLEX*16 CZERO, CONE
652 parameter( czero = ( 0.0d+0, 0.0d+0 ),
653 $ cone = ( 1.0d+0, 0.0d+0 ) )
654 DOUBLE PRECISION HALF
655 parameter( half = one / two )
657 PARAMETER ( MAXTYP = 21 )
659 parameter( crange = .false. )
661 parameter( crel = .false. )
664 LOGICAL BADNN, TRYRAC
665 INTEGER I, IINFO, IL, IMODE, INDE, INDRWK, ITEMP,
666 $ ITYPE, IU, J, JC, JR, JSIZE, JTYPE, LGN,
667 $ LIWEDC, LOG2UI, LRWEDC, LWEDC, M, M2, M3,
668 $ mtypes, n, nap, nblock, nerrs, nmats, nmax,
669 $ nsplit, ntest, ntestt, lh, lw
670 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
671 $ RTUNFL, TEMP1, TEMP2, TEMP3, TEMP4, ULP,
675 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
676 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
678 DOUBLE PRECISION DUMMA( 1 )
682 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
683 EXTERNAL ILAENV, DLAMCH, , DSXT1
693 INTRINSIC abs, dble, dconjg, int, log,
max,
min, sqrt
696 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
697 $ 8, 8, 9, 9, 9, 9, 9, 10 /
698 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
699 $ 2, 3, 1, 1, 1, 2, 3, 1 /
700 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
701 $ 0, 0, 4, 3, 1, 4, 4, 3 /
719 nmax =
max( nmax, nn( j ) )
724 nblock = ilaenv( 1,
'ZHETRD',
'L', nmax, -1, -1, -1 )
725 nblock =
min( nmax,
max( 1, nblock ) )
729 IF( nsizes.LT.0 )
THEN
731 ELSE IF( badnn )
THEN
733 ELSE IF( ntypes.LT.0 )
THEN
735 ELSE IF( lda.LT.nmax )
THEN
737 ELSE IF( ldu.LT.nmax )
THEN
739 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
744 CALL xerbla(
'ZCHKST2STG', -info )
750 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
755 unfl = dlamch(
'Safe minimum' )
758 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
760 log2ui = int( log( ulpinv ) / log( two ) )
761 rtunfl = sqrt( unfl )
762 rtovfl = sqrt( ovfl )
767 iseed2( i ) = iseed( i )
772 DO 310 jsize = 1, nsizes
775 lgn = int( log( dble( n ) ) / log( two ) )
780 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
781 lrwedc = 1 + 3*n + 2*n*lgn + 4*n**2
782 liwedc = 6 + 6*n + 5*n*lgn
788 nap = ( n*( n+1 ) ) / 2
789 aninv = one / dble(
max( 1, n ) )
791 IF( nsizes.NE.1 )
THEN
792 mtypes =
min( maxtyp, ntypes )
794 mtypes =
min( maxtyp+1, ntypes )
797 DO 300 jtype = 1, mtypes
798 IF( .NOT.dotype( jtype ) )
804 ioldsd( j ) = iseed( j )
823 IF( mtypes.GT.maxtyp )
826 itype = ktype( jtype )
827 imode = kmode( jtype )
831 GO TO ( 40, 50, 60 )kmagn( jtype )
838 anorm = ( rtovfl*ulp )*aninv
842 anorm = rtunfl*n*ulpinv
847 CALL zlaset(
'Full', lda, n, czero, czero, a, lda )
849 IF( jtype.LE.15 )
THEN
852 cond = ulpinv*aninv / ten
859 IF( itype.EQ.1 )
THEN
862 ELSE IF( itype.EQ.2 )
THEN
870 ELSE IF( itype.EQ.4 )
THEN
874 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
875 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
878 ELSE IF( itype.EQ.5 )
THEN
882 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
883 $ anorm, n, n,
'N', a, lda, work, iinfo )
885 ELSE IF( itype.EQ.7 )
THEN
889 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
890 $
'T',
'N', work( n+1 ), 1, one,
891 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
892 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
894 ELSE IF( itype.EQ.8 )
THEN
898 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
899 $
'T',
'N', work( n+1 ), 1, one,
900 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
901 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
903 ELSE IF( itype.EQ.9 )
THEN
907 CALL zlatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
908 $ anorm, n, n,
'N', a, lda, work, iinfo )
910 ELSE IF( itype.EQ.10 )
THEN
914 CALL zlatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
915 $ anorm, 1, 1,
'N', a, lda, work, iinfo )
917 temp1 = abs( a( i-1, i ) )
918 temp2 = sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
919 IF( temp1.GT.half*temp2 )
THEN
920 a( i-1, i ) = a( i-1, i )*
921 $ ( half*temp2 / ( unfl+temp1 ) )
922 a( i, i-1 ) = dconjg( a( i-1, i ) )
931 IF( iinfo.NE.0 )
THEN
932 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
943 CALL zlacpy(
'U', n, n, a, lda, v, ldu )
946 CALL zhetrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
949 IF( iinfo.NE.0 )
THEN
950 WRITE( nounit, fmt = 9999 )
'ZHETRD(U)', iinfo, n, jtype,
953 IF( iinfo.LT.0 )
THEN
961 CALL zlacpy(
'U', n, n, v, ldu, u, ldu )
964 CALL zungtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
965 IF( iinfo.NE.0 )
THEN
966 WRITE( nounit, fmt = 9999 )
'ZUNGTR(U)', iinfo, n, jtype,
969 IF( iinfo.LT.0 )
THEN
979 CALL zhet21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
980 $ ldu, tau, work, rwork, result( 1 )
981 CALL zhet21( 3, 'upper
', N, 1, A, LDA, SD, SE, U, LDU, V,
982 $ LDU, TAU, WORK, RWORK, RESULT( 2 ) )
991 CALL DCOPY( N, SD, 1, D1, 1 )
993 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
995 CALL ZSTEQR( 'n
', N, D1, RWORK, WORK, LDU, RWORK( N+1 ),
997.NE.
IF( IINFO0 ) THEN
998 WRITE( NOUNIT, FMT = 9999 )'zsteqr(n)
', IINFO, N, JTYPE,
1001.LT.
IF( IINFO0 ) THEN
1004 RESULT( 3 ) = ULPINV
1014 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SD, N )
1015 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SE, N )
1016 CALL ZLACPY( 'u
', N, N, A, LDA, V, LDU )
1019 CALL ZHETRD_2STAGE( 'n
', "U", N, V, LDU, SD, SE, TAU,
1020 $ WORK, LH, WORK( LH+1 ), LW, IINFO )
1024 CALL DCOPY( N, SD, 1, D2, 1 )
1026 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1029 CALL ZSTEQR( 'n
', N, D2, RWORK, WORK, LDU, RWORK( N+1 ),
1031.NE.
IF( IINFO0 ) THEN
1032 WRITE( NOUNIT, FMT = 9999 )'zsteqr(n)
', IINFO, N, JTYPE,
1035.LT.
IF( IINFO0 ) THEN
1038 RESULT( 3 ) = ULPINV
1048 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SD, N )
1049 CALL DLASET( 'full
', N, 1, ZERO, ZERO, SE, N )
1050 CALL ZLACPY( 'l
', N, N, A, LDA, V, LDU )
1051 CALL ZHETRD_2STAGE( 'n
', "L", N, V, LDU, SD, SE, TAU,
1052 $ WORK, LH, WORK( LH+1 ), LW, IINFO )
1056 CALL DCOPY( N, SD, 1, D3, 1 )
1058 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1061 CALL ZSTEQR( 'n
', N, D3, RWORK, WORK, LDU, RWORK( N+1 ),
1063.NE.
IF( IINFO0 ) THEN
1064 WRITE( NOUNIT, FMT = 9999 )'zsteqr(n)
', IINFO, N, JTYPE,
1067.LT.
IF( IINFO0 ) THEN
1070 RESULT( 4 ) = ULPINV
1085 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1086 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1087 TEMP3 = MAX( TEMP3, ABS( D1( J ) ), ABS( D3( J ) ) )
1088 TEMP4 = MAX( TEMP4, ABS( D1( J )-D3( J ) ) )
1091 RESULT( 3 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1092 RESULT( 4 ) = TEMP4 / MAX( UNFL, ULP*MAX( TEMP3, TEMP4 ) )
1100 AP( I ) = A( JR, JC )
1106 CALL ZCOPY( NAP, AP, 1, VP, 1 )
1109 CALL ZHPTRD( 'u
', N, VP, SD, SE, TAU, IINFO )
1111.NE.
IF( IINFO0 ) THEN
1112 WRITE( NOUNIT, FMT = 9999 )'zhptrd(u)
', IINFO, N, JTYPE,
1115.LT.
IF( IINFO0 ) THEN
1118 RESULT( 5 ) = ULPINV
1124 CALL ZUPGTR( 'u
', N, VP, TAU, U, LDU, WORK, IINFO )
1125.NE.
IF( IINFO0 ) THEN
1126 WRITE( NOUNIT, FMT = 9999 )'zupgtr(u)
', IINFO, N, JTYPE,
1129.LT.
IF( IINFO0 ) THEN
1132 RESULT( 6 ) = ULPINV
1139 CALL ZHPT21( 2, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1140 $ WORK, RWORK, RESULT( 5 ) )
1141 CALL ZHPT21( 3, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1142 $ WORK, RWORK, RESULT( 6 ) )
1150 AP( I ) = A( JR, JC )
1156 CALL ZCOPY( NAP, AP, 1, VP, 1 )
1159 CALL ZHPTRD( 'l
', N, VP, SD, SE, TAU, IINFO )
1161.NE.
IF( IINFO0 ) THEN
1162 WRITE( NOUNIT, FMT = 9999 )'zhptrd(l)
', IINFO, N, JTYPE,
1165.LT.
IF( IINFO0 ) THEN
1168 RESULT( 7 ) = ULPINV
1174 CALL ZUPGTR( 'l
', N, VP, TAU, U, LDU, WORK, IINFO )
1175.NE.
IF( IINFO0 ) THEN
1176 WRITE( NOUNIT, FMT = 9999 )'zupgtr(l)
', IINFO, N, JTYPE,
1179.LT.
IF( IINFO0 ) THEN
1182 RESULT( 8 ) = ULPINV
1187 CALL ZHPT21( 2, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1188 $ WORK, RWORK, RESULT( 7 ) )
1189 CALL ZHPT21( 3, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1190 $ WORK, RWORK, RESULT( 8 ) )
1196 CALL DCOPY( N, SD, 1, D1, 1 )
1198 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1199 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1202 CALL ZSTEQR( 'v
', N, D1, RWORK, Z, LDU, RWORK( N+1 ),
1204.NE.
IF( IINFO0 ) THEN
1205 WRITE( NOUNIT, FMT = 9999 )'zsteqr(v)
', IINFO, N, JTYPE,
1208.LT.
IF( IINFO0 ) THEN
1211 RESULT( 9 ) = ULPINV
1218 CALL DCOPY( N, SD, 1, D2, 1 )
1220 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1223 CALL ZSTEQR( 'n
', N, D2, RWORK, WORK, LDU, RWORK( N+1 ),
1225.NE.
IF( IINFO0 ) THEN
1226 WRITE( NOUNIT, FMT = 9999 )'zsteqr(n)
', IINFO, N, JTYPE,
1229.LT.
IF( IINFO0 ) THEN
1232 RESULT( 11 ) = ULPINV
1239 CALL DCOPY( N, SD, 1, D3, 1 )
1241 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1244 CALL DSTERF( N, D3, RWORK, IINFO )
1245.NE.
IF( IINFO0 ) THEN
1246 WRITE( NOUNIT, FMT = 9999 )'dsterf', IINFO, N, JTYPE,
1249.LT.
IF( IINFO0 ) THEN
1252 RESULT( 12 ) = ULPINV
1259 CALL ZSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1270 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1271 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1272 TEMP3 = MAX( TEMP3, ABS( D1( J ) ), ABS( D3( J ) ) )
1273 TEMP4 = MAX( TEMP4, ABS( D1( J )-D3( J ) ) )
1276 RESULT( 11 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1277 RESULT( 12 ) = TEMP4 / MAX( UNFL, ULP*MAX( TEMP3, TEMP4 ) )
1283 TEMP1 = THRESH*( HALF-ULP )
1285 DO 160 J = 0, LOG2UI
1286 CALL DSTECH( N, SD, SE, D1, TEMP1, RWORK, IINFO )
1293 RESULT( 13 ) = TEMP1
1298.GT.
IF( JTYPE15 ) THEN
1302 CALL DCOPY( N, SD, 1, D4, 1 )
1304 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1305 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1308 CALL ZPTEQR( 'v
', N, D4, RWORK, Z, LDU, RWORK( N+1 ),
1310.NE.
IF( IINFO0 ) THEN
1311 WRITE( NOUNIT, FMT = 9999 )'zpteqr(v)
', IINFO, N,
1314.LT.
IF( IINFO0 ) THEN
1317 RESULT( 14 ) = ULPINV
1324 CALL ZSTT21( N, 0, SD, SE, D4, DUMMA, Z, LDU, WORK,
1325 $ RWORK, RESULT( 14 ) )
1329 CALL DCOPY( N, SD, 1, D5, 1 )
1331 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1334 CALL ZPTEQR( 'n
', N, D5, RWORK, Z, LDU, RWORK( N+1 ),
1336.NE.
IF( IINFO0 ) THEN
1337 WRITE( NOUNIT, FMT = 9999 )'zpteqr(n)
', IINFO, N,
1340.LT.
IF( IINFO0 ) THEN
1343 RESULT( 16 ) = ULPINV
1353 TEMP1 = MAX( TEMP1, ABS( D4( J ) ), ABS( D5( J ) ) )
1354 TEMP2 = MAX( TEMP2, ABS( D4( J )-D5( J ) ) )
1357 RESULT( 16 ) = TEMP2 / MAX( UNFL,
1358 $ HUN*ULP*MAX( TEMP1, TEMP2 ) )
1374.EQ.
IF( JTYPE21 ) THEN
1376 ABSTOL = UNFL + UNFL
1377 CALL DSTEBZ( 'a
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1378 $ M, NSPLIT, WR, IWORK( 1 ), IWORK( N+1 ),
1379 $ RWORK, IWORK( 2*N+1 ), IINFO )
1380.NE.
IF( IINFO0 ) THEN
1381 WRITE( NOUNIT, FMT = 9999 )'dstebz(a,rel)
', IINFO, N,
1384.LT.
IF( IINFO0 ) THEN
1387 RESULT( 17 ) = ULPINV
1394 TEMP2 = TWO*( TWO*N-ONE )*ULP*( ONE+EIGHT*HALF**2 ) /
1399 TEMP1 = MAX( TEMP1, ABS( D4( J )-WR( N-J+1 ) ) /
1400 $ ( ABSTOL+ABS( D4( J ) ) ) )
1403 RESULT( 17 ) = TEMP1 / TEMP2
1411 ABSTOL = UNFL + UNFL
1412 CALL DSTEBZ( 'a
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE, M,
1413 $ NSPLIT, WA1, IWORK( 1 ), IWORK( N+1 ), RWORK,
1414 $ IWORK( 2*N+1 ), IINFO )
1415.NE.
IF( IINFO0 ) THEN
1416 WRITE( NOUNIT, FMT = 9999 )'dstebz(a)
', IINFO, N, JTYPE,
1419.LT.
IF( IINFO0 ) THEN
1422 RESULT( 18 ) = ULPINV
1432 TEMP1 = MAX( TEMP1, ABS( D3( J ) ), ABS( WA1( J ) ) )
1433 TEMP2 = MAX( TEMP2, ABS( D3( J )-WA1( J ) ) )
1436 RESULT( 18 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1446 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1447 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1455 CALL DSTEBZ( 'i
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1456 $ M2, NSPLIT, WA2, IWORK( 1 ), IWORK( N+1 ),
1457 $ RWORK, IWORK( 2*N+1 ), IINFO )
1458.NE.
IF( IINFO0 ) THEN
1459 WRITE( NOUNIT, FMT = 9999 )'dstebz(i)
', IINFO, N, JTYPE,
1462.LT.
IF( IINFO0 ) THEN
1465 RESULT( 19 ) = ULPINV
1475 VL = WA1( IL ) - MAX( HALF*( WA1( IL )-WA1( IL-1 ) ),
1476 $ ULP*ANORM, TWO*RTUNFL )
1478 VL = WA1( 1 ) - MAX( HALF*( WA1( N )-WA1( 1 ) ),
1479 $ ULP*ANORM, TWO*RTUNFL )
1482 VU = WA1( IU ) + MAX( HALF*( WA1( IU+1 )-WA1( IU ) ),
1483 $ ULP*ANORM, TWO*RTUNFL )
1485 VU = WA1( N ) + MAX( HALF*( WA1( N )-WA1( 1 ) ),
1486 $ ULP*ANORM, TWO*RTUNFL )
1493 CALL DSTEBZ( 'v
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1494 $ M3, NSPLIT, WA3, IWORK( 1 ), IWORK( N+1 ),
1495 $ RWORK, IWORK( 2*N+1 ), IINFO )
1496.NE.
IF( IINFO0 ) THEN
1497 WRITE( NOUNIT, FMT = 9999 )'dstebz(v)
', IINFO, N, JTYPE,
1500.LT.
IF( IINFO0 ) THEN
1503 RESULT( 19 ) = ULPINV
1508.EQ..AND..NE.
IF( M30 N0 ) THEN
1509 RESULT( 19 ) = ULPINV
1515 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1516 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1518 TEMP3 = MAX( ABS( WA1( N ) ), ABS( WA1( 1 ) ) )
1523 RESULT( 19 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, TEMP3*ULP )
1530 CALL DSTEBZ( 'a
', 'b
', N, VL, VU, IL, IU, ABSTOL, SD, SE, M,
1531 $ NSPLIT, WA1, IWORK( 1 ), IWORK( N+1 ), RWORK,
1532 $ IWORK( 2*N+1 ), IINFO )
1533.NE.
IF( IINFO0 ) THEN
1534 WRITE( NOUNIT, FMT = 9999 )'dstebz(a,b)
', IINFO, N,
1537.LT.
IF( IINFO0 ) THEN
1540 RESULT( 20 ) = ULPINV
1541 RESULT( 21 ) = ULPINV
1546 CALL ZSTEIN( N, SD, SE, M, WA1, IWORK( 1 ), IWORK( N+1 ), Z,
1547 $ LDU, RWORK, IWORK( 2*N+1 ), IWORK( 3*N+1 ),
1549.NE.
IF( IINFO0 ) THEN
1550 WRITE( NOUNIT, FMT = 9999 )'zstein', IINFO, N, JTYPE,
1553.LT.
IF( IINFO0 ) THEN
1556 RESULT( 20 ) = ULPINV
1557 RESULT( 21 ) = ULPINV
1564 CALL ZSTT21( N, 0, SD, SE, WA1, DUMMA, Z, LDU, WORK, RWORK,
1573 CALL DCOPY( N, SD, 1, D1, 1 )
1575 $ CALL DCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1576 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1579 CALL ZSTEDC( 'i
', N, D1, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1580 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1581.NE.
IF( IINFO0 ) THEN
1582 WRITE( NOUNIT, FMT = 9999 )'zstedc(i)
', IINFO, N, JTYPE,
1585.LT.
IF( IINFO0 ) THEN
1588 RESULT( 22 ) = ULPINV
1595 CALL ZSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1602 CALL DCOPY( N, SD, 1, D1, 1 )
1604 $ CALL DCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1605 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1608 CALL ZSTEDC( 'v
', N, D1, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1609 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1610.NE.
IF( IINFO0 ) THEN
1611 WRITE( NOUNIT, FMT = 9999 )'zstedc(v)
', IINFO, N, JTYPE,
1614.LT.
IF( IINFO0 ) THEN
1617 RESULT( 24 ) = ULPINV
1624 CALL ZSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1631 CALL DCOPY( N, SD, 1, D2, 1 )
1633 $ CALL DCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1634 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1637 CALL ZSTEDC( 'n
', N, D2, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1638 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1639.NE.
IF( IINFO0 ) THEN
1640 WRITE( NOUNIT, FMT = 9999 )'zstedc(n)
', IINFO, N, JTYPE,
1643.LT.
IF( IINFO0 ) THEN
1646 RESULT( 26 ) = ULPINV
1657 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1658 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1661 RESULT( 26 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1665 IF( ILAENV( 10, 'zstemr', 'va.EQ..AND.
', 1, 0, 0, 0 )1
1666 $ ILAENV( 11, 'zstemr', 'va.EQ.
', 1, 0, 0, 0 )1 ) THEN
1677.EQ..AND.
IF( JTYPE21 CREL ) THEN
1679 ABSTOL = UNFL + UNFL
1680 CALL ZSTEMR( 'v
', 'a
', N, SD, SE, VL, VU, IL, IU,
1681 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1682 $ RWORK, LRWORK, IWORK( 2*N+1 ), LWORK-2*N,
1684.NE.
IF( IINFO0 ) THEN
1685 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,a,rel)
',
1686 $ IINFO, N, JTYPE, IOLDSD
1688.LT.
IF( IINFO0 ) THEN
1691 RESULT( 27 ) = ULPINV
1698 TEMP2 = TWO*( TWO*N-ONE )*ULP*( ONE+EIGHT*HALF**2 ) /
1703 TEMP1 = MAX( TEMP1, ABS( D4( J )-WR( N-J+1 ) ) /
1704 $ ( ABSTOL+ABS( D4( J ) ) ) )
1707 RESULT( 27 ) = TEMP1 / TEMP2
1709 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1710 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1719 ABSTOL = UNFL + UNFL
1720 CALL ZSTEMR( 'v
', 'i
', N, SD, SE, VL, VU, IL, IU,
1721 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1722 $ RWORK, LRWORK, IWORK( 2*N+1 ),
1723 $ LWORK-2*N, IINFO )
1725.NE.
IF( IINFO0 ) THEN
1726 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,i,rel)
',
1727 $ IINFO, N, JTYPE, IOLDSD
1729.LT.
IF( IINFO0 ) THEN
1732 RESULT( 28 ) = ULPINV
1739 TEMP2 = TWO*( TWO*N-ONE )*ULP*
1740 $ ( ONE+EIGHT*HALF**2 ) / ( ONE-HALF )**4
1744 TEMP1 = MAX( TEMP1, ABS( WR( J-IL+1 )-D4( N-J+
1745 $ 1 ) ) / ( ABSTOL+ABS( WR( J-IL+1 ) ) ) )
1748 RESULT( 28 ) = TEMP1 / TEMP2
1761 CALL DCOPY( N, SD, 1, D5, 1 )
1763 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1764 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1768 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1769 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1775 CALL ZSTEMR( 'v
', 'i
', N, D5, RWORK, VL, VU, IL, IU,
1776 $ M, D1, Z, LDU, N, IWORK( 1 ), TRYRAC,
1777 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1778 $ LIWORK-2*N, IINFO )
1779.NE.
IF( IINFO0 ) THEN
1780 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,i)
', IINFO,
1783.LT.
IF( IINFO0 ) THEN
1786 RESULT( 29 ) = ULPINV
1797 CALL DCOPY( N, SD, 1, D5, 1 )
1799 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1802 CALL ZSTEMR( 'n
', 'i
', N, D5, RWORK, VL, VU, IL, IU,
1803 $ M, D2, Z, LDU, N, IWORK( 1 ), TRYRAC,
1804 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1805 $ LIWORK-2*N, IINFO )
1806.NE.
IF( IINFO0 ) THEN
1807 WRITE( NOUNIT, FMT = 9999 )'zstemr(n,i)
', IINFO,
1810.LT.
IF( IINFO0 ) THEN
1813 RESULT( 31 ) = ULPINV
1823 DO 240 J = 1, IU - IL + 1
1824 TEMP1 = MAX( TEMP1, ABS( D1( J ) ),
1826 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1829 RESULT( 31 ) = TEMP2 / MAX( UNFL,
1830 $ ULP*MAX( TEMP1, TEMP2 ) )
1836 CALL DCOPY( N, SD, 1, D5, 1 )
1838 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1839 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1845 VL = D2( IL ) - MAX( HALF*
1846 $ ( D2( IL )-D2( IL-1 ) ), ULP*ANORM,
1849 VL = D2( 1 ) - MAX( HALF*( D2( N )-D2( 1 ) ),
1850 $ ULP*ANORM, TWO*RTUNFL )
1853 VU = D2( IU ) + MAX( HALF*
1854 $ ( D2( IU+1 )-D2( IU ) ), ULP*ANORM,
1857 VU = D2( N ) + MAX( HALF*( D2( N )-D2( 1 ) ),
1858 $ ULP*ANORM, TWO*RTUNFL )
1865 CALL ZSTEMR( 'v
', 'v
', N, D5, RWORK, VL, VU, IL, IU,
1866 $ M, D1, Z, LDU, M, IWORK( 1 ), TRYRAC,
1867 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1868 $ LIWORK-2*N, IINFO )
1869.NE.
IF( IINFO0 ) THEN
1870 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,v)
', IINFO,
1873.LT.
IF( IINFO0 ) THEN
1876 RESULT( 32 ) = ULPINV
1883 CALL ZSTT22( N, M, 0, SD, SE, D1, DUMMA, Z, LDU, WORK,
1884 $ M, RWORK, RESULT( 32 ) )
1890 CALL DCOPY( N, SD, 1, D5, 1 )
1892 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1895 CALL ZSTEMR( 'n
', 'v
', N, D5, RWORK, VL, VU, IL, IU,
1896 $ M, D2, Z, LDU, N, IWORK( 1 ), TRYRAC,
1897 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1898 $ LIWORK-2*N, IINFO )
1899.NE.
IF( IINFO0 ) THEN
1900 WRITE( NOUNIT, FMT = 9999 )'zstemr(n,v)
', IINFO,
1903.LT.
IF( IINFO0 ) THEN
1906 RESULT( 34 ) = ULPINV
1916 DO 250 J = 1, IU - IL + 1
1917 TEMP1 = MAX( TEMP1, ABS( D1( J ) ),
1919 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1922 RESULT( 34 ) = TEMP2 / MAX( UNFL,
1923 $ ULP*MAX( TEMP1, TEMP2 ) )
1937 CALL DCOPY( N, SD, 1, D5, 1 )
1939 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1943 CALL ZSTEMR( 'v
', 'a
', N, D5, RWORK, VL, VU, IL, IU,
1944 $ M, D1, Z, LDU, N, IWORK( 1 ), TRYRAC,
1945 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1946 $ LIWORK-2*N, IINFO )
1947.NE.
IF( IINFO0 ) THEN
1948 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,a)
', IINFO, N,
1951.LT.
IF( IINFO0 ) THEN
1954 RESULT( 35 ) = ULPINV
1961 CALL ZSTT22( N, M, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, M,
1962 $ RWORK, RESULT( 35 ) )
1968 CALL DCOPY( N, SD, 1, D5, 1 )
1970 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1973 CALL ZSTEMR( 'n
', 'a
', N, D5, RWORK, VL, VU, IL, IU,
1974 $ M, D2, Z, LDU, N, IWORK( 1 ), TRYRAC,
1975 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1976 $ LIWORK-2*N, IINFO )
1977.NE.
IF( IINFO0 ) THEN
1978 WRITE( NOUNIT, FMT = 9999 )'zstemr(n,a)
', IINFO, N,
1981.LT.
IF( IINFO0 ) THEN
1984 RESULT( 37 ) = ULPINV
1995 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1996 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1999 RESULT( 37 ) = TEMP2 / MAX( UNFL,
2000 $ ULP*MAX( TEMP1, TEMP2 ) )
2004 NTESTT = NTESTT + NTEST
2010 DO 290 JR = 1, NTEST
2011.GE.
IF( RESULT( JR )THRESH ) THEN
2016.EQ.
IF( NERRS0 ) THEN
2017 WRITE( NOUNIT, FMT = 9998 )'zst
'
2018 WRITE( NOUNIT, FMT = 9997 )
2019 WRITE( NOUNIT, FMT = 9996 )
2020 WRITE( NOUNIT, FMT = 9995 )'hermitian
'
2021 WRITE( NOUNIT, FMT = 9994 )
2025 WRITE( NOUNIT, FMT = 9987 )
2028.LT.
IF( RESULT( JR )10000.0D0 ) THEN
2029 WRITE( NOUNIT, FMT = 9989 )N, JTYPE, IOLDSD, JR,
2032 WRITE( NOUNIT, FMT = 9988 )N, JTYPE, IOLDSD, JR,
2042 CALL DLASUM( 'zst
', NOUNIT, NERRS, NTESTT )
2045 9999 FORMAT( ' zchkst2stg:
', A, ' returned info=
', I6, '.
', / 9X,
2046 $ 'n=
', I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
2048 9998 FORMAT( / 1X, A3, ' --
Complex Hermitian eigenvalue problem
' )
2049 9997 FORMAT( ' Matrix types (see ZCHKST2STG for details):
' )
2051 9996 FORMAT( / ' Special Matrices:
',
2052 $ / ' 1=zero matrix.
',
2053 $ ' 5=diagonal: clustered entries.
',
2054 $ / ' 2=identity matrix.
',
2055 $ ' 6=diagonal: large, evenly spaced.
',
2056 $ / ' 3=diagonal: evenly spaced entries.
',
2057 $ ' 7=diagonal: small, evenly spaced.
',
2058 $ / ' 4=diagonal: geometr. spaced entries.
' )
2059 9995 FORMAT( ' dense
', A, ' matrices:
',
2060 $ / ' 8=evenly spaced eigenvals.
',
2061 $ ' 12=small, evenly spaced eigenvals.
',
2062 $ / ' 9=geometrically spaced eigenvals.
',
2063 $ ' 13=matrix with random o(1) entries.
',
2064 $ / ' 10=clustered eigenvalues.
',
2065 $ ' 14=matrix with large random entries.
',
2066 $ / ' 11=large, evenly spaced eigenvals.
',
2067 $ ' 15=matrix with small random entries.
' )
2068 9994 FORMAT( ' 16=positive definite, evenly spaced eigenvalues
',
2069 $ / ' 17=positive definite, geometrically spaced eigenvlaues
',
2070 $ / ' 18=positive definite, clustered eigenvalues
',
2071 $ / ' 19=positive definite, small evenly spaced eigenvalues
',
2072 $ / ' 20=positive definite, large evenly spaced eigenvalues
',
2073 $ / ' 21=diagonally dominant tridiagonal, geometrically
',
2074 $ ' spaced eigenvalues
' )
2076 9989 FORMAT( ' matrix order=
', I5, ', type=
', I2, ',
seed=
',
2077 $ 4( I4, ',
' ), ' result
', I3, ' is
', 0P, F8.2 )
2078 9988 FORMAT( ' matrix order=
', I5, ', type=
', I2, ',
seed=
',
2079 $ 4( I4, ',
' ), ' result
', I3, ' is
', 1P, D10.3 )
2081 9987 FORMAT( / 'test performed: see zchkst2stg for details.
', / )