601 SUBROUTINE cchkst( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
602 $ NOUNIT, A, LDA, AP, SD, SE, D1, D2, D3, D4, D5,
603 $ WA1, WA2, WA3, WR, U, LDU, V, VP, TAU, Z, WORK,
604 $ LWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT,
613 INTEGER INFO, LDA, LDU, LIWORK, LRWORK, LWORK, NOUNIT,
619 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
620 REAL D1( * ), D2( * ), D3( * ), D4( * ), D5( * ),
621 $ result( * ), rwork( * ), sd( * ), se( * ),
622 $ wa1( * ), wa2( * ), wa3( * ), wr( * )
623 COMPLEX A( lda, * ), AP( * ), TAU( * ), U( ldu, * ),
624 $ v( ldu, * ), vp( * ), work( * ), z( ldu, * )
630 REAL ZERO, ONE, TWO, EIGHT, TEN, HUN
631 parameter( zero = 0.0e0, one = 1.0e0, two = 2.0e0,
632 $ eight = 8.0e0, ten = 10.0e0, hun = 100.0e0 )
634 parameter( czero = ( 0.0e+0, 0.0e+0 ),
635 $ cone = ( 1.0e+0, 0.0e+0 ) )
637 parameter( half = one / two )
639 parameter( maxtyp = 21 )
641 parameter( crange = .false. )
643 parameter( crel = .false. )
646 LOGICAL BADNN, TRYRAC
647 INTEGER I, IINFO, IL, IMODE, INDE, INDRWK, ITEMP,
648 $ itype, iu, j, jc, jr, jsize, jtype, lgn,
649 $ liwedc, log2ui, lrwedc, lwedc, m, m2, m3,
650 $ mtypes, n, nap, nblock, nerrs, nmats, nmax,
651 $ nsplit, ntest, ntestt
652 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
653 $ rtunfl, temp1, temp2, temp3, temp4, ulp,
654 $ ulpinv, unfl, vl, vu
657 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
658 $ kmagn( maxtyp ), kmode( maxtyp ),
664 REAL SLAMCH, SLARND, SSXT1
665 EXTERNAL ilaenv, slamch, slarnd, ssxt1
675 INTRINSIC abs, conjg, int, log, max, min,
REAL, SQRT
678 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
679 $ 8, 8, 9, 9, 9, 9, 9, 10 /
680 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
681 $ 2, 3, 1, 1, 1, 2, 3, 1 /
682 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
683 $ 0, 0, 4, 3, 1, 4, 4, 3 /
701 nmax = max( nmax, nn( j ) )
706 nblock = ilaenv( 1,
'CHETRD',
'L', nmax, -1, -1, -1 )
707 nblock = min( nmax, max( 1, nblock ) )
711 IF( nsizes.LT.0 )
THEN 713 ELSE IF( badnn )
THEN 715 ELSE IF( ntypes.LT.0 )
THEN 717 ELSE IF( lda.LT.nmax )
THEN 719 ELSE IF( ldu.LT.nmax )
THEN 721 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN 726 CALL xerbla(
'CCHKST', -info )
732 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
737 unfl = slamch(
'Safe minimum' )
740 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
742 log2ui = int( log( ulpinv ) / log( two ) )
743 rtunfl = sqrt( unfl )
744 rtovfl = sqrt( ovfl )
749 iseed2( i ) = iseed( i )
754 DO 310 jsize = 1, nsizes
757 lgn = int( log(
REAL( N ) ) / log( TWO ) )
762 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
763 lrwedc = 1 + 3*n + 2*n*lgn + 4*n**2
764 liwedc = 6 + 6*n + 5*n*lgn
770 nap = ( n*( n+1 ) ) / 2
771 aninv = one /
REAL( MAX( 1, N ) )
773 IF( nsizes.NE.1 )
THEN 774 mtypes = min( maxtyp, ntypes )
776 mtypes = min( maxtyp+1, ntypes )
779 DO 300 jtype = 1, mtypes
780 IF( .NOT.dotype( jtype ) )
786 ioldsd( j ) = iseed( j )
805 IF( mtypes.GT.maxtyp )
808 itype = ktype( jtype )
809 imode = kmode( jtype )
813 GO TO ( 40, 50, 60 )kmagn( jtype )
820 anorm = ( rtovfl*ulp )*aninv
824 anorm = rtunfl*n*ulpinv
829 CALL claset(
'Full', lda, n, czero, czero, a, lda )
831 IF( jtype.LE.15 )
THEN 834 cond = ulpinv*aninv / ten
841 IF( itype.EQ.1 )
THEN 844 ELSE IF( itype.EQ.2 )
THEN 852 ELSE IF( itype.EQ.4 )
THEN 856 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
857 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
860 ELSE IF( itype.EQ.5 )
THEN 864 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
865 $ anorm, n, n,
'N', a, lda, work, iinfo )
867 ELSE IF( itype.EQ.7 )
THEN 871 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
872 $
'T',
'N', work( n+1 ), 1, one,
873 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
874 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
876 ELSE IF( itype.EQ.8 )
THEN 880 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
881 $
'T',
'N', work( n+1 ), 1, one,
882 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
883 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
885 ELSE IF( itype.EQ.9 )
THEN 889 CALL clatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
890 $ anorm, n, n,
'N', a, lda, work, iinfo )
892 ELSE IF( itype.EQ.10 )
THEN 896 CALL clatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
897 $ anorm, 1, 1,
'N', a, lda, work, iinfo )
899 temp1 = abs( a( i-1, i ) )
900 temp2 = sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
901 IF( temp1.GT.half*temp2 )
THEN 902 a( i-1, i ) = a( i-1, i )*
903 $ ( half*temp2 / ( unfl+temp1 ) )
904 a( i, i-1 ) = conjg( a( i-1, i ) )
913 IF( iinfo.NE.0 )
THEN 914 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
925 CALL clacpy(
'U', n, n, a, lda, v, ldu )
928 CALL chetrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
931 IF( iinfo.NE.0 )
THEN 932 WRITE( nounit, fmt = 9999 )
'CHETRD(U)', iinfo, n, jtype,
935 IF( iinfo.LT.0 )
THEN 943 CALL clacpy(
'U', n, n, v, ldu, u, ldu )
946 CALL cungtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
947 IF( iinfo.NE.0 )
THEN 948 WRITE( nounit, fmt = 9999 )
'CUNGTR(U)', iinfo, n, jtype,
951 IF( iinfo.LT.0 )
THEN 961 CALL chet21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
962 $ ldu, tau, work, rwork, result( 1 ) )
963 CALL chet21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
964 $ ldu, tau, work, rwork, result( 2 ) )
969 CALL clacpy(
'L', n, n, a, lda, v, ldu )
972 CALL chetrd(
'L', n, v, ldu, sd, se, tau, work, lwork,
975 IF( iinfo.NE.0 )
THEN 976 WRITE( nounit, fmt = 9999 )
'CHETRD(L)', iinfo, n, jtype,
979 IF( iinfo.LT.0 )
THEN 987 CALL clacpy(
'L', n, n, v, ldu, u, ldu )
990 CALL cungtr(
'L', n, u, ldu, tau, work, lwork, iinfo )
991 IF( iinfo.NE.0 )
THEN 992 WRITE( nounit, fmt = 9999 )
'CUNGTR(L)', iinfo, n, jtype,
995 IF( iinfo.LT.0 )
THEN 1003 CALL chet21( 2,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
1004 $ ldu, tau, work, rwork, result( 3 ) )
1005 CALL chet21( 3,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
1006 $ ldu, tau, work, rwork, result( 4 ) )
1014 ap( i ) = a( jr, jc )
1020 CALL ccopy( nap, ap, 1, vp, 1 )
1023 CALL chptrd(
'U', n, vp, sd, se, tau, iinfo )
1025 IF( iinfo.NE.0 )
THEN 1026 WRITE( nounit, fmt = 9999 )
'CHPTRD(U)', iinfo, n, jtype,
1029 IF( iinfo.LT.0 )
THEN 1032 result( 5 ) = ulpinv
1038 CALL cupgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1039 IF( iinfo.NE.0 )
THEN 1040 WRITE( nounit, fmt = 9999 )
'CUPGTR(U)', iinfo, n, jtype,
1043 IF( iinfo.LT.0 )
THEN 1046 result( 6 ) = ulpinv
1053 CALL chpt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1054 $ work, rwork, result( 5 ) )
1055 CALL chpt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1056 $ work, rwork, result( 6 ) )
1064 ap( i ) = a( jr, jc )
1070 CALL ccopy( nap, ap, 1, vp, 1 )
1073 CALL chptrd(
'L', n, vp, sd, se, tau, iinfo )
1075 IF( iinfo.NE.0 )
THEN 1076 WRITE( nounit, fmt = 9999 )
'CHPTRD(L)', iinfo, n, jtype,
1079 IF( iinfo.LT.0 )
THEN 1082 result( 7 ) = ulpinv
1088 CALL cupgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1089 IF( iinfo.NE.0 )
THEN 1090 WRITE( nounit, fmt = 9999 )
'CUPGTR(L)', iinfo, n, jtype,
1093 IF( iinfo.LT.0 )
THEN 1096 result( 8 ) = ulpinv
1101 CALL chpt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1102 $ work, rwork, result( 7 ) )
1103 CALL chpt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1104 $ work, rwork, result( 8 ) )
1110 CALL scopy( n, sd, 1, d1, 1 )
1112 $
CALL scopy( n-1, se, 1, rwork, 1 )
1113 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1116 CALL csteqr(
'V', n, d1, rwork, z, ldu, rwork( n+1 ),
1118 IF( iinfo.NE.0 )
THEN 1119 WRITE( nounit, fmt = 9999 )
'CSTEQR(V)', iinfo, n, jtype,
1122 IF( iinfo.LT.0 )
THEN 1125 result( 9 ) = ulpinv
1132 CALL scopy( n, sd, 1, d2, 1 )
1134 $
CALL scopy( n-1, se, 1, rwork, 1 )
1137 CALL csteqr(
'N', n, d2, rwork, work, ldu, rwork( n+1 ),
1139 IF( iinfo.NE.0 )
THEN 1140 WRITE( nounit, fmt = 9999 )
'CSTEQR(N)', iinfo, n, jtype,
1143 IF( iinfo.LT.0 )
THEN 1146 result( 11 ) = ulpinv
1153 CALL scopy( n, sd, 1, d3, 1 )
1155 $
CALL scopy( n-1, se, 1, rwork, 1 )
1158 CALL ssterf( n, d3, rwork, iinfo )
1159 IF( iinfo.NE.0 )
THEN 1160 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1163 IF( iinfo.LT.0 )
THEN 1166 result( 12 ) = ulpinv
1173 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1184 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1185 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1186 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1187 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1190 result( 11 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1191 result( 12 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1197 temp1 = thresh*( half-ulp )
1199 DO 160 j = 0, log2ui
1200 CALL sstech( n, sd, se, d1, temp1, rwork, iinfo )
1207 result( 13 ) = temp1
1212 IF( jtype.GT.15 )
THEN 1216 CALL scopy( n, sd, 1, d4, 1 )
1218 $
CALL scopy( n-1, se, 1, rwork, 1 )
1219 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1222 CALL cpteqr(
'V', n, d4, rwork, z, ldu, rwork( n+1 ),
1224 IF( iinfo.NE.0 )
THEN 1225 WRITE( nounit, fmt = 9999 )
'CPTEQR(V)', iinfo, n,
1228 IF( iinfo.LT.0 )
THEN 1231 result( 14 ) = ulpinv
1238 CALL cstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1239 $ rwork, result( 14 ) )
1243 CALL scopy( n, sd, 1, d5, 1 )
1245 $
CALL scopy( n-1, se, 1, rwork, 1 )
1248 CALL cpteqr(
'N', n, d5, rwork, z, ldu, rwork( n+1 ),
1250 IF( iinfo.NE.0 )
THEN 1251 WRITE( nounit, fmt = 9999 )
'CPTEQR(N)', iinfo, n,
1254 IF( iinfo.LT.0 )
THEN 1257 result( 16 ) = ulpinv
1267 temp1 = max( temp1, abs( d4( j ) ), abs( d5( j ) ) )
1268 temp2 = max( temp2, abs( d4( j )-d5( j ) ) )
1271 result( 16 ) = temp2 / max( unfl,
1272 $ hun*ulp*max( temp1, temp2 ) )
1288 IF( jtype.EQ.21 )
THEN 1290 abstol = unfl + unfl
1291 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1292 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1293 $ rwork, iwork( 2*n+1 ), iinfo )
1294 IF( iinfo.NE.0 )
THEN 1295 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1298 IF( iinfo.LT.0 )
THEN 1301 result( 17 ) = ulpinv
1308 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1313 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1314 $ ( abstol+abs( d4( j ) ) ) )
1317 result( 17 ) = temp1 / temp2
1325 abstol = unfl + unfl
1326 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1327 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), rwork,
1328 $ iwork( 2*n+1 ), iinfo )
1329 IF( iinfo.NE.0 )
THEN 1330 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1333 IF( iinfo.LT.0 )
THEN 1336 result( 18 ) = ulpinv
1346 temp1 = max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1347 temp2 = max( temp2, abs( d3( j )-wa1( j ) ) )
1350 result( 18 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1360 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1361 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1369 CALL sstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1370 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1371 $ rwork, iwork( 2*n+1 ), iinfo )
1372 IF( iinfo.NE.0 )
THEN 1373 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1376 IF( iinfo.LT.0 )
THEN 1379 result( 19 ) = ulpinv
1389 vl = wa1( il ) - max( half*( wa1( il )-wa1( il-1 ) ),
1390 $ ulp*anorm, two*rtunfl )
1392 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1393 $ ulp*anorm, two*rtunfl )
1396 vu = wa1( iu ) + max( half*( wa1( iu+1 )-wa1( iu ) ),
1397 $ ulp*anorm, two*rtunfl )
1399 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1400 $ ulp*anorm, two*rtunfl )
1407 CALL sstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1408 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1409 $ rwork, iwork( 2*n+1 ), iinfo )
1410 IF( iinfo.NE.0 )
THEN 1411 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1414 IF( iinfo.LT.0 )
THEN 1417 result( 19 ) = ulpinv
1422 IF( m3.EQ.0 .AND. n.NE.0 )
THEN 1423 result( 19 ) = ulpinv
1429 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1430 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1432 temp3 = max( abs( wa1( n ) ), abs( wa1( 1 ) ) )
1437 result( 19 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1444 CALL sstebz(
'A',
'B', n, vl, vu, il, iu, abstol, sd, se, m,
1445 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), rwork,
1446 $ iwork( 2*n+1 ), iinfo )
1447 IF( iinfo.NE.0 )
THEN 1448 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1451 IF( iinfo.LT.0 )
THEN 1454 result( 20 ) = ulpinv
1455 result( 21 ) = ulpinv
1460 CALL cstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1461 $ ldu, rwork, iwork( 2*n+1 ), iwork( 3*n+1 ),
1463 IF( iinfo.NE.0 )
THEN 1464 WRITE( nounit, fmt = 9999 )
'CSTEIN', iinfo, n, jtype,
1467 IF( iinfo.LT.0 )
THEN 1470 result( 20 ) = ulpinv
1471 result( 21 ) = ulpinv
1478 CALL cstt21( n, 0, sd, se, wa1, dumma, z, ldu, work, rwork,
1487 CALL scopy( n, sd, 1, d1, 1 )
1489 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1490 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1493 CALL cstedc(
'I', n, d1, rwork( inde ), z, ldu, work, lwedc,
1494 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1495 IF( iinfo.NE.0 )
THEN 1496 WRITE( nounit, fmt = 9999 )
'CSTEDC(I)', iinfo, n, jtype,
1499 IF( iinfo.LT.0 )
THEN 1502 result( 22 ) = ulpinv
1509 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1516 CALL scopy( n, sd, 1, d1, 1 )
1518 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1519 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1522 CALL cstedc(
'V', n, d1, rwork( inde ), z, ldu, work, lwedc,
1523 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1524 IF( iinfo.NE.0 )
THEN 1525 WRITE( nounit, fmt = 9999 )
'CSTEDC(V)', iinfo, n, jtype,
1528 IF( iinfo.LT.0 )
THEN 1531 result( 24 ) = ulpinv
1538 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1545 CALL scopy( n, sd, 1, d2, 1 )
1547 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1548 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1551 CALL cstedc(
'N', n, d2, rwork( inde ), z, ldu, work, lwedc,
1552 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1553 IF( iinfo.NE.0 )
THEN 1554 WRITE( nounit, fmt = 9999 )
'CSTEDC(N)', iinfo, n, jtype,
1557 IF( iinfo.LT.0 )
THEN 1560 result( 26 ) = ulpinv
1571 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1572 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1575 result( 26 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1579 IF( ilaenv( 10,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1580 $ ilaenv( 11,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN 1591 IF( jtype.EQ.21 .AND. crel )
THEN 1593 abstol = unfl + unfl
1594 CALL cstemr(
'V',
'A', n, sd, se, vl, vu, il, iu,
1595 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1596 $ rwork, lrwork, iwork( 2*n+1 ), lwork-2*n,
1598 IF( iinfo.NE.0 )
THEN 1599 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A,rel)',
1600 $ iinfo, n, jtype, ioldsd
1602 IF( iinfo.LT.0 )
THEN 1605 result( 27 ) = ulpinv
1612 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1617 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1618 $ ( abstol+abs( d4( j ) ) ) )
1621 result( 27 ) = temp1 / temp2
1623 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1624 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1633 abstol = unfl + unfl
1634 CALL cstemr(
'V',
'I', n, sd, se, vl, vu, il, iu,
1635 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1636 $ rwork, lrwork, iwork( 2*n+1 ),
1637 $ lwork-2*n, iinfo )
1639 IF( iinfo.NE.0 )
THEN 1640 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,I,rel)',
1641 $ iinfo, n, jtype, ioldsd
1643 IF( iinfo.LT.0 )
THEN 1646 result( 28 ) = ulpinv
1654 temp2 = two*( two*n-one )*ulp*
1655 $ ( one+eight*half**2 ) / ( one-half )**4
1659 temp1 = max( temp1, abs( wr( j-il+1 )-d4( n-j+
1660 $ 1 ) ) / ( abstol+abs( wr( j-il+1 ) ) ) )
1663 result( 28 ) = temp1 / temp2
1676 CALL scopy( n, sd, 1, d5, 1 )
1678 $
CALL scopy( n-1, se, 1, rwork, 1 )
1679 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1683 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1684 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1690 CALL cstemr(
'V',
'I', n, d5, rwork, vl, vu, il, iu,
1691 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1692 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1693 $ liwork-2*n, iinfo )
1694 IF( iinfo.NE.0 )
THEN 1695 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,I)', iinfo,
1698 IF( iinfo.LT.0 )
THEN 1701 result( 29 ) = ulpinv
1713 CALL scopy( n, sd, 1, d5, 1 )
1715 $
CALL scopy( n-1, se, 1, rwork, 1 )
1718 CALL cstemr(
'N',
'I', n, d5, rwork, vl, vu, il, iu,
1719 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1720 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1721 $ liwork-2*n, iinfo )
1722 IF( iinfo.NE.0 )
THEN 1723 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,I)', iinfo,
1726 IF( iinfo.LT.0 )
THEN 1729 result( 31 ) = ulpinv
1739 DO 240 j = 1, iu - il + 1
1740 temp1 = max( temp1, abs( d1( j ) ),
1742 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1745 result( 31 ) = temp2 / max( unfl,
1746 $ ulp*max( temp1, temp2 ) )
1753 CALL scopy( n, sd, 1, d5, 1 )
1755 $
CALL scopy( n-1, se, 1, rwork, 1 )
1756 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1762 vl = d2( il ) - max( half*
1763 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1766 vl = d2( 1 ) - max( half*( d2( n )-d2( 1 ) ),
1767 $ ulp*anorm, two*rtunfl )
1770 vu = d2( iu ) + max( half*
1771 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1774 vu = d2( n ) + max( half*( d2( n )-d2( 1 ) ),
1775 $ ulp*anorm, two*rtunfl )
1782 CALL cstemr(
'V',
'V', n, d5, rwork, vl, vu, il, iu,
1783 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1784 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1785 $ liwork-2*n, iinfo )
1786 IF( iinfo.NE.0 )
THEN 1787 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,V)', iinfo,
1790 IF( iinfo.LT.0 )
THEN 1793 result( 32 ) = ulpinv
1800 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1801 $ m, rwork, result( 32 ) )
1807 CALL scopy( n, sd, 1, d5, 1 )
1809 $
CALL scopy( n-1, se, 1, rwork, 1 )
1812 CALL cstemr(
'N',
'V', n, d5, rwork, vl, vu, il, iu,
1813 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1814 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1815 $ liwork-2*n, iinfo )
1816 IF( iinfo.NE.0 )
THEN 1817 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,V)', iinfo,
1820 IF( iinfo.LT.0 )
THEN 1823 result( 34 ) = ulpinv
1833 DO 250 j = 1, iu - il + 1
1834 temp1 = max( temp1, abs( d1( j ) ),
1836 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1839 result( 34 ) = temp2 / max( unfl,
1840 $ ulp*max( temp1, temp2 ) )
1855 CALL scopy( n, sd, 1, d5, 1 )
1857 $
CALL scopy( n-1, se, 1, rwork, 1 )
1861 CALL cstemr(
'V',
'A', n, d5, rwork, vl, vu, il, iu,
1862 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1863 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1864 $ liwork-2*n, iinfo )
1865 IF( iinfo.NE.0 )
THEN 1866 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A)', iinfo, n,
1869 IF( iinfo.LT.0 )
THEN 1872 result( 35 ) = ulpinv
1879 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1880 $ rwork, result( 35 ) )
1886 CALL scopy( n, sd, 1, d5, 1 )
1888 $
CALL scopy( n-1, se, 1, rwork, 1 )
1891 CALL cstemr(
'N',
'A', n, d5, rwork, vl, vu, il, iu,
1892 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1893 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1894 $ liwork-2*n, iinfo )
1895 IF( iinfo.NE.0 )
THEN 1896 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,A)', iinfo, n,
1899 IF( iinfo.LT.0 )
THEN 1902 result( 37 ) = ulpinv
1913 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1914 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1917 result( 37 ) = temp2 / max( unfl,
1918 $ ulp*max( temp1, temp2 ) )
1922 ntestt = ntestt + ntest
1929 DO 290 jr = 1, ntest
1930 IF( result( jr ).GE.thresh )
THEN 1935 IF( nerrs.EQ.0 )
THEN 1936 WRITE( nounit, fmt = 9998 )
'CST' 1937 WRITE( nounit, fmt = 9997 )
1938 WRITE( nounit, fmt = 9996 )
1939 WRITE( nounit, fmt = 9995 )
'Hermitian' 1940 WRITE( nounit, fmt = 9994 )
1944 WRITE( nounit, fmt = 9987 )
1947 IF( result( jr ).LT.10000.0e0 )
THEN 1948 WRITE( nounit, fmt = 9989 )n, jtype, ioldsd, jr,
1951 WRITE( nounit, fmt = 9988 )n, jtype, ioldsd, jr,
1961 CALL slasum(
'CST', nounit, nerrs, ntestt )
1964 9999
FORMAT(
' CCHKST: ', a,
' returned INFO=', i6,
'.', / 9x,
'N=',
1965 $ i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
1967 9998
FORMAT( / 1x, a3,
' -- Complex Hermitian eigenvalue problem' )
1968 9997
FORMAT(
' Matrix types (see CCHKST for details): ' )
1970 9996
FORMAT( /
' Special Matrices:',
1971 $ /
' 1=Zero matrix. ',
1972 $
' 5=Diagonal: clustered entries.',
1973 $ /
' 2=Identity matrix. ',
1974 $
' 6=Diagonal: large, evenly spaced.',
1975 $ /
' 3=Diagonal: evenly spaced entries. ',
1976 $
' 7=Diagonal: small, evenly spaced.',
1977 $ /
' 4=Diagonal: geometr. spaced entries.' )
1978 9995
FORMAT(
' Dense ', a,
' Matrices:',
1979 $ /
' 8=Evenly spaced eigenvals. ',
1980 $
' 12=Small, evenly spaced eigenvals.',
1981 $ /
' 9=Geometrically spaced eigenvals. ',
1982 $
' 13=Matrix with random O(1) entries.',
1983 $ /
' 10=Clustered eigenvalues. ',
1984 $
' 14=Matrix with large random entries.',
1985 $ /
' 11=Large, evenly spaced eigenvals. ',
1986 $
' 15=Matrix with small random entries.' )
1987 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
1988 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
1989 $ /
' 18=Positive definite, clustered eigenvalues',
1990 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
1991 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
1992 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
1993 $
' spaced eigenvalues' )
1995 9989
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1996 $ 4( i4,
',' ),
' result ', i3,
' is', 0p, f8.2 )
1997 9988
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1998 $ 4( i4,
',' ),
' result ', i3,
' is', 1p, e10.3 )
2000 9987
FORMAT( /
'Test performed: see CCHKST for details.', / )
subroutine sstebz(RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO)
SSTEBZ
subroutine cupgtr(UPLO, N, AP, TAU, Q, LDQ, WORK, INFO)
CUPGTR
subroutine cpteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
CPTEQR
subroutine chptrd(UPLO, N, AP, D, E, TAU, INFO)
CHPTRD
subroutine cungtr(UPLO, N, A, LDA, TAU, WORK, LWORK, INFO)
CUNGTR
subroutine cstt21(N, KBAND, AD, AE, SD, SE, U, LDU, WORK, RWORK, RESULT)
CSTT21
subroutine clatmr(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, RSIGN, GRADE, DL, MODEL, CONDL, DR, MODER, CONDR, PIVTNG, IPIVOT, KL, KU, SPARSE, ANORM, PACK, A, LDA, IWORK, INFO)
CLATMR
subroutine claset(UPLO, M, N, ALPHA, BETA, A, LDA)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values...
subroutine csteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
CSTEQR
subroutine chetrd(UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO)
CHETRD
subroutine sstech(N, A, B, EIG, TOL, WORK, INFO)
SSTECH
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine chet21(ITYPE, UPLO, N, KBAND, A, LDA, D, E, U, LDU, V, LDV, TAU, WORK, RWORK, RESULT)
CHET21
subroutine clacpy(UPLO, M, N, A, LDA, B, LDB)
CLACPY copies all or part of one two-dimensional array to another.
subroutine slabad(SMALL, LARGE)
SLABAD
subroutine cstedc(COMPZ, N, D, E, Z, LDZ, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
CSTEDC
subroutine clatms(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, KL, KU, PACK, A, LDA, WORK, INFO)
CLATMS
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine cstemr(JOBZ, RANGE, N, D, E, VL, VU, IL, IU, M, W, Z, LDZ, NZC, ISUPPZ, TRYRAC, WORK, LWORK, IWORK, LIWORK, INFO)
CSTEMR
subroutine cstt22(N, M, KBAND, AD, AE, SD, SE, U, LDU, WORK, LDWORK, RWORK, RESULT)
CSTT22
subroutine cstein(N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK, IWORK, IFAIL, INFO)
CSTEIN
subroutine cchkst(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, AP, SD, SE, D1, D2, D3, D4, D5, WA1, WA2, WA3, WR, U, LDU, V, VP, TAU, Z, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, RESULT, INFO)
CCHKST
subroutine chpt21(ITYPE, UPLO, N, KBAND, AP, D, E, U, LDU, VP, TAU, WORK, RWORK, RESULT)
CHPT21
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine slasum(TYPE, IOUNIT, IE, NRUN)
SLASUM
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY