599 SUBROUTINE cchkst( 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, LRWORK, LWORK, NOUNIT,
616 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
617 REAL D1( * ), D2( * ), D3( * ), D4( * ), D5( * ),
618 $ RESULT( * ), RWORK( * ), SD( * ), SE( * ),
619 $ wa1( * ), wa2( * ), wa3( * ), wr( * )
620 COMPLEX A( LDA, * ), AP( * ), TAU( * ), U( LDU, * ),
621 $ v( ldu, * ), vp( * ), work( * ), z( ldu, * )
627 REAL ZERO, ONE, TWO, EIGHT, TEN, HUN
628 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
629 $ eight = 8.0e0, ten = 10.0e0, hun = 100.0e0 )
631 parameter( czero = ( 0.0e+0, 0.0e+0 ),
632 $ cone = ( 1.0e+0, 0.0e+0 ) )
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 REAL 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 ),
661 REAL SLAMCH, SLARND, SSXT1
662 EXTERNAL ILAENV, SLAMCH, SLARND, SSXT1
671 INTRINSIC abs, conjg, int, log, max, min, real, sqrt
674 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
675 $ 8, 8, 9, 9, 9, 9, 9, 10 /
676 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
677 $ 2, 3, 1, 1, 1, 2, 3, 1 /
678 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
679 $ 0, 0, 4, 3, 1, 4, 4, 3 /
697 nmax = max( nmax, nn( j ) )
702 nblock = ilaenv( 1,
'CHETRD',
'L', nmax, -1, -1, -1 )
703 nblock = min( nmax, max( 1, nblock ) )
707 IF( nsizes.LT.0 )
THEN
709 ELSE IF( badnn )
THEN
711 ELSE IF( ntypes.LT.0 )
THEN
713 ELSE IF( lda.LT.nmax )
THEN
715 ELSE IF( ldu.LT.nmax )
THEN
717 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN
722 CALL xerbla(
'CCHKST', -info )
728 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
733 unfl = slamch(
'Safe minimum' )
735 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
737 log2ui = int( log( ulpinv ) / log( two ) )
738 rtunfl = sqrt( unfl )
739 rtovfl = sqrt( ovfl )
744 iseed2( i ) = iseed( i )
749 DO 310 jsize = 1, nsizes
752 lgn = int( log( real( n ) ) / log( two ) )
757 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
758 lrwedc = 1 + 3*n + 2*n*lgn + 4*n**2
759 liwedc = 6 + 6*n + 5*n*lgn
765 nap = ( n*( n+1 ) ) / 2
766 aninv = one / real( max( 1, n ) )
768 IF( nsizes.NE.1 )
THEN
769 mtypes = min( maxtyp, ntypes )
771 mtypes = min( maxtyp+1, ntypes )
774 DO 300 jtype = 1, mtypes
775 IF( .NOT.dotype( jtype ) )
781 ioldsd( j ) = iseed( j )
800 IF( mtypes.GT.maxtyp )
803 itype = ktype( jtype )
804 imode = kmode( jtype )
808 GO TO ( 40, 50, 60 )kmagn( jtype )
815 anorm = ( rtovfl*ulp )*aninv
819 anorm = rtunfl*n*ulpinv
824 CALL claset(
'Full', lda, n, czero, czero, a, lda )
826 IF( jtype.LE.15 )
THEN
829 cond = ulpinv*aninv / ten
836 IF( itype.EQ.1 )
THEN
839 ELSE IF( itype.EQ.2 )
THEN
847 ELSE IF( itype.EQ.4 )
THEN
851 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
852 $ anorm, 0, 0,
'N', a, lda, work, iinfo )
855 ELSE IF( itype.EQ.5 )
THEN
859 CALL clatms( n, n,
'S', iseed,
'H', rwork, imode, cond,
860 $ anorm, n, n,
'N', a, lda, work, iinfo )
862 ELSE IF( itype.EQ.7 )
THEN
866 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
867 $
'T',
'N', work( n+1 ), 1, one,
868 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
869 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
871 ELSE IF( itype.EQ.8 )
THEN
875 CALL clatmr( n, n,
'S', iseed,
'H', work, 6, one, cone,
876 $
'T',
'N', work( n+1 ), 1, one,
877 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
878 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
880 ELSE IF( itype.EQ.9 )
THEN
884 CALL clatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
885 $ anorm, n, n,
'N', a, lda, work, iinfo )
887 ELSE IF( itype.EQ.10 )
THEN
891 CALL clatms( n, n,
'S', iseed,
'P', rwork, imode, cond,
892 $ anorm, 1, 1,
'N', a, lda, work, iinfo )
894 temp1 = abs( a( i-1, i ) )
895 temp2 = sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
896 IF( temp1.GT.half*temp2 )
THEN
897 a( i-1, i ) = a( i-1, i )*
898 $ ( half*temp2 / ( unfl+temp1 ) )
899 a( i, i-1 ) = conjg( a( i-1, i ) )
908 IF( iinfo.NE.0 )
THEN
909 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
920 CALL clacpy(
'U', n, n, a, lda, v, ldu )
923 CALL chetrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
926 IF( iinfo.NE.0 )
THEN
927 WRITE( nounit, fmt = 9999 )
'CHETRD(U)', iinfo, n, jtype,
930 IF( iinfo.LT.0 )
THEN
938 CALL clacpy(
'U', n, n, v, ldu, u, ldu )
941 CALL cungtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
942 IF( iinfo.NE.0 )
THEN
943 WRITE( nounit, fmt = 9999 )
'CUNGTR(U)', iinfo, n, jtype,
946 IF( iinfo.LT.0 )
THEN
956 CALL chet21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
957 $ ldu, tau, work, rwork, result( 1 ) )
958 CALL chet21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
959 $ ldu, tau, work, rwork, result( 2 ) )
964 CALL clacpy(
'L', n, n, a, lda, v, ldu )
967 CALL chetrd(
'L', n, v, ldu, sd, se, tau, work, lwork,
970 IF( iinfo.NE.0 )
THEN
971 WRITE( nounit, fmt = 9999 )
'CHETRD(L)', iinfo, n, jtype,
974 IF( iinfo.LT.0 )
THEN
982 CALL clacpy(
'L', n, n, v, ldu, u, ldu )
985 CALL cungtr(
'L', n, u, ldu, tau, work, lwork, iinfo )
986 IF( iinfo.NE.0 )
THEN
987 WRITE( nounit, fmt = 9999 )
'CUNGTR(L)', iinfo, n, jtype,
990 IF( iinfo.LT.0 )
THEN
998 CALL chet21( 2,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
999 $ ldu, tau, work, rwork, result( 3 ) )
1000 CALL chet21( 3,
'Lower', n, 1, a, lda, sd, se, u, ldu, v,
1001 $ ldu, tau, work, rwork, result( 4 ) )
1009 ap( i ) = a( jr, jc )
1015 CALL ccopy( nap, ap, 1, vp, 1 )
1018 CALL chptrd(
'U', n, vp, sd, se, tau, iinfo )
1020 IF( iinfo.NE.0 )
THEN
1021 WRITE( nounit, fmt = 9999 )
'CHPTRD(U)', iinfo, n, jtype,
1024 IF( iinfo.LT.0 )
THEN
1027 result( 5 ) = ulpinv
1033 CALL cupgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1034 IF( iinfo.NE.0 )
THEN
1035 WRITE( nounit, fmt = 9999 )
'CUPGTR(U)', iinfo, n, jtype,
1038 IF( iinfo.LT.0 )
THEN
1041 result( 6 ) = ulpinv
1048 CALL chpt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1049 $ work, rwork, result( 5 ) )
1050 CALL chpt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1051 $ work, rwork, result( 6 ) )
1059 ap( i ) = a( jr, jc )
1065 CALL ccopy( nap, ap, 1, vp, 1 )
1068 CALL chptrd(
'L', n, vp, sd, se, tau, iinfo )
1070 IF( iinfo.NE.0 )
THEN
1071 WRITE( nounit, fmt = 9999 )
'CHPTRD(L)', iinfo, n, jtype,
1074 IF( iinfo.LT.0 )
THEN
1077 result( 7 ) = ulpinv
1083 CALL cupgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1084 IF( iinfo.NE.0 )
THEN
1085 WRITE( nounit, fmt = 9999 )
'CUPGTR(L)', iinfo, n, jtype,
1088 IF( iinfo.LT.0 )
THEN
1091 result( 8 ) = ulpinv
1096 CALL chpt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1097 $ work, rwork, result( 7 ) )
1098 CALL chpt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1099 $ work, rwork, result( 8 ) )
1105 CALL scopy( n, sd, 1, d1, 1 )
1107 $
CALL scopy( n-1, se, 1, rwork, 1 )
1108 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1111 CALL csteqr(
'V', n, d1, rwork, z, ldu, rwork( n+1 ),
1113 IF( iinfo.NE.0 )
THEN
1114 WRITE( nounit, fmt = 9999 )
'CSTEQR(V)', iinfo, n, jtype,
1117 IF( iinfo.LT.0 )
THEN
1120 result( 9 ) = ulpinv
1127 CALL scopy( n, sd, 1, d2, 1 )
1129 $
CALL scopy( n-1, se, 1, rwork, 1 )
1132 CALL csteqr(
'N', n, d2, rwork, work, ldu, rwork( n+1 ),
1134 IF( iinfo.NE.0 )
THEN
1135 WRITE( nounit, fmt = 9999 )
'CSTEQR(N)', iinfo, n, jtype,
1138 IF( iinfo.LT.0 )
THEN
1141 result( 11 ) = ulpinv
1148 CALL scopy( n, sd, 1, d3, 1 )
1150 $
CALL scopy( n-1, se, 1, rwork, 1 )
1153 CALL ssterf( n, d3, rwork, iinfo )
1154 IF( iinfo.NE.0 )
THEN
1155 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1158 IF( iinfo.LT.0 )
THEN
1161 result( 12 ) = ulpinv
1168 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1179 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1180 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1181 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1182 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1185 result( 11 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1186 result( 12 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1192 temp1 = thresh*( half-ulp )
1194 DO 160 j = 0, log2ui
1195 CALL sstech( n, sd, se, d1, temp1, rwork, iinfo )
1202 result( 13 ) = temp1
1207 IF( jtype.GT.15 )
THEN
1211 CALL scopy( n, sd, 1, d4, 1 )
1213 $
CALL scopy( n-1, se, 1, rwork, 1 )
1214 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1217 CALL cpteqr(
'V', n, d4, rwork, z, ldu, rwork( n+1 ),
1219 IF( iinfo.NE.0 )
THEN
1220 WRITE( nounit, fmt = 9999 )
'CPTEQR(V)', iinfo, n,
1223 IF( iinfo.LT.0 )
THEN
1226 result( 14 ) = ulpinv
1233 CALL cstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1234 $ rwork, result( 14 ) )
1238 CALL scopy( n, sd, 1, d5, 1 )
1240 $
CALL scopy( n-1, se, 1, rwork, 1 )
1243 CALL cpteqr(
'N', n, d5, rwork, z, ldu, rwork( n+1 ),
1245 IF( iinfo.NE.0 )
THEN
1246 WRITE( nounit, fmt = 9999 )
'CPTEQR(N)', iinfo, n,
1249 IF( iinfo.LT.0 )
THEN
1252 result( 16 ) = ulpinv
1262 temp1 = max( temp1, abs( d4( j ) ), abs( d5( j ) ) )
1263 temp2 = max( temp2, abs( d4( j )-d5( j ) ) )
1266 result( 16 ) = temp2 / max( unfl,
1267 $ hun*ulp*max( temp1, temp2 ) )
1283 IF( jtype.EQ.21 )
THEN
1285 abstol = unfl + unfl
1286 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1287 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1288 $ rwork, iwork( 2*n+1 ), iinfo )
1289 IF( iinfo.NE.0 )
THEN
1290 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1293 IF( iinfo.LT.0 )
THEN
1296 result( 17 ) = ulpinv
1303 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1308 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1309 $ ( abstol+abs( d4( j ) ) ) )
1312 result( 17 ) = temp1 / temp2
1320 abstol = unfl + unfl
1321 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1322 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), rwork,
1323 $ iwork( 2*n+1 ), iinfo )
1324 IF( iinfo.NE.0 )
THEN
1325 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1328 IF( iinfo.LT.0 )
THEN
1331 result( 18 ) = ulpinv
1341 temp1 = max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1342 temp2 = max( temp2, abs( d3( j )-wa1( j ) ) )
1345 result( 18 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1355 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1356 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1364 CALL sstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1365 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1366 $ rwork, iwork( 2*n+1 ), iinfo )
1367 IF( iinfo.NE.0 )
THEN
1368 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1371 IF( iinfo.LT.0 )
THEN
1374 result( 19 ) = ulpinv
1384 vl = wa1( il ) - max( half*( wa1( il )-wa1( il-1 ) ),
1385 $ ulp*anorm, two*rtunfl )
1387 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1388 $ ulp*anorm, two*rtunfl )
1391 vu = wa1( iu ) + max( half*( wa1( iu+1 )-wa1( iu ) ),
1392 $ ulp*anorm, two*rtunfl )
1394 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1395 $ ulp*anorm, two*rtunfl )
1402 CALL sstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1403 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1404 $ rwork, iwork( 2*n+1 ), iinfo )
1405 IF( iinfo.NE.0 )
THEN
1406 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1409 IF( iinfo.LT.0 )
THEN
1412 result( 19 ) = ulpinv
1417 IF( m3.EQ.0 .AND. n.NE.0 )
THEN
1418 result( 19 ) = ulpinv
1424 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1425 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1427 temp3 = max( abs( wa1( n ) ), abs( wa1( 1 ) ) )
1432 result( 19 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1439 CALL sstebz(
'A',
'B', n, vl, vu, il, iu, abstol, sd, se, m,
1440 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), rwork,
1441 $ iwork( 2*n+1 ), iinfo )
1442 IF( iinfo.NE.0 )
THEN
1443 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1446 IF( iinfo.LT.0 )
THEN
1449 result( 20 ) = ulpinv
1450 result( 21 ) = ulpinv
1455 CALL cstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1456 $ ldu, rwork, iwork( 2*n+1 ), iwork( 3*n+1 ),
1458 IF( iinfo.NE.0 )
THEN
1459 WRITE( nounit, fmt = 9999 )
'CSTEIN', iinfo, n, jtype,
1462 IF( iinfo.LT.0 )
THEN
1465 result( 20 ) = ulpinv
1466 result( 21 ) = ulpinv
1473 CALL cstt21( n, 0, sd, se, wa1, dumma, z, ldu, work, rwork,
1482 CALL scopy( n, sd, 1, d1, 1 )
1484 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1485 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1488 CALL cstedc(
'I', n, d1, rwork( inde ), z, ldu, work, lwedc,
1489 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1490 IF( iinfo.NE.0 )
THEN
1491 WRITE( nounit, fmt = 9999 )
'CSTEDC(I)', iinfo, n, jtype,
1494 IF( iinfo.LT.0 )
THEN
1497 result( 22 ) = ulpinv
1504 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1511 CALL scopy( n, sd, 1, d1, 1 )
1513 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1514 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1517 CALL cstedc(
'V', n, d1, rwork( inde ), z, ldu, work, lwedc,
1518 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1519 IF( iinfo.NE.0 )
THEN
1520 WRITE( nounit, fmt = 9999 )
'CSTEDC(V)', iinfo, n, jtype,
1523 IF( iinfo.LT.0 )
THEN
1526 result( 24 ) = ulpinv
1533 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1540 CALL scopy( n, sd, 1, d2, 1 )
1542 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1543 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1546 CALL cstedc(
'N', n, d2, rwork( inde ), z, ldu, work, lwedc,
1547 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1548 IF( iinfo.NE.0 )
THEN
1549 WRITE( nounit, fmt = 9999 )
'CSTEDC(N)', iinfo, n, jtype,
1552 IF( iinfo.LT.0 )
THEN
1555 result( 26 ) = ulpinv
1566 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1567 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1570 result( 26 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1574 IF( ilaenv( 10,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1575 $ ilaenv( 11,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1586 IF( jtype.EQ.21 .AND. crel )
THEN
1588 abstol = unfl + unfl
1589 CALL cstemr(
'V',
'A', n, sd, se, vl, vu, il, iu,
1590 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1591 $ rwork, lrwork, iwork( 2*n+1 ), lwork-2*n,
1593 IF( iinfo.NE.0 )
THEN
1594 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A,rel)',
1595 $ iinfo, n, jtype, ioldsd
1597 IF( iinfo.LT.0 )
THEN
1600 result( 27 ) = ulpinv
1607 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1612 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1613 $ ( abstol+abs( d4( j ) ) ) )
1616 result( 27 ) = temp1 / temp2
1618 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1619 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1628 abstol = unfl + unfl
1629 CALL cstemr(
'V',
'I', n, sd, se, vl, vu, il, iu,
1630 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1631 $ rwork, lrwork, iwork( 2*n+1 ),
1632 $ lwork-2*n, iinfo )
1634 IF( iinfo.NE.0 )
THEN
1635 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,I,rel)',
1636 $ iinfo, n, jtype, ioldsd
1638 IF( iinfo.LT.0 )
THEN
1641 result( 28 ) = ulpinv
1649 temp2 = two*( two*n-one )*ulp*
1650 $ ( one+eight*half**2 ) / ( one-half )**4
1654 temp1 = max( temp1, abs( wr( j-il+1 )-d4( n-j+
1655 $ 1 ) ) / ( abstol+abs( wr( j-il+1 ) ) ) )
1658 result( 28 ) = temp1 / temp2
1671 CALL scopy( n, sd, 1, d5, 1 )
1673 $
CALL scopy( n-1, se, 1, rwork, 1 )
1674 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1678 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1679 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1685 CALL cstemr(
'V',
'I', n, d5, rwork, vl, vu, il, iu,
1686 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1687 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1688 $ liwork-2*n, iinfo )
1689 IF( iinfo.NE.0 )
THEN
1690 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,I)', iinfo,
1693 IF( iinfo.LT.0 )
THEN
1696 result( 29 ) = ulpinv
1708 CALL scopy( n, sd, 1, d5, 1 )
1710 $
CALL scopy( n-1, se, 1, rwork, 1 )
1713 CALL cstemr(
'N',
'I', n, d5, rwork, vl, vu, il, iu,
1714 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1715 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1716 $ liwork-2*n, iinfo )
1717 IF( iinfo.NE.0 )
THEN
1718 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,I)', iinfo,
1721 IF( iinfo.LT.0 )
THEN
1724 result( 31 ) = ulpinv
1734 DO 240 j = 1, iu - il + 1
1735 temp1 = max( temp1, abs( d1( j ) ),
1737 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1740 result( 31 ) = temp2 / max( unfl,
1741 $ ulp*max( temp1, temp2 ) )
1748 CALL scopy( n, sd, 1, d5, 1 )
1750 $
CALL scopy( n-1, se, 1, rwork, 1 )
1751 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1757 vl = d2( il ) - max( half*
1758 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1761 vl = d2( 1 ) - max( half*( d2( n )-d2( 1 ) ),
1762 $ ulp*anorm, two*rtunfl )
1765 vu = d2( iu ) + max( half*
1766 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1769 vu = d2( n ) + max( half*( d2( n )-d2( 1 ) ),
1770 $ ulp*anorm, two*rtunfl )
1777 CALL cstemr(
'V',
'V', n, d5, rwork, vl, vu, il, iu,
1778 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1779 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1780 $ liwork-2*n, iinfo )
1781 IF( iinfo.NE.0 )
THEN
1782 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,V)', iinfo,
1785 IF( iinfo.LT.0 )
THEN
1788 result( 32 ) = ulpinv
1795 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1796 $ m, rwork, result( 32 ) )
1802 CALL scopy( n, sd, 1, d5, 1 )
1804 $
CALL scopy( n-1, se, 1, rwork, 1 )
1807 CALL cstemr(
'N',
'V', n, d5, rwork, vl, vu, il, iu,
1808 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1809 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1810 $ liwork-2*n, iinfo )
1811 IF( iinfo.NE.0 )
THEN
1812 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,V)', iinfo,
1815 IF( iinfo.LT.0 )
THEN
1818 result( 34 ) = ulpinv
1828 DO 250 j = 1, iu - il + 1
1829 temp1 = max( temp1, abs( d1( j ) ),
1831 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1834 result( 34 ) = temp2 / max( unfl,
1835 $ ulp*max( temp1, temp2 ) )
1850 CALL scopy( n, sd, 1, d5, 1 )
1852 $
CALL scopy( n-1, se, 1, rwork, 1 )
1856 CALL cstemr(
'V',
'A', n, d5, rwork, vl, vu, il, iu,
1857 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1858 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1859 $ liwork-2*n, iinfo )
1860 IF( iinfo.NE.0 )
THEN
1861 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A)', iinfo, n,
1864 IF( iinfo.LT.0 )
THEN
1867 result( 35 ) = ulpinv
1874 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1875 $ rwork, result( 35 ) )
1881 CALL scopy( n, sd, 1, d5, 1 )
1883 $
CALL scopy( n-1, se, 1, rwork, 1 )
1886 CALL cstemr(
'N',
'A', n, d5, rwork, vl, vu, il, iu,
1887 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1888 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1889 $ liwork-2*n, iinfo )
1890 IF( iinfo.NE.0 )
THEN
1891 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,A)', iinfo, n,
1894 IF( iinfo.LT.0 )
THEN
1897 result( 37 ) = ulpinv
1908 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1909 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1912 result( 37 ) = temp2 / max( unfl,
1913 $ ulp*max( temp1, temp2 ) )
1917 ntestt = ntestt + ntest
1924 DO 290 jr = 1, ntest
1925 IF( result( jr ).GE.thresh )
THEN
1930 IF( nerrs.EQ.0 )
THEN
1931 WRITE( nounit, fmt = 9998 )
'CST'
1932 WRITE( nounit, fmt = 9997 )
1933 WRITE( nounit, fmt = 9996 )
1934 WRITE( nounit, fmt = 9995 )
'Hermitian'
1935 WRITE( nounit, fmt = 9994 )
1939 WRITE( nounit, fmt = 9987 )
1942 IF( result( jr ).LT.10000.0e0 )
THEN
1943 WRITE( nounit, fmt = 9989 )n, jtype, ioldsd, jr,
1946 WRITE( nounit, fmt = 9988 )n, jtype, ioldsd, jr,
1956 CALL slasum(
'CST', nounit, nerrs, ntestt )
1959 9999
FORMAT(
' CCHKST: ', a,
' returned INFO=', i6,
'.', / 9x,
'N=',
1960 $ i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
1962 9998
FORMAT( / 1x, a3,
' -- Complex Hermitian eigenvalue problem' )
1963 9997
FORMAT(
' Matrix types (see CCHKST for details): ' )
1965 9996
FORMAT( /
' Special Matrices:',
1966 $ /
' 1=Zero matrix. ',
1967 $
' 5=Diagonal: clustered entries.',
1968 $ /
' 2=Identity matrix. ',
1969 $
' 6=Diagonal: large, evenly spaced.',
1970 $ /
' 3=Diagonal: evenly spaced entries. ',
1971 $
' 7=Diagonal: small, evenly spaced.',
1972 $ /
' 4=Diagonal: geometr. spaced entries.' )
1973 9995
FORMAT(
' Dense ', a,
' Matrices:',
1974 $ /
' 8=Evenly spaced eigenvals. ',
1975 $
' 12=Small, evenly spaced eigenvals.',
1976 $ /
' 9=Geometrically spaced eigenvals. ',
1977 $
' 13=Matrix with random O(1) entries.',
1978 $ /
' 10=Clustered eigenvalues. ',
1979 $
' 14=Matrix with large random entries.',
1980 $ /
' 11=Large, evenly spaced eigenvals. ',
1981 $
' 15=Matrix with small random entries.' )
1982 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
1983 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
1984 $ /
' 18=Positive definite, clustered eigenvalues',
1985 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
1986 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
1987 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
1988 $
' spaced eigenvalues' )
1990 9989
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1991 $ 4( i4,
',' ),
' result ', i3,
' is', 0p, f8.2 )
1992 9988
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1993 $ 4( i4,
',' ),
' result ', i3,
' is', 1p, e10.3 )
1995 9987
FORMAT( /
'Test performed: see CCHKST for details.', / )
subroutine xerbla(srname, info)
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 chet21(itype, uplo, n, kband, a, lda, d, e, u, ldu, v, ldv, tau, work, rwork, result)
CHET21
subroutine chpt21(itype, uplo, n, kband, ap, d, e, u, ldu, vp, tau, work, rwork, result)
CHPT21
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 clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS
subroutine cstt21(n, kband, ad, ae, sd, se, u, ldu, work, rwork, result)
CSTT21
subroutine cstt22(n, m, kband, ad, ae, sd, se, u, ldu, work, ldwork, rwork, result)
CSTT22
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine chetrd(uplo, n, a, lda, d, e, tau, work, lwork, info)
CHETRD
subroutine chptrd(uplo, n, ap, d, e, tau, info)
CHPTRD
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
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 cpteqr(compz, n, d, e, z, ldz, work, info)
CPTEQR
subroutine sstebz(range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
SSTEBZ
subroutine cstedc(compz, n, d, e, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
CSTEDC
subroutine cstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
CSTEIN
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 csteqr(compz, n, d, e, z, ldz, work, info)
CSTEQR
subroutine ssterf(n, d, e, info)
SSTERF
subroutine cungtr(uplo, n, a, lda, tau, work, lwork, info)
CUNGTR
subroutine cupgtr(uplo, n, ap, tau, q, ldq, work, info)
CUPGTR
subroutine slasum(type, iounit, ie, nrun)
SLASUM
subroutine sstech(n, a, b, eig, tol, work, info)
SSTECH