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, , 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( , * ),
642 $ v( ldu, * ), vp( * ), work( * ), z( ldu, * )
648 REAL ZERO, ONE, , EIGHT, TEN, HUN
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( ), 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.EQ.
ELSE IF( ITYPE8 ) 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.EQ.
ELSE IF( ITYPE9 ) 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)'
1229 IF( iinfo.LT.0 )
THEN
1232 result( 11 ) = ulpinv
1241 $
CALL scopy( n-1, se,
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
1276 result( 11 ) = temp2 /
max( unfl, ulp*
max
1277 result( 12 ) = temp4 /
max( unfl, ulp*
max( temp3, temp4 ) )
1283 temp1 = thresh*( half-ulp )
1285 DO 160 j = 0, log2ui
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
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,
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.', / )