599 SUBROUTINE zchkst( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
600 $ NOUNIT, A, LDA, AP, SD, SE, D1, D2, D3, D4, D5,
601 $ WA1, WA2, WA3, WR, U, LDU, V, VP, TAU, Z, WORK,
602 $ LWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT,
610 INTEGER INFO, LDA, LDU, LIWORK
612DOUBLE PRECISION THRESH
616 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
617 DOUBLE PRECISION D1( * ), D2( * ), D3( * ), D4( * ), D5( * ),
618 $ RESULT( * ), RWORK( * ), SD( * ), SE( * ),
619 $ wa1( * ), wa2( * ), wa3( * ), wr( * )
620 COMPLEX*16 A( LDA, * ), AP( * ), TAU( * ), U( LDU, * ),
621 $ v( ldu, * ), vp( * ), work( * ), z( ldu, * )
627 DOUBLE PRECISION ZERO, ONE, TWO, EIGHT, TEN, HUN
628 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
629 $ eight = 8.0d0, ten = 10.0d0, hun = 100.0d0 )
630 COMPLEX*16 CZERO, CONE
631 parameter( czero = ( 0.0d+0, 0.0d+0 ),
632 $ cone = ( 1.0d+0, 0.0d+0 ) )
633 DOUBLE PRECISION HALF
634 parameter( half = one / two )
636 PARAMETER ( MAXTYP = 21 )
638 parameter( crange = .false. )
640 parameter( crel = .false. )
643 LOGICAL BADNN, TRYRAC
644 INTEGER I, IINFO, IL, IMODE, INDE, INDRWK, ITEMP,
645 $ ITYPE, IU, J, JC, JR, JSIZE, JTYPE, LGN,
646 $ LIWEDC, LOG2UI, LRWEDC, LWEDC, M, M2, M3,
647 $ mtypes, n, nap, nblock, nerrs, nmats, nmax,
648 $ nsplit, ntest, ntestt
649 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
650 $ RTUNFL, TEMP1, TEMP2, TEMP3, TEMP4, ULP,
651 $ ULPINV, UNFL, VL, VU
654 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
655 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
657 DOUBLE PRECISION DUMMA( 1 )
661 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
662 EXTERNAL ILAENV, DLAMCH, DLARND, DSXT1
672 INTRINSIC abs, dble, dconjg, int, log,
max,
min, sqrt
675 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
676 $ 8, 8, 9, 9, 9, 9, 9, 10 /
677 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
678 $ 2, 3, 1, 1, 1, 2, 3, 1 /
679 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
680 $ 0, 0, 4, 3, 1, 4, 4, 3 /
698 nmax =
max( nmax, nn( j ) )
703 nblock = ilaenv( 1,
'ZHETRD',
'L', nmax, -1, -1, -1 )
704 nblock =
min( nmax,
max( 1, nblock ) )
708 IF( nsizes.LT.0 )
THEN
710 ELSE IF( badnn )
THEN
712 ELSE IF( ntypes.LT.0 )
THEN
714 ELSE IF( lda.LT.nmax )
THEN
716 ELSE IF( ldu.LT.nmax )
THEN
718 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
723 CALL xerbla(
'ZCHKST', -info )
729 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
734 unfl = dlamch(
'Safe minimum' )
737 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
739 log2ui = int( log( ulpinv ) / log( two ) )
740 rtunfl = sqrt( unfl )
741 rtovfl = sqrt( ovfl )
746 iseed2( i ) = iseed( i )
751 DO 310 jsize = 1, nsizes
754 lgn = int( log( dble( n ) ) / log( two ) )
759 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
760 lrwedc = 1 + 3*n + 2*n*lgn + 4*n**2
761 liwedc = 6 + 6*n + 5*n*lgn
767 nap = ( n*( n+1 ) ) / 2
768 aninv = one / dble(
max( 1, n ) )
770 IF( nsizes.NE.1 )
THEN
771 mtypes =
min( maxtyp, ntypes )
773 mtypes =
min( maxtyp+1, ntypes )
776 DO 300 jtype = 1, mtypes
777 IF( .NOT.dotype( jtype ) )
783 ioldsd( j ) = iseed( j )
802 IF( mtypes.GT.maxtyp )
805 itype = ktype( jtype )
806 imode = kmode( jtype )
810 GO TO ( 40, 50, 60 )kmagn( jtype )
817 anorm = ( rtovfl*ulp )*aninv
821 anorm = rtunfl*n*ulpinv
826 CALL zlaset(
'Full', lda, n, czero, czero, a, lda )
828 IF( jtype.LE.15 )
THEN
831 cond = ulpinv*aninv / ten
838 IF( itype.EQ.1 )
THEN
841 ELSE IF( itype.EQ.2 )
THEN
849 ELSE IF( itype.EQ.4 )
THEN
853 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
854 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
857 ELSE IF( itype.EQ.5 )
THEN
861 CALL zlatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
862 $ anorm, n, n,
'N', a, lda, work, iinfo )
864 ELSE IF( itype.EQ.7 )
THEN
868 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
869 $
'T',
'N', work( n+1 ), 1, one,
870 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
871 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
873 ELSE IF( itype.EQ.8 )
THEN
877 CALL zlatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
878 $
'T',
'N', work( n+1 ), 1, one,
879 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
880 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
882 ELSE IF( itype.EQ.9 )
THEN
886 CALL zlatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
887 $ anorm, n, n,
'N', a, lda, work, iinfo )
889 ELSE IF( itype.EQ.10 )
THEN
893 CALL zlatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
894 $ anorm, 1, 1,
'N', a, lda, work, iinfo )
896 temp1 = abs( a( i-1, i ) )
897 temp2 = sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
898 IF( temp1.GT.half*temp2 )
THEN
899 a( i-1, i ) = a( i-1, i )*
900 $ ( half*temp2 / ( unfl+temp1 ) )
901 a( i, i-1 ) = dconjg( a( i-1, i ) )
910 IF( iinfo.NE.0 )
THEN
911 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
922 CALL zlacpy(
'U', n, n, a, lda, v, ldu )
925 CALL zhetrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
928 IF( iinfo.NE.0 )
THEN
929 WRITE( nounit, fmt = 9999 )
'ZHETRD(U)', iinfo, n, jtype,
932 IF( iinfo.LT.0 )
THEN
940 CALL zlacpy(
'U', n, n, v, ldu, u, ldu )
943 CALL zungtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
944 IF( iinfo.NE.0 )
THEN
945 WRITE( nounit, fmt = 9999 )
'ZUNGTR(U)', iinfo, n, jtype,
948 IF( iinfo.LT.0 )
THEN
958 CALL zhet21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
959 $ ldu, tau, work, rwork, result( 1 ) )
960 CALL zhet21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
961 $ ldu, tau, work, rwork, result( 2 ) )
966 CALL zlacpy(
'L', n, n, a, lda, v, ldu )
969 CALL zhetrd(
'L', n, v, ldu, sd, se, tau, work, lwork,
972 IF( iinfo.NE.0 )
THEN
973 WRITE( nounit, fmt = 9999 )
'ZHETRD(L)', iinfo, n, jtype,
976 IF( iinfo.LT.0 )
THEN
984 CALL zlacpy(
'L', n, n, v, ldu, u, ldu )
987 CALL zungtr(
'L', n, u, ldu, tau, work, lwork, iinfo )
988 IF( iinfo.NE.0 )
THEN
989 WRITE( nounit, fmt = 9999 )'
zungtr(l)
', IINFO, N, JTYPE,
992.LT.
IF( IINFO0 ) THEN
1000 CALL ZHET21( 2, 'lower
', N, 1, A, LDA, SD, SE, U, LDU, V,
1001 $ LDU, TAU, WORK, RWORK, RESULT( 3 ) )
1002 CALL ZHET21( 3, 'lower
', N, 1, A, LDA, SD, SE, U, LDU, V,
1003 $ LDU, TAU, WORK, RWORK, RESULT( 4 ) )
1011 AP( I ) = A( JR, JC )
1017 CALL ZCOPY( NAP, AP, 1, VP, 1 )
1020 CALL ZHPTRD( 'u
', N, VP, SD, SE, TAU, IINFO )
1022.NE.
IF( IINFO0 ) THEN
1023 WRITE( NOUNIT, FMT = 9999 )'zhptrd(u)
', IINFO, N, JTYPE,
1026.LT.
IF( IINFO0 ) THEN
1029 RESULT( 5 ) = ULPINV
1035 CALL ZUPGTR( 'u
', N, VP, TAU, U, LDU, WORK, IINFO )
1036.NE.
IF( IINFO0 ) THEN
1037 WRITE( NOUNIT, FMT = 9999 )'zupgtr(u)
', IINFO, N, JTYPE,
1040.LT.
IF( IINFO0 ) THEN
1043 RESULT( 6 ) = ULPINV
1050 CALL ZHPT21( 2, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1051 $ WORK, RWORK, RESULT( 5 ) )
1052 CALL ZHPT21( 3, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1053 $ WORK, RWORK, RESULT( 6 ) )
1061 AP( I ) = A( JR, JC )
1067 CALL ZCOPY( NAP, AP, 1, VP, 1 )
1070 CALL ZHPTRD( 'l', n, vp, sd, se, tau, iinfo )
1072 IF( iinfo.NE.0 )
THEN
1073 WRITE( nounit, fmt = 9999 )
'ZHPTRD(L)', iinfo, n, jtype,
1076 IF( iinfo.LT.0 )
THEN
1079 result( 7 ) = ulpinv
1085 CALL zupgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1086 IF( iinfo.NE.0 )
THEN
1087 WRITE( nounit, fmt = 9999 )
'ZUPGTR(L)', iinfo, n, jtype,
1090 IF( iinfo.LT.0 )
THEN
1093 result( 8 ) = ulpinv
1098 CALL zhpt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1099 $ work, rwork, result( 7 ) )
1100 CALL zhpt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1101 $ work, rwork, result( 8 ) )
1107 CALL dcopy( n, sd, 1, d1, 1 )
1109 $
CALL dcopy( n-1, se, 1, rwork, 1 )
1110 CALL zlaset(
'Full', n, n, czero, cone, z, ldu )
1113 CALL zsteqr(
'V', n, d1, rwork, z, ldu, rwork( n+1 ),
1115 IF( iinfo.NE.0 )
THEN
1116 WRITE( nounit, fmt = 9999 )
'ZSTEQR(V)', iinfo, n, jtype,
1119 IF( iinfo.LT.0 )
THEN
1122 result( 9 ) = ulpinv
1129 CALL dcopy( n, sd, 1, d2, 1 )
1131 $
CALL dcopy( n-1, se, 1, rwork, 1 )
1134 CALL zsteqr(
'N', n, d2, rwork, work, ldu, rwork( n+1 ),
1136 IF( iinfo.NE.0 )
THEN
1137 WRITE( nounit, fmt = 9999 )
'ZSTEQR(N)', iinfo, n, jtype,
1140 IF( iinfo.LT.0 )
THEN
1143 result( 11 ) = ulpinv
1150 CALL dcopy( n, sd, 1, d3, 1 )
1152 $
CALL dcopy( n-1, se, 1, rwork, 1 )
1155 CALL dsterf( n, d3, rwork, iinfo )
1156 IF( iinfo.NE.0 )
THEN
1157 WRITE( nounit, fmt = 9999 )
'DSTERF', iinfo, n, jtype,
1160 IF( iinfo.LT.0 )
THEN
1163 result( 12 ) = ulpinv
1170 CALL zstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1181 temp1 =
max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1182 temp2 =
max( temp2, abs( d1( j )-d2( j ) ) )
1183 temp3 =
max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1184 temp4 =
max( temp4, abs( d1( j )-d3( j ) ) )
1187 result( 11 ) = temp2 /
max( unfl, ulp*
max( temp1, temp2 ) )
1188 result( 12 ) = temp4 /
max( unfl, ulp*
max( temp3, temp4 ) )
1194 temp1 = thresh*( half-ulp )
1196 DO 160 j = 0, log2ui
1197 CALL dstech( n, sd, se, d1, temp1, rwork, iinfo )
1204 result( 13 ) = temp1
1209 IF( jtype.GT.15 )
THEN
1213 CALL dcopy( n, sd, 1, d4, 1 )
1215 $
CALL dcopy( n-1, se, 1, rwork, 1 )
1216 CALL zlaset(
'Full', n, n, czero, cone, z, ldu )
1219 CALL zpteqr(
'V', n, d4, rwork, z, ldu, rwork( n+1 ),
1221 IF( iinfo.NE.0 )
THEN
1222 WRITE( nounit, fmt = 9999 )
'ZPTEQR(V)', iinfo, n,
1225 IF( iinfo.LT.0 )
THEN
1228 result( 14 ) = ulpinv
1235 CALL zstt21( n, 0, sd, se, d4, dumma, z, ldu
1236 $ rwork, result( 14 ) )
1240 CALL dcopy( n, sd, 1, d5, 1 )
1242 $
CALL dcopy( n-1, se, 1, rwork, 1 )
1245 CALL zpteqr(
'N', n, d5, rwork, z, ldu, rwork( n+1 ),
1247 IF( iinfo.NE.0 )
THEN
1248 WRITE( nounit, fmt = 9999 )
'ZPTEQR(N)', iinfo, n,
1251 IF( iinfo.LT.0 )
THEN
1254 result( 16 ) = ulpinv
1265 temp2 =
max( temp2, abs( d4( j )-d5( j ) ) )
1268 result( 16 ) = temp2 /
max( unfl,
1269 $ hun*ulp*
max( temp1, temp2 ) )
1285 IF( jtype.EQ.21 )
THEN
1287 abstol = unfl + unfl
1288 CALL dstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1289 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1290 $ rwork, iwork( 2*n+1 ), iinfo )
1291 IF( iinfo.NE.0 )
THEN
1292 WRITE( nounit, fmt = 9999 )
'DSTEBZ(A,rel)'
1295 IF( iinfo.LT.0 )
THEN
1298 result( 17 ) = ulpinv
1305 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1310 temp1 =
max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1311 $ ( abstol+abs( d4( j
1314 result( 17 ) = temp1 / temp2
1322 abstol = unfl + unfl
1323 CALL dstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1324 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), rwork,
1325 $ iwork( 2*n+1 ), iinfo )
1326 IF( iinfo.NE.0 )
THEN
1327 WRITE( nounit, fmt = 9999 )
'DSTEBZ(A)', iinfo, n, jtype,
1330 IF( iinfo.LT.0 )
THEN
1333 result( 18 ) = ulpinv
1343 temp1 =
max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1344 temp2 =
max( temp2, abs( d3( j )-wa1( j ) ) )
1347 result( 18 ) = temp2 /
max( unfl, ulp*
max( temp1, temp2 ) )
1357 il = 1 + ( n-1 )*int( dlarnd( 1, iseed2 ) )
1358 iu = 1 + ( n-1 )*int( dlarnd( 1, iseed2 ) )
1366 CALL dstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1367 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1368 $ rwork, iwork( 2*n+1 ), iinfo )
1369 IF( iinfo.NE.0 )
THEN
1370 WRITE( nounit, fmt = 9999 )
'DSTEBZ(I)', iinfo, n, jtype,
1373 IF( iinfo.LT.0 )
THEN
1376 result( 19 ) = ulpinv
1386 vl = wa1( il ) -
max( half*( wa1( il )-wa1( il-1 ) ),
1387 $ ulp*anorm, two*rtunfl )
1389 vl = wa1( 1 ) -
max( half*( wa1( n )-wa1( 1 ) ),
1390 $ ulp*anorm, two*rtunfl )
1393 vu = wa1( iu ) +
max( half*( wa1( iu+1 )-wa1( iu ) ),
1394 $ ulp*anorm, two*rtunfl )
1396 vu = wa1( n ) +
max( half*( wa1( n )-wa1( 1 ) ),
1397 $ ulp*anorm, two*rtunfl )
1404 CALL dstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1405 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1406 $ rwork, iwork( 2*n+1 ), iinfo )
1407 IF( iinfo.NE.0 )
THEN
1408 WRITE( nounit, fmt = 9999 )'
dstebz(v)
', IINFO, N, JTYPE,
1411.LT.
IF( IINFO0 ) THEN
1414 RESULT( 19 ) = ULPINV
1419.EQ..AND..NE.
IF( M30 N0 ) THEN
1420 RESULT( 19 ) = ULPINV
1426 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1427 TEMP2 = DSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1429 TEMP3 = MAX( ABS( WA1( N ) ), ABS( WA1( 1 ) ) )
1434 RESULT( 19 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, TEMP3*ULP )
1441 CALL DSTEBZ( 'a
', 'b
', N, VL, VU, IL, IU, ABSTOL, SD, SE, M,
1442 $ NSPLIT, WA1, IWORK( 1 ), IWORK( N+1 ), RWORK,
1443 $ IWORK( 2*N+1 ), IINFO )
1444.NE.
IF( IINFO0 ) THEN
1445 WRITE( NOUNIT, FMT = 9999 )'dstebz(a,b)
', IINFO, N,
1448.LT.
IF( IINFO0 ) THEN
1451 RESULT( 20 ) = ULPINV
1452 RESULT( 21 ) = ULPINV
1457 CALL ZSTEIN( N, SD, SE, M, WA1, IWORK( 1 ), IWORK( N+1 ), Z,
1458 $ LDU, RWORK, IWORK( 2*N+1 ), IWORK( 3*N+1 ),
1460.NE.
IF( IINFO0 ) THEN
1461 WRITE( NOUNIT, FMT = 9999 )'zstein', IINFO, N, JTYPE,
1464.LT.
IF( IINFO0 ) THEN
1467 RESULT( 20 ) = ULPINV
1468 RESULT( 21 ) = ULPINV
1475 CALL ZSTT21( N, 0, SD, SE, WA1, DUMMA, Z, LDU, WORK, RWORK,
1484 CALL DCOPY( N, SD, 1, D1, 1 )
1486 $ CALL DCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1487 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1490 CALL ZSTEDC( 'i
', N, D1, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1491 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1492.NE.
IF( IINFO0 ) THEN
1493 WRITE( NOUNIT, FMT = 9999 )'zstedc(i)
', IINFO, N, JTYPE,
1496.LT.
IF( IINFO0 ) THEN
1499 RESULT( 22 ) = ULPINV
1506 CALL ZSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1513 CALL DCOPY( N, SD, 1, D1, 1 )
1515 $ CALL DCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1516 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1519 CALL ZSTEDC( 'v
', N, D1, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1520 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1521.NE.
IF( IINFO0 ) THEN
1522 WRITE( NOUNIT, FMT = 9999 )'zstedc(v)
', IINFO, N, JTYPE,
1525.LT.
IF( IINFO0 ) THEN
1528 RESULT( 24 ) = ULPINV
1535 CALL ZSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1542 CALL DCOPY( N, SD, 1, D2, 1 )
1544 $ CALL DCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1545 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1548 CALL ZSTEDC( 'n
', N, D2, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1549 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1550.NE.
IF( IINFO0 ) THEN
1551 WRITE( NOUNIT, FMT = 9999 )'zstedc(n)
', IINFO, N, JTYPE,
1554.LT.
IF( IINFO0 ) THEN
1557 RESULT( 26 ) = ULPINV
1568 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1569 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1572 RESULT( 26 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1576 IF( ILAENV( 10, 'zstemr', 'va.EQ..AND.
', 1, 0, 0, 0 )1
1577 $ ILAENV( 11, 'zstemr', 'va.EQ.
', 1, 0, 0, 0 )1 ) THEN
1588.EQ..AND.
IF( JTYPE21 CREL ) THEN
1590 ABSTOL = UNFL + UNFL
1591 CALL ZSTEMR( 'v
', 'a
', N, SD, SE, VL, VU, IL, IU,
1592 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1593 $ RWORK, LRWORK, IWORK( 2*N+1 ), LWORK-2*N,
1595.NE.
IF( IINFO0 ) THEN
1596 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,a,rel)
',
1597 $ IINFO, N, JTYPE, IOLDSD
1599.LT.
IF( IINFO0 ) THEN
1602 RESULT( 27 ) = ULPINV
1609 TEMP2 = TWO*( TWO*N-ONE )*ULP*( ONE+EIGHT*HALF**2 ) /
1614 TEMP1 = MAX( TEMP1, ABS( D4( J )-WR( N-J+1 ) ) /
1615 $ ( ABSTOL+ABS( D4( J ) ) ) )
1618 RESULT( 27 ) = TEMP1 / TEMP2
1620 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1621 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1630 ABSTOL = UNFL + UNFL
1631 CALL ZSTEMR( 'v
', 'i
', N, SD, SE, VL, VU, IL, IU,
1632 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1633 $ RWORK, LRWORK, IWORK( 2*N+1 ),
1634 $ LWORK-2*N, IINFO )
1636.NE.
IF( IINFO0 ) THEN
1637 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,i,rel)
',
1638 $ IINFO, N, JTYPE, IOLDSD
1640.LT.
IF( IINFO0 ) THEN
1643 RESULT( 28 ) = ULPINV
1651 TEMP2 = TWO*( TWO*N-ONE )*ULP*
1652 $ ( ONE+EIGHT*HALF**2 ) / ( ONE-HALF )**4
1656 TEMP1 = MAX( TEMP1, ABS( WR( J-IL+1 )-D4( N-J+
1657 $ 1 ) ) / ( ABSTOL+ABS( WR( J-IL+1 ) ) ) )
1660 RESULT( 28 ) = TEMP1 / TEMP2
1673 CALL DCOPY( N, SD, 1, D5, 1 )
1675 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1676 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1680 IL = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1681 IU = 1 + ( N-1 )*INT( DLARND( 1, ISEED2 ) )
1687 CALL ZSTEMR( 'v
', 'i
', N, D5, RWORK, VL, VU, IL, IU,
1688 $ M, D1, Z, LDU, N, IWORK( 1 ), TRYRAC,
1689 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1690 $ LIWORK-2*N, IINFO )
1691.NE.
IF( IINFO0 ) THEN
1692 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,i)
', IINFO,
1695.LT.
IF( IINFO0 ) THEN
1698 RESULT( 29 ) = ULPINV
1710 CALL DCOPY( N, SD, 1, D5, 1 )
1712 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1715 CALL ZSTEMR( 'n
', 'i
', N, D5, RWORK, VL, VU, IL, IU,
1716 $ M, D2, Z, LDU, N, IWORK( 1 ), TRYRAC,
1717 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1718 $ LIWORK-2*N, IINFO )
1719.NE.
IF( IINFO0 ) THEN
1720 WRITE( NOUNIT, FMT = 9999 )'zstemr(n,i)
', IINFO,
1723.LT.
IF( IINFO0 ) THEN
1726 RESULT( 31 ) = ULPINV
1736 DO 240 J = 1, IU - IL + 1
1737 TEMP1 = MAX( TEMP1, ABS( D1( J ) ),
1739 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1742 RESULT( 31 ) = TEMP2 / MAX( UNFL,
1743 $ ULP*MAX( TEMP1, TEMP2 ) )
1750 CALL DCOPY( N, SD, 1, D5, 1 )
1752 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1753 CALL ZLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1759 VL = D2( IL ) - MAX( HALF*
1760 $ ( D2( IL )-D2( IL-1 ) ), ULP*ANORM,
1763 VL = D2( 1 ) - MAX( HALF*( D2( N )-D2( 1 ) ),
1764 $ ULP*ANORM, TWO*RTUNFL )
1767 VU = D2( IU ) + MAX( HALF*
1768 $ ( D2( IU+1 )-D2( IU ) ), ULP*ANORM,
1771 VU = D2( N ) + MAX( HALF*( D2( N )-D2( 1 ) ),
1772 $ ULP*ANORM, TWO*RTUNFL )
1779 CALL ZSTEMR( 'v
', 'v
', N, D5, RWORK, VL, VU, IL, IU,
1780 $ M, D1, Z, LDU, M, IWORK( 1 ), TRYRAC,
1781 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1782 $ LIWORK-2*N, IINFO )
1783.NE.
IF( IINFO0 ) THEN
1784 WRITE( NOUNIT, FMT = 9999 )'zstemr(v,v)
', IINFO,
1787.LT.
IF( IINFO0 ) THEN
1790 RESULT( 32 ) = ULPINV
1797 CALL ZSTT22( N, M, 0, SD, SE, D1, DUMMA, Z, LDU, WORK,
1798 $ M, RWORK, RESULT( 32 ) )
1804 CALL DCOPY( N, SD, 1, D5, 1 )
1806 $ CALL DCOPY( N-1, SE, 1, RWORK, 1 )
1809 CALL ZSTEMR( 'n
', 'v', n, d5, rwork, vl, vu, il, iu,
1810 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1811 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1812 $ liwork-2*n, iinfo )
1813 IF( iinfo.NE.0 )
THEN
1814 WRITE( nounit, fmt = 9999 )
'ZSTEMR(N,V)', iinfo,
1817 IF( iinfo.LT.0 )
THEN
1820 result( 34 ) = ulpinv
1830 DO 250 j = 1, iu - il + 1
1831 temp1 =
max( temp1, abs( d1( j ) ),
1833 temp2 =
max( temp2, abs( d1( j )-d2( j ) ) )
1836 result( 34 ) = temp2 /
max( unfl,
1837 $ ulp*
max( temp1, temp2 ) )
1852 CALL dcopy( n, sd, 1, d5, 1 )
1854 $
CALL dcopy( n-1, se, 1, rwork, 1 )
1858 CALL zstemr(
'V',
'A', n, d5, rwork, vl, vu, il, iu,
1859 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1860 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1861 $ liwork-2*n, iinfo )
1862 IF( iinfo.NE.0 )
THEN
1863 WRITE( nounit, fmt = 9999 )
'ZSTEMR(V,A)', iinfo, n,
1866 IF( iinfo.LT.0 )
THEN
1869 result( 35 ) = ulpinv
1876 CALL zstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1883 CALL dcopy( n, sd, 1, d5, 1 )
1885 $
CALL dcopy( n-1, se, 1, rwork, 1 )
1888 CALL zstemr(
'N',
'A', n, d5, rwork, vl, vu, il, iu,
1889 $ m, d2, z, ldu, n, iwork( 1 ),
1890 $ rwork( n+1 ), lrwork
1891 $ liwork-2*n, iinfo )
1892 IF( iinfo.NE.0 )
THEN
1893 WRITE( nounit, fmt = 9999 )
'ZSTEMR(N,A)', iinfo
1896 IF( iinfo.LT.0 )
THEN
1899 result( 37 ) = ulpinv
1910 temp1 =
max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1911 temp2 =
max( temp2, abs( d1( j )-d2( j ) ) )
1914 result( 37 ) = temp2 /
max( unfl,
1915 $ ulp*
max( temp1, temp2 ) )
1919 ntestt = ntestt + ntest
1926 DO 290 jr = 1, ntest
1927 IF( result( jr ).GE.thresh )
THEN
1932 IF( nerrs.EQ.0 )
THEN
1933 WRITE( nounit, fmt = 9998 )
'ZST'
1934 WRITE( nounit, fmt = 9997 )
1935 WRITE( nounit, fmt = 9996 )
1936 WRITE( nounit, fmt = 9995 )
'Hermitian'
1937 WRITE( nounit, fmt = 9994 )
1941 WRITE( nounit, fmt = 9987 )
1944 IF( result( jr ).LT.10000.0d0 )
THEN
1945 WRITE( nounit, fmt = 9989 )n, jtype, ioldsd, jr,
1948 WRITE( nounit, fmt = 9988 )n, jtype, ioldsd, jr,
1958 CALL dlasum(
'ZST', nounit, nerrs, ntestt )
1961 9999
FORMAT(
' ZCHKST: ', a,
' returned INFO=', i6,
'.', / 9x
'N='
1962 $ i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
1964 9998
FORMAT( / 1x, a3,
' -- Complex Hermitian eigenvalue problem' )
1965 9997
FORMAT(
' Matrix types (see ZCHKST for details): ' )
1967 9996
FORMAT( /
' Special Matrices:',
1968 $ /
' 1=Zero matrix. ',
1969 $
' 5=Diagonal: clustered entries.',
1970 $ /
' 2=Identity matrix. ',
1971 $
' 6=Diagonal: large, evenly spaced.',
1972 $ /
' 3=Diagonal: evenly spaced entries. ',
1973 $
' 7=Diagonal: small, evenly spaced.',
1974 $ /
' 4=Diagonal: geometr. spaced entries.' )
1975 9995
FORMAT(
' Dense ', a,
' Matrices:',
1976 $ /
' 8=Evenly spaced eigenvals. ',
1977 $
' 12=Small, evenly spaced eigenvals.',
1978 $ /
' 9=Geometrically spaced eigenvals. ',
1979 $
' 13=Matrix with random O(1) entries.',
1980 $ /
' 10=Clustered eigenvalues. ',
1981 $
' 14=Matrix with large random entries.',
1982 $ /
' 11=Large, evenly spaced eigenvals. ',
1983 $
' 15=Matrix with small random entries.' )
1984 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
1985 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
1986 $ /
' 18=Positive definite, clustered eigenvalues',
1987 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
1988 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
1989 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
1990 $
' spaced eigenvalues' )
1992 9989
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1993 $ 4( i4,
',' ),
' result ', i3,
' is', 0p, f8.2 )
1994 9988
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1995 $ 4( i4,
',' ),
' result ', i3,
' is', 1p, d10.3 )
1997 9987
FORMAT( /
'Test performed: see ZCHKST for details.', / )