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 dlaset(
'Full', n, 1, zero, zero, sd, n )
1015 CALL dlaset(
'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 dlaset(
'Full', n, 1, zero, zero, sd, n )
1049 CALL dlaset(
'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
1086 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1087 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1088 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1089 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1092 result( 3 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1093 result( 4 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1101 ap( i ) = a( jr, jc )
1107 CALL ccopy( nap, ap, 1, vp, 1 )
1110 CALL chptrd(
'U', n, vp, sd, se, tau, iinfo )
1112 IF( iinfo.NE.0 )
THEN
1113 WRITE( nounit, fmt = 9999 )
'CHPTRD(U)', iinfo, n, jtype,
1116 IF( iinfo.LT.0 )
THEN
1119 result( 5 ) = ulpinv
1125 CALL cupgtr(
'U', n, vp, tau, u, ldu, work, iinfo )
1126 IF( iinfo.NE.0 )
THEN
1127 WRITE( nounit, fmt = 9999 )
'CUPGTR(U)', iinfo, n, jtype,
1130 IF( iinfo.LT.0 )
THEN
1133 result( 6 ) = ulpinv
1140 CALL chpt21( 2,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1141 $ work, rwork, result( 5 ) )
1142 CALL chpt21( 3,
'Upper', n, 1, ap, sd, se, u, ldu, vp, tau,
1143 $ work, rwork, result( 6 ) )
1151 ap( i ) = a( jr, jc )
1157 CALL ccopy( nap, ap, 1, vp, 1 )
1160 CALL chptrd(
'L', n, vp, sd, se, tau, iinfo )
1162 IF( iinfo.NE.0 )
THEN
1163 WRITE( nounit, fmt = 9999 )
'CHPTRD(L)', iinfo, n, jtype,
1166 IF( iinfo.LT.0 )
THEN
1169 result( 7 ) = ulpinv
1175 CALL cupgtr(
'L', n, vp, tau, u, ldu, work, iinfo )
1176 IF( iinfo.NE.0 )
THEN
1177 WRITE( nounit, fmt = 9999 )
'CUPGTR(L)', iinfo, n, jtype,
1180 IF( iinfo.LT.0 )
THEN
1183 result( 8 ) = ulpinv
1188 CALL chpt21( 2,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1189 $ work, rwork, result( 7 ) )
1190 CALL chpt21( 3,
'Lower', n, 1, ap, sd, se, u, ldu, vp, tau,
1191 $ work, rwork, result( 8 ) )
1197 CALL scopy( n, sd, 1, d1, 1 )
1199 $
CALL scopy( n-1, se, 1, rwork, 1 )
1200 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1203 CALL csteqr(
'V', n, d1, rwork, z, ldu, rwork( n+1 ),
1205 IF( iinfo.NE.0 )
THEN
1206 WRITE( nounit, fmt = 9999 )
'CSTEQR(V)', iinfo, n, jtype,
1209 IF( iinfo.LT.0 )
THEN
1212 result( 9 ) = ulpinv
1219 CALL scopy( n, sd, 1, d2, 1 )
1221 $
CALL scopy( n-1, se, 1, rwork, 1 )
1224 CALL csteqr(
'N', n, d2, rwork, work, ldu, rwork( n+1 ),
1226 IF( iinfo.NE.0 )
THEN
1227 WRITE( nounit, fmt = 9999 )
'CSTEQR(N)', iinfo, n, jtype,
1230 IF( iinfo.LT.0 )
THEN
1233 result( 11 ) = ulpinv
1240 CALL scopy( n, sd, 1, d3, 1 )
1242 $
CALL scopy( n-1, se, 1, rwork, 1 )
1245 CALL ssterf( n, d3, rwork, iinfo )
1246 IF( iinfo.NE.0 )
THEN
1247 WRITE( nounit, fmt = 9999 )
'SSTERF', iinfo, n, jtype,
1250 IF( iinfo.LT.0 )
THEN
1253 result( 12 ) = ulpinv
1260 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1271 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1272 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1273 temp3 = max( temp3, abs( d1( j ) ), abs( d3( j ) ) )
1274 temp4 = max( temp4, abs( d1( j )-d3( j ) ) )
1277 result( 11 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1278 result( 12 ) = temp4 / max( unfl, ulp*max( temp3, temp4 ) )
1284 temp1 = thresh*( half-ulp )
1286 DO 160 j = 0, log2ui
1287 CALL sstech( n, sd, se, d1, temp1, rwork, iinfo )
1294 result( 13 ) = temp1
1299 IF( jtype.GT.15 )
THEN
1303 CALL scopy( n, sd, 1, d4, 1 )
1305 $
CALL scopy( n-1, se, 1, rwork, 1 )
1306 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1309 CALL cpteqr(
'V', n, d4, rwork, z, ldu, rwork( n+1 ),
1311 IF( iinfo.NE.0 )
THEN
1312 WRITE( nounit, fmt = 9999 )
'CPTEQR(V)', iinfo, n,
1315 IF( iinfo.LT.0 )
THEN
1318 result( 14 ) = ulpinv
1325 CALL cstt21( n, 0, sd, se, d4, dumma, z, ldu, work,
1326 $ rwork, result( 14 ) )
1330 CALL scopy( n, sd, 1, d5, 1 )
1332 $
CALL scopy( n-1, se, 1, rwork, 1 )
1335 CALL cpteqr(
'N', n, d5, rwork, z, ldu, rwork( n+1 ),
1337 IF( iinfo.NE.0 )
THEN
1338 WRITE( nounit, fmt = 9999 )
'CPTEQR(N)', iinfo, n,
1341 IF( iinfo.LT.0 )
THEN
1344 result( 16 ) = ulpinv
1354 temp1 = max( temp1, abs( d4( j ) ), abs( d5( j ) ) )
1355 temp2 = max( temp2, abs( d4( j )-d5( j ) ) )
1358 result( 16 ) = temp2 / max( unfl,
1359 $ hun*ulp*max( temp1, temp2 ) )
1375 IF( jtype.EQ.21 )
THEN
1377 abstol = unfl + unfl
1378 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se,
1379 $ m, nsplit, wr, iwork( 1 ), iwork( n+1 ),
1380 $ rwork, iwork( 2*n+1 ), iinfo )
1381 IF( iinfo.NE.0 )
THEN
1382 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,rel)', iinfo, n,
1385 IF( iinfo.LT.0 )
THEN
1388 result( 17 ) = ulpinv
1395 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1400 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1401 $ ( abstol+abs( d4( j ) ) ) )
1404 result( 17 ) = temp1 / temp2
1412 abstol = unfl + unfl
1413 CALL sstebz(
'A',
'E', n, vl, vu, il, iu, abstol, sd, se, m,
1414 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), rwork,
1415 $ iwork( 2*n+1 ), iinfo )
1416 IF( iinfo.NE.0 )
THEN
1417 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A)', iinfo, n, jtype,
1420 IF( iinfo.LT.0 )
THEN
1423 result( 18 ) = ulpinv
1433 temp1 = max( temp1, abs( d3( j ) ), abs( wa1( j ) ) )
1434 temp2 = max( temp2, abs( d3( j )-wa1( j ) ) )
1437 result( 18 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1447 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1448 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1456 CALL sstebz(
'I',
'E', n, vl, vu, il, iu, abstol, sd, se,
1457 $ m2, nsplit, wa2, iwork( 1 ), iwork( n+1 ),
1458 $ rwork, iwork( 2*n+1 ), iinfo )
1459 IF( iinfo.NE.0 )
THEN
1460 WRITE( nounit, fmt = 9999 )
'SSTEBZ(I)', iinfo, n, jtype,
1463 IF( iinfo.LT.0 )
THEN
1466 result( 19 ) = ulpinv
1476 vl = wa1( il ) - max( half*( wa1( il )-wa1( il-1 ) ),
1477 $ ulp*anorm, two*rtunfl )
1479 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1480 $ ulp*anorm, two*rtunfl )
1483 vu = wa1( iu ) + max( half*( wa1( iu+1 )-wa1( iu ) ),
1484 $ ulp*anorm, two*rtunfl )
1486 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1487 $ ulp*anorm, two*rtunfl )
1494 CALL sstebz(
'V',
'E', n, vl, vu, il, iu, abstol, sd, se,
1495 $ m3, nsplit, wa3, iwork( 1 ), iwork( n+1 ),
1496 $ rwork, iwork( 2*n+1 ), iinfo )
1497 IF( iinfo.NE.0 )
THEN
1498 WRITE( nounit, fmt = 9999 )
'SSTEBZ(V)', iinfo, n, jtype,
1501 IF( iinfo.LT.0 )
THEN
1504 result( 19 ) = ulpinv
1509 IF( m3.EQ.0 .AND. n.NE.0 )
THEN
1510 result( 19 ) = ulpinv
1516 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1517 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1519 temp3 = max( abs( wa1( n ) ), abs( wa1( 1 ) ) )
1524 result( 19 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1531 CALL sstebz(
'A',
'B', n, vl, vu, il, iu, abstol, sd, se, m,
1532 $ nsplit, wa1, iwork( 1 ), iwork( n+1 ), rwork,
1533 $ iwork( 2*n+1 ), iinfo )
1534 IF( iinfo.NE.0 )
THEN
1535 WRITE( nounit, fmt = 9999 )
'SSTEBZ(A,B)', iinfo, n,
1538 IF( iinfo.LT.0 )
THEN
1541 result( 20 ) = ulpinv
1542 result( 21 ) = ulpinv
1547 CALL cstein( n, sd, se, m, wa1, iwork( 1 ), iwork( n+1 ), z,
1548 $ ldu, rwork, iwork( 2*n+1 ), iwork( 3*n+1 ),
1550 IF( iinfo.NE.0 )
THEN
1551 WRITE( nounit, fmt = 9999 )
'CSTEIN', iinfo, n, jtype,
1554 IF( iinfo.LT.0 )
THEN
1557 result( 20 ) = ulpinv
1558 result( 21 ) = ulpinv
1565 CALL cstt21( n, 0, sd, se, wa1, dumma, z, ldu, work, rwork,
1574 CALL scopy( n, sd, 1, d1, 1 )
1576 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1577 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1580 CALL cstedc(
'I', n, d1, rwork( inde ), z, ldu, work, lwedc,
1581 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1582 IF( iinfo.NE.0 )
THEN
1583 WRITE( nounit, fmt = 9999 )
'CSTEDC(I)', iinfo, n, jtype,
1586 IF( iinfo.LT.0 )
THEN
1589 result( 22 ) = ulpinv
1596 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1603 CALL scopy( n, sd, 1, d1, 1 )
1605 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1606 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1609 CALL cstedc(
'V', n, d1, rwork( inde ), z, ldu, work, lwedc,
1610 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1611 IF( iinfo.NE.0 )
THEN
1612 WRITE( nounit, fmt = 9999 )
'CSTEDC(V)', iinfo, n, jtype,
1615 IF( iinfo.LT.0 )
THEN
1618 result( 24 ) = ulpinv
1625 CALL cstt21( n, 0, sd, se, d1, dumma, z, ldu, work, rwork,
1632 CALL scopy( n, sd, 1, d2, 1 )
1634 $
CALL scopy( n-1, se, 1, rwork( inde ), 1 )
1635 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1638 CALL cstedc(
'N', n, d2, rwork( inde ), z, ldu, work, lwedc,
1639 $ rwork( indrwk ), lrwedc, iwork, liwedc, iinfo )
1640 IF( iinfo.NE.0 )
THEN
1641 WRITE( nounit, fmt = 9999 )
'CSTEDC(N)', iinfo, n, jtype,
1644 IF( iinfo.LT.0 )
THEN
1647 result( 26 ) = ulpinv
1658 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
1659 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1662 result( 26 ) = temp2 / max( unfl, ulp*max( temp1, temp2 ) )
1666 IF( ilaenv( 10,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 .AND.
1667 $ ilaenv( 11,
'CSTEMR',
'VA', 1, 0, 0, 0 ).EQ.1 )
THEN
1678 IF( jtype.EQ.21 .AND. crel )
THEN
1680 abstol = unfl + unfl
1681 CALL cstemr(
'V',
'A', n, sd, se, vl, vu, il, iu,
1682 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1683 $ rwork, lrwork, iwork( 2*n+1 ), lwork-2*n,
1685 IF( iinfo.NE.0 )
THEN
1686 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A,rel)',
1687 $ iinfo, n, jtype, ioldsd
1689 IF( iinfo.LT.0 )
THEN
1692 result( 27 ) = ulpinv
1699 temp2 = two*( two*n-one )*ulp*( one+eight*half**2 ) /
1704 temp1 = max( temp1, abs( d4( j )-wr( n-j+1 ) ) /
1705 $ ( abstol+abs( d4( j ) ) ) )
1708 result( 27 ) = temp1 / temp2
1710 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1711 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1720 abstol = unfl + unfl
1721 CALL cstemr(
'V',
'I', n, sd, se, vl, vu, il, iu,
1722 $ m, wr, z, ldu, n, iwork( 1 ), tryrac,
1723 $ rwork, lrwork, iwork( 2*n+1 ),
1724 $ lwork-2*n, iinfo )
1726 IF( iinfo.NE.0 )
THEN
1727 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,I,rel)',
1728 $ iinfo, n, jtype, ioldsd
1730 IF( iinfo.LT.0 )
THEN
1733 result( 28 ) = ulpinv
1741 temp2 = two*( two*n-one )*ulp*
1742 $ ( one+eight*half**2 ) / ( one-half )**4
1746 temp1 = max( temp1, abs( wr( j-il+1 )-d4( n-j+
1747 $ 1 ) ) / ( abstol+abs( wr( j-il+1 ) ) ) )
1750 result( 28 ) = temp1 / temp2
1763 CALL scopy( n, sd, 1, d5, 1 )
1765 $
CALL scopy( n-1, se, 1, rwork, 1 )
1766 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1770 il = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1771 iu = 1 + ( n-1 )*int( slarnd( 1, iseed2 ) )
1777 CALL cstemr(
'V',
'I', 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,I)', iinfo,
1785 IF( iinfo.LT.0 )
THEN
1788 result( 29 ) = ulpinv
1800 CALL scopy( n, sd, 1, d5, 1 )
1802 $
CALL scopy( n-1, se, 1, rwork, 1 )
1805 CALL cstemr(
'N',
'I', n, d5, rwork, vl, vu, il, iu,
1806 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1807 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1808 $ liwork-2*n, iinfo )
1809 IF( iinfo.NE.0 )
THEN
1810 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,I)', iinfo,
1813 IF( iinfo.LT.0 )
THEN
1816 result( 31 ) = ulpinv
1826 DO 240 j = 1, iu - il + 1
1827 temp1 = max( temp1, abs( d1( j ) ),
1829 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1832 result( 31 ) = temp2 / max( unfl,
1833 $ ulp*max( temp1, temp2 ) )
1840 CALL scopy( n, sd, 1, d5, 1 )
1842 $
CALL scopy( n-1, se, 1, rwork, 1 )
1843 CALL claset(
'Full', n, n, czero, cone, z, ldu )
1849 vl = d2( il ) - max( half*
1850 $ ( d2( il )-d2( il-1 ) ), ulp*anorm,
1853 vl = d2( 1 ) - max( half*( d2( n )-d2( 1 ) ),
1854 $ ulp*anorm, two*rtunfl )
1857 vu = d2( iu ) + max( half*
1858 $ ( d2( iu+1 )-d2( iu ) ), ulp*anorm,
1861 vu = d2( n ) + max( half*( d2( n )-d2( 1 ) ),
1862 $ ulp*anorm, two*rtunfl )
1869 CALL cstemr(
'V',
'V', n, d5, rwork, vl, vu, il, iu,
1870 $ m, d1, z, ldu, m, iwork( 1 ), tryrac,
1871 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1872 $ liwork-2*n, iinfo )
1873 IF( iinfo.NE.0 )
THEN
1874 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,V)', iinfo,
1877 IF( iinfo.LT.0 )
THEN
1880 result( 32 ) = ulpinv
1887 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work,
1888 $ m, rwork, result( 32 ) )
1894 CALL scopy( n, sd, 1, d5, 1 )
1896 $
CALL scopy( n-1, se, 1, rwork, 1 )
1899 CALL cstemr(
'N',
'V', n, d5, rwork, vl, vu, il, iu,
1900 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1901 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1902 $ liwork-2*n, iinfo )
1903 IF( iinfo.NE.0 )
THEN
1904 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,V)', iinfo,
1907 IF( iinfo.LT.0 )
THEN
1910 result( 34 ) = ulpinv
1920 DO 250 j = 1, iu - il + 1
1921 temp1 = max( temp1, abs( d1( j ) ),
1923 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
1926 result( 34 ) = temp2 / max( unfl,
1927 $ ulp*max( temp1, temp2 ) )
1942 CALL scopy( n, sd, 1, d5, 1 )
1944 $
CALL scopy( n-1, se, 1, rwork, 1 )
1948 CALL cstemr(
'V',
'A', n, d5, rwork, vl, vu, il, iu,
1949 $ m, d1, z, ldu, n, iwork( 1 ), tryrac,
1950 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1951 $ liwork-2*n, iinfo )
1952 IF( iinfo.NE.0 )
THEN
1953 WRITE( nounit, fmt = 9999 )
'CSTEMR(V,A)', iinfo, n,
1956 IF( iinfo.LT.0 )
THEN
1959 result( 35 ) = ulpinv
1966 CALL cstt22( n, m, 0, sd, se, d1, dumma, z, ldu, work, m,
1967 $ rwork, result( 35 ) )
1973 CALL scopy( n, sd, 1, d5, 1 )
1975 $
CALL scopy( n-1, se, 1, rwork, 1 )
1978 CALL cstemr(
'N',
'A', n, d5, rwork, vl, vu, il, iu,
1979 $ m, d2, z, ldu, n, iwork( 1 ), tryrac,
1980 $ rwork( n+1 ), lrwork-n, iwork( 2*n+1 ),
1981 $ liwork-2*n, iinfo )
1982 IF( iinfo.NE.0 )
THEN
1983 WRITE( nounit, fmt = 9999 )
'CSTEMR(N,A)', iinfo, n,
1986 IF( iinfo.LT.0 )
THEN
1989 result( 37 ) = ulpinv
2000 temp1 = max( temp1, abs( d1( j ) ), abs( d2( j ) ) )
2001 temp2 = max( temp2, abs( d1( j )-d2( j ) ) )
2004 result( 37 ) = temp2 / max( unfl,
2005 $ ulp*max( temp1, temp2 ) )
2009 ntestt = ntestt + ntest
2016 DO 290 jr = 1, ntest
2017 IF( result( jr ).GE.thresh )
THEN
2022 IF( nerrs.EQ.0 )
THEN
2023 WRITE( nounit, fmt = 9998 )
'CST'
2024 WRITE( nounit, fmt = 9997 )
2025 WRITE( nounit, fmt = 9996 )
2026 WRITE( nounit, fmt = 9995 )
'Hermitian'
2027 WRITE( nounit, fmt = 9994 )
2031 WRITE( nounit, fmt = 9987 )
2034 IF( result( jr ).LT.10000.0e0 )
THEN
2035 WRITE( nounit, fmt = 9989 )n, jtype, ioldsd, jr,
2038 WRITE( nounit, fmt = 9988 )n, jtype, ioldsd, jr,
2048 CALL slasum(
'CST', nounit, nerrs, ntestt )
2051 9999
FORMAT(
' CCHKST2STG: ', a,
' returned INFO=', i6,
'.', / 9x,
2052 $
'N=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
2054 9998
FORMAT( / 1x, a3,
' -- Complex Hermitian eigenvalue problem' )
2055 9997
FORMAT(
' Matrix types (see CCHKST2STG for details): ' )
2057 9996
FORMAT( /
' Special Matrices:',
2058 $ /
' 1=Zero matrix. ',
2059 $
' 5=Diagonal: clustered entries.',
2060 $ /
' 2=Identity matrix. ',
2061 $
' 6=Diagonal: large, evenly spaced.',
2062 $ /
' 3=Diagonal: evenly spaced entries. ',
2063 $
' 7=Diagonal: small, evenly spaced.',
2064 $ /
' 4=Diagonal: geometr. spaced entries.' )
2065 9995
FORMAT(
' Dense ', a,
' Matrices:',
2066 $ /
' 8=Evenly spaced eigenvals. ',
2067 $
' 12=Small, evenly spaced eigenvals.',
2068 $ /
' 9=Geometrically spaced eigenvals. ',
2069 $
' 13=Matrix with random O(1) entries.',
2070 $ /
' 10=Clustered eigenvalues. ',
2071 $
' 14=Matrix with large random entries.',
2072 $ /
' 11=Large, evenly spaced eigenvals. ',
2073 $
' 15=Matrix with small random entries.' )
2074 9994
FORMAT(
' 16=Positive definite, evenly spaced eigenvalues',
2075 $ /
' 17=Positive definite, geometrically spaced eigenvlaues',
2076 $ /
' 18=Positive definite, clustered eigenvalues',
2077 $ /
' 19=Positive definite, small evenly spaced eigenvalues',
2078 $ /
' 20=Positive definite, large evenly spaced eigenvalues',
2079 $ /
' 21=Diagonally dominant tridiagonal, geometrically',
2080 $
' spaced eigenvalues' )
2082 9989
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
2083 $ 4( i4,
',' ),
' result ', i3,
' is', 0p, f8.2 )
2084 9988
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
2085 $ 4( i4,
',' ),
' result ', i3,
' is', 1p, e10.3 )
2087 9987
FORMAT( /
'Test performed: see CCHKST2STG for details.', / )
subroutine slabad(SMALL, LARGE)
SLABAD
subroutine dlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
DLASET 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