620 SUBROUTINE cchkst2stg( 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,
637 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
638 REAL D1( * ), D2( * ), D3( * ), D4( * ), D5( * ),
639 $ RESULT( * ), RWORK( * ), SD( * ), SE( * ),
640 $ wa1( * ), wa2( * ), wa3( * ), wr( * )
641 COMPLEX A( LDA, * ), AP( * ), TAU( * ), U( LDU, * ),
642 $ v( ldu, * ), vp( * ), work( * ), z( ldu, * )
648 REAL ZERO, ONE, TWO, EIGHT, TEN, HUN
649 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
650 $ eight = 8.0e0, ten = 10.0e0, hun = 100.0e0 )
652 parameter( czero = ( 0.0e+0, 0.0e+0 ),
653 $ cone = ( 1.0e+0, 0.0e+0 ) )
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 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
671 $ RTUNFL, TEMP1, TEMP2, TEMP3, TEMP4, ULP,
672 $ ULPINV, UNFL, VL, VU
675 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
676 $ KMAGN( MAXTYP ), KMODE( MAXTYP ),
682 REAL SLAMCH, SLARND, SSXT1
683 EXTERNAL ILAENV, SLAMCH, SLARND, SSXT1
693 INTRINSIC abs, real, conjg, 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,
'CHETRD',
'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(
'CCHKST2STG', -info )
750 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
755 unfl = slamch(
'Safe minimum' )
758 ulp = slamch(
'Epsilon' )*slamch(
'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( real( 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 / real( 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 claset(
'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 clatms( 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 clatms( 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 clatmr( 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 clatmr( 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 clatms( 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 clatms( 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 ) = conjg( a( i-1, i ) )
931 IF( iinfo.NE.0 )
THEN
932 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
943 CALL clacpy(
'U', n, n, a, lda, v, ldu )
946 CALL chetrd(
'U', n, v, ldu, sd, se, tau, work, lwork,
949 IF( iinfo.NE.0 )
THEN
950 WRITE( nounit, fmt = 9999 )
'CHETRD(U)', iinfo, n, jtype,
953 IF( iinfo.LT.0 )
THEN
961 CALL clacpy(
'U', n, n, v, ldu, u, ldu )
964 CALL cungtr(
'U', n, u, ldu, tau, work, lwork, iinfo )
965 IF( iinfo.NE.0 )
THEN
966 WRITE( nounit, fmt = 9999 )
'CUNGTR(U)', iinfo, n, jtype,
969 IF( iinfo.LT.0 )
THEN
979 CALL chet21( 2,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
980 $ ldu, tau, work, rwork, result( 1 ) )
981 CALL chet21( 3,
'Upper', n, 1, a, lda, sd, se, u, ldu, v,
982 $ ldu, tau, work, rwork, result( 2 ) )
991 CALL scopy( n, sd, 1, d1, 1 )
993 $
CALL scopy( n-1, se, 1, rwork, 1 )
995 CALL csteqr(
'N', n, d1, rwork, work, ldu, rwork( n+1 ),
997 IF( iinfo.NE.0 )
THEN
998 WRITE( nounit, fmt = 9999 )
'CSTEQR(N)', iinfo, n, jtype,
1001 IF( iinfo.LT.0 )
THEN
1004 result( 3 ) = ulpinv
1014 CALL slaset(
'Full', n, 1, zero, zero, sd, n )
1015 CALL slaset(
'Full', n, 1, zero, zero, se, n )
1016 CALL clacpy(
'U', n, n, a, lda, v, ldu )
1020 $ work, lh, work( lh+1 ), lw, iinfo )
1024 CALL scopy( n, sd, 1, d2, 1 )
1026 $
CALL scopy( n-1, se, 1, rwork, 1 )
1029 CALL csteqr(
'N', n, d2, rwork, work, ldu, rwork( n+1 ),
1031 IF( iinfo.NE.0 )
THEN
1032 WRITE( nounit, fmt = 9999 )
'CSTEQR(N)', iinfo, n, jtype,
1035 IF( iinfo.LT.0 )
THEN
1038 result( 3 ) = ulpinv
1048 CALL slaset(
'Full', n, 1, zero, zero, sd, n )
1049 CALL slaset(
'Full', n, 1, zero, zero, se, n )
1050 CALL clacpy(
'L', n, n, a, lda, v, ldu )
1052 $ work, lh, work( lh+1 ), lw, iinfo )
1056 CALL scopy( n, sd, 1, d3, 1 )
1058 $
CALL scopy( n-1, se, 1, rwork, 1 )
1061 CALL csteqr(
'N', n, d3, rwork, work, ldu, rwork( n+1 ),
1063 IF( iinfo.NE.0 )
THEN
1064 WRITE( nounit, fmt = 9999 )
'CSTEQR(N)', iinfo, n, jtype,
1067 IF( iinfo.LT.0 )
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 ccopy( nap, ap, 1, vp, 1 )
1109 CALL chptrd(
'U', n, vp, sd, se, tau, iinfo )
1111 IF( iinfo.NE.0 )
THEN
1112 WRITE( nounit, fmt = 9999 )
'CHPTRD(U)', iinfo, n, jtype,
1115 IF( iinfo.LT.0 )
THEN
1118 result( 5 ) = ulpinv
1124 CALL cupgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1125 IF( iinfo.NE.0 )
THEN
1126 WRITE( nounit, fmt = 9999 )
'CUPGTR(U)', iinfo, n, jtype,
1129 IF( iinfo.LT.0 )
THEN
1132 result( 6 ) = ulpinv
1139 CALL chpt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1140 $ work, rwork, result( 5 ) )
1141 CALL chpt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1142 $ work, rwork, result( 6 ) )
1150 ap( i ) = a( jr, jc )
1156 CALL ccopy( nap, ap, 1, vp, 1 )
1159 CALL chptrd(
'L', n, vp, sd, se, tau, iinfo )
1161 IF( iinfo.NE.0 )
THEN
1162 WRITE( nounit, fmt = 9999 )
'CHPTRD(L)', iinfo, n, jtype,
1165 IF( iinfo.LT.0 )
THEN
1168 result( 7 ) = ulpinv
1174 CALL cupgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1175 IF( iinfo.NE.0 )
THEN
1176 WRITE( nounit, fmt = 9999 )
'CUPGTR(L)', iinfo, n, jtype,
1179 IF( iinfo.LT.0 )
THEN
1182 result( 8 ) = ulpinv
1187 CALL chpt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1188 $ work, rwork, result( 7 ) )
1189 CALL chpt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1190 $ work, rwork, result( 8 ) )
1196 CALL scopy( n, sd, 1, d1, 1 )
1198 $
CALL scopy( n-1, se, 1, rwork, 1 )
1199 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1202 CALL csteqr(
'V', n, d1, rwork, z, ldu, rwork( n+1 ),
1204 IF( iinfo.NE.0 )
THEN
1205 WRITE( nounit, fmt = 9999 )
'CSTEQR(V)', iinfo, n, jtype,
1208 IF( iinfo.LT.0 )
THEN
1211 result( 9 ) = ulpinv
1218 CALL scopy( n, sd, 1, d2, 1 )
1220 $
CALL scopy( n-1, se, 1, rwork, 1 )
1223 CALL csteqr(
'N', n, d2, rwork, work, ldu, rwork( n+1 ),
1225 IF( iinfo.NE.0 )
THEN
1226 WRITE( nounit, fmt = 9999 )
'CSTEQR(N)', iinfo, n, jtype,
1229 IF( iinfo.LT.0 )
THEN
1232 result( 11 ) = ulpinv
1239 CALL scopy( n, sd, 1, d3, 1 )
1241 $
CALL scopy( n-1, se, 1, rwork, 1 )
1244 CALL ssterf( n, d3, rwork, iinfo )
1245 IF( iinfo.NE.0 )
THEN
1246 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1249 IF( iinfo.LT.0 )
THEN
1252 result( 12 ) = ulpinv
1259 CALL cstt21( 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 sstech( n, sd, se, d1, temp1, rwork, iinfo )
1293 result( 13 ) = temp1
1298 IF( jtype.GT.15 )
THEN
1302 CALL scopy( n, sd, 1, d4, 1 )
1304 $
CALL scopy( n-1, se, 1, rwork, 1 )
1305 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1308 CALL cpteqr(
'V', n, d4, rwork, z, ldu, rwork( n+1 ),
1310 IF( iinfo.NE.0 )
THEN
1311 WRITE( nounit, fmt = 9999 )
'CPTEQR(V)', iinfo, n,
1314 IF( iinfo.LT.0 )
THEN
1317 result( 14 ) = ulpinv
1324 CALL cstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1325 $ rwork, result( 14 ) )
1329 CALL scopy( n, sd, 1, d5, 1 )
1331 $
CALL scopy( n-1, se, 1, rwork, 1 )
1334 CALL cpteqr(
'N', n, d5, rwork, z, ldu, rwork( n+1 ),
1336 IF( iinfo.NE.0 )
THEN
1337 WRITE( nounit, fmt = 9999 )
'CPTEQR(N)', iinfo, n,
1340 IF( iinfo.LT.0 )
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 IF( jtype.EQ.21 )
THEN
1376 abstol = unfl + unfl
1377 CALL sstebz(
'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 IF( iinfo.NE.0 )
THEN
1381 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1384 IF( iinfo.LT.0 )
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 sstebz(
'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 IF( iinfo.NE.0 )
THEN
1416 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1419 IF( iinfo.LT.0 )
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( slarnd( 1, iseed2 ) )
1447 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1455 CALL sstebz(
'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 IF( iinfo.NE.0 )
THEN
1459 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1462 IF( iinfo.LT.0 )
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 sstebz(
'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 IF( iinfo.NE.0 )
THEN
1497 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1500 IF( iinfo.LT.0 )
THEN
1503 result( 19 ) = ulpinv
1508 IF( m3.EQ.0 .AND. n.NE.0 )
THEN
1509 result( 19 ) = ulpinv
1515 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1516 temp2 = ssxt1( 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 sstebz(
'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 IF( iinfo.NE.0 )
THEN
1534 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1537 IF( iinfo.LT.0 )
THEN
1540 result( 20 ) = ulpinv
1541 result( 21 ) = ulpinv
1546 CALL cstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1547 $ ldu, rwork, iwork( 2*n+1 ), iwork( 3*n+1 ),
1549 IF( iinfo.NE.0 )
THEN
1550 WRITE( nounit, fmt = 9999 )
'CSTEIN', iinfo, n, jtype,
1553 IF( iinfo.LT.0 )
THEN
1556 result( 20 ) = ulpinv
1557 result( 21 ) = ulpinv
1564 CALL cstt21( n, 0, sd, se, wa1, dumma, z, ldu, work, rwork,
1573 CALL scopy( n, sd, 1, d1, 1 )
1575 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1576 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1579 CALL cstedc(
'I', n, d1, rwork( inde ), z, ldu, work, lwedc,
1580 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1581 IF( iinfo.NE.0 )
THEN
1582 WRITE( nounit, fmt = 9999 )
'CSTEDC(I)', iinfo, n, jtype,
1585 IF( iinfo.LT.0 )
THEN
1588 result( 22 ) = ulpinv
1595 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1602 CALL scopy( n, sd, 1, d1, 1 )
1604 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1605 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1608 CALL cstedc(
'V', n, d1, rwork( inde ), z, ldu, work, lwedc,
1609 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1610 IF( iinfo.NE.0 )
THEN
1611 WRITE( nounit, fmt = 9999 )
'CSTEDC(V)', iinfo, n, jtype,
1614 IF( iinfo.LT.0 )
THEN
1617 result( 24 ) = ulpinv
1624 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1631 CALL scopy( n, sd, 1, d2, 1 )
1633 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1634 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1637 CALL cstedc(
'N', n, d2, rwork( inde ), z, ldu, work, lwedc,
1638 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1639 IF( iinfo.NE.0 )
THEN
1640 WRITE( nounit, fmt = 9999 )
'CSTEDC(N)', iinfo, n, jtype,
1643 IF( iinfo.LT.0 )
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,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1666 $ ilaenv( 11,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1677 IF( jtype.EQ.21 .AND. crel )
THEN
1679 abstol = unfl + unfl
1680 CALL cstemr(
'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 IF( iinfo.NE.0 )
THEN
1685 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A,rel)',
1686 $ iinfo, n, jtype, ioldsd
1688 IF( iinfo.LT.0 )
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( slarnd( 1, iseed2 ) )
1710 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1719 abstol = unfl + unfl
1720 CALL cstemr(
'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 IF( iinfo.NE.0 )
THEN
1726 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,I,rel)',
1727 $ iinfo, n, jtype, ioldsd
1729 IF( iinfo.LT.0 )
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 scopy( n, sd, 1, d5, 1 )
1763 $
CALL scopy( n-1, se, 1, rwork, 1 )
1764 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1768 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1769 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1775 CALL cstemr(
'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 IF( iinfo.NE.0 )
THEN
1780 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,I)', iinfo,
1783 IF( iinfo.LT.0 )
THEN
1786 result( 29 ) = ulpinv
1797 CALL scopy( n, sd, 1, d5, 1 )
1799 $
CALL scopy( n-1, se, 1, rwork, 1 )
1802 CALL cstemr(
'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 IF( iinfo.NE.0 )
THEN
1807 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,I)', iinfo,
1810 IF( iinfo.LT.0 )
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 scopy( n, sd, 1, d5, 1 )
1838 $
CALL scopy( n-1, se, 1, rwork, 1 )
1839 CALL claset(
'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 cstemr(
'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 IF( iinfo.NE.0 )
THEN
1870 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,V)', iinfo,
1873 IF( iinfo.LT.0 )
THEN
1876 result( 32 ) = ulpinv
1883 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1884 $ m, rwork, result( 32 ) )
1890 CALL scopy( n, sd, 1, d5, 1 )
1892 $
CALL scopy( n-1, se, 1, rwork, 1 )
1895 CALL cstemr(
'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 IF( iinfo.NE.0 )
THEN
1900 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,V)', iinfo,
1903 IF( iinfo.LT.0 )
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 scopy( n, sd, 1, d5, 1 )
1939 $
CALL scopy( n-1, se, 1, rwork, 1 )
1943 CALL cstemr(
'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 IF( iinfo.NE.0 )
THEN
1948 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A)', iinfo, n,
1951 IF( iinfo.LT.0 )
THEN
1954 result( 35 ) = ulpinv
1961 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1962 $ rwork, result( 35 ) )
1968 CALL scopy( n, sd, 1, d5, 1 )
1970 $
CALL scopy( n-1, se, 1, rwork, 1 )
1973 CALL cstemr(
'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 IF( iinfo.NE.0 )
THEN
1978 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,A)', iinfo, n,
1981 IF( iinfo.LT.0 )
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 IF( result( jr ).GE.thresh )
THEN
2016 IF( nerrs.EQ.0 )
THEN
2017 WRITE( nounit, fmt = 9998 )
'CST'
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 IF( result( jr ).LT.10000.0e0 )
THEN
2029 WRITE( nounit, fmt = 9989 )n, jtype, ioldsd, jr,
2032 WRITE( nounit, fmt = 9988 )n, jtype, ioldsd, jr,
2042 CALL slasum(
'CST', nounit, nerrs, ntestt )
2045 9999
FORMAT(
' CCHKST2STG: ', 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 CCHKST2STG 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, e10.3 )
2081 9987
FORMAT( /
'Test performed: see CCHKST2STG for details.', / )
subroutine slabad(SMALL, LARGE)
SLABAD
subroutine slaset(UPLO, M, N, ALPHA, BETA, A, LDA)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine sstebz(RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO)
SSTEBZ
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine cstt21(N, KBAND, AD, AE, SD, SE, U, LDU, WORK, RWORK, RESULT)
CSTT21
subroutine chet21(ITYPE, UPLO, N, KBAND, A, LDA, D, E, U, LDU, V, LDV, TAU, WORK, RWORK, RESULT)
CHET21
subroutine cstt22(N, M, KBAND, AD, AE, SD, SE, U, LDU, WORK, LDWORK, RWORK, RESULT)
CSTT22
subroutine chpt21(ITYPE, UPLO, N, KBAND, AP, D, E, U, LDU, VP, TAU, WORK, RWORK, RESULT)
CHPT21
subroutine cchkst2stg(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)
CCHKST2STG
subroutine clatms(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, KL, KU, PACK, A, LDA, WORK, INFO)
CLATMS
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 chetrd_2stage(VECT, UPLO, N, A, LDA, D, E, TAU, HOUS2, LHOUS2, WORK, LWORK, INFO)
CHETRD_2STAGE
subroutine chetrd(UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO)
CHETRD
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 clacpy(UPLO, M, N, A, LDA, B, LDB)
CLACPY copies all or part of one two-dimensional array to another.
subroutine cupgtr(UPLO, N, AP, TAU, Q, LDQ, WORK, INFO)
CUPGTR
subroutine chptrd(UPLO, N, AP, D, E, TAU, INFO)
CHPTRD
subroutine cstein(N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK, IWORK, IFAIL, INFO)
CSTEIN
subroutine csteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
CSTEQR
subroutine cstedc(COMPZ, N, D, E, Z, LDZ, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
CSTEDC
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 cungtr(UPLO, N, A, LDA, TAU, WORK, LWORK, INFO)
CUNGTR
subroutine cpteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
CPTEQR
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine sstech(N, A, B, EIG, TOL, WORK, INFO)
SSTECH
subroutine slasum(TYPE, IOUNIT, IE, NRUN)
SLASUM