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
672 INTRINSIC abs, conjg, int, log,
max,
min, real, sqrt
675 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
676 $ 8, 8, 9, 9, 9, 9, 9, 10 /
677 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
678 $ 2, 3, 1, 1, 1, 2, 3, 1 /
679 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
680 $ 0, 0, 4, 3, 1, 4, 4, 3 /
698 nmax =
max( nmax, nn( j ) )
703 nblock = ilaenv( 1,
'CHETRD',
'L', nmax, -1, -1, -1 )
704 nblock =
min( nmax,
max( 1, nblock ) )
708 IF( nsizes.LT.0 )
THEN
710 ELSE IF( badnn )
THEN
712 ELSE IF( ntypes.LT.0 )
THEN
714 ELSE IF( lda.LT.nmax )
THEN
716 ELSE IF( ldu.LT.nmax )
THEN
718 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
729.EQ..OR..EQ.
IF( NSIZES0 NTYPES0 )
734 UNFL = SLAMCH( 'safe minimum
' )
736 CALL SLABAD( UNFL, OVFL )
737 ULP = SLAMCH( 'epsilon
' )*SLAMCH( 'base
' )
739 LOG2UI = INT( LOG( ULPINV ) / LOG( TWO ) )
740 RTUNFL = SQRT( UNFL )
741 RTOVFL = SQRT( OVFL )
746 ISEED2( I ) = ISEED( I )
751 DO 310 JSIZE = 1, NSIZES
754 LGN = INT( LOG( REAL( N ) ) / LOG( TWO ) )
759 LWEDC = 1 + 4*N + 2*N*LGN + 4*N**2
760 LRWEDC = 1 + 3*N + 2*N*LGN + 4*N**2
761 LIWEDC = 6 + 6*N + 5*N*LGN
767 NAP = ( N*( N+1 ) ) / 2
768 ANINV = ONE / REAL( MAX( 1, N ) )
770.NE.
IF( NSIZES1 ) THEN
771 MTYPES = MIN( MAXTYP, NTYPES )
773 MTYPES = MIN( MAXTYP+1, NTYPES )
776 DO 300 JTYPE = 1, MTYPES
777.NOT.
IF( DOTYPE( JTYPE ) )
783 IOLDSD( J ) = ISEED( J )
802.GT.
IF( MTYPESMAXTYP )
805 ITYPE = KTYPE( JTYPE )
806 IMODE = KMODE( JTYPE )
810 GO TO ( 40, 50, 60 )KMAGN( JTYPE )
817 ANORM = ( RTOVFL*ULP )*ANINV
821 ANORM = RTUNFL*N*ULPINV
826 CALL CLASET( 'full
', LDA, N, CZERO, CZERO, A, LDA )
828.LE.
IF( JTYPE15 ) THEN
831 COND = ULPINV*ANINV / TEN
838.EQ.
IF( ITYPE1 ) THEN
841.EQ.
ELSE IF( ITYPE2 ) THEN
849.EQ.
ELSE IF( ITYPE4 ) THEN
853 CALL CLATMS( N, N, 's
', ISEED, 'h
', RWORK, IMODE, COND,
854 $ ANORM, 0, 0, 'n
', A, LDA, WORK, IINFO )
857.EQ.
ELSE IF( ITYPE5 ) THEN
861 CALL CLATMS( N, N, 's
', ISEED, 'h
', RWORK, IMODE, COND,
862 $ ANORM, N, N, 'n
', A, LDA, WORK, IINFO )
864.EQ.
ELSE IF( ITYPE7 ) THEN
868 CALL CLATMR( N, N, 's
', ISEED, 'h
', WORK, 6, ONE, CONE,
869 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
870 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, 0, 0,
871 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
873.EQ.
ELSE IF( ITYPE8 ) THEN
877 CALL CLATMR( N, N, 's
', ISEED, 'h
', WORK, 6, ONE, CONE,
878 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
879 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, N, N,
880 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
882.EQ.
ELSE IF( ITYPE9 ) THEN
886 CALL CLATMS( N, N, 's
', ISEED, 'p
', RWORK, IMODE, COND,
887 $ ANORM, N, N, 'n
', A, LDA, WORK, IINFO )
889.EQ.
ELSE IF( ITYPE10 ) THEN
893 CALL CLATMS( N, N, 's
', ISEED, 'p
', RWORK, IMODE, COND,
894 $ ANORM, 1, 1, 'n
', A, LDA, WORK, IINFO )
896 TEMP1 = ABS( A( I-1, I ) )
897 TEMP2 = SQRT( ABS( A( I-1, I-1 )*A( I, I ) ) )
898.GT.
IF( TEMP1HALF*TEMP2 ) THEN
899 A( I-1, I ) = A( I-1, I )*
900 $ ( HALF*TEMP2 / ( UNFL+TEMP1 ) )
901 A( I, I-1 ) = CONJG( A( I-1, I ) )
910.NE.
IF( IINFO0 ) THEN
911 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N, JTYPE,
922 CALL CLACPY( 'u
', N, N, A, LDA, V, LDU )
925 CALL CHETRD( 'u
', N, V, LDU, SD, SE, TAU, WORK, LWORK,
928.NE.
IF( IINFO0 ) THEN
929 WRITE( NOUNIT, FMT = 9999 )'chetrd(u)
', IINFO, N, JTYPE,
932.LT.
IF( IINFO0 ) THEN
940 CALL CLACPY( 'u
', N, N, V, LDU, U, LDU )
943 CALL CUNGTR( 'u
', N, U, LDU, TAU, WORK, LWORK, IINFO )
944.NE.
IF( IINFO0 ) THEN
945 WRITE( NOUNIT, FMT = 9999 )'cungtr(u)
', IINFO, N, JTYPE,
948.LT.
IF( IINFO0 ) THEN
958 CALL CHET21( 2, 'upper
', N, 1, A, LDA, SD, SE, U, LDU, V,
959 $ LDU, TAU, WORK, RWORK, RESULT( 1 ) )
960 CALL CHET21( 3, 'upper
', N, 1, A, LDA, SD, SE, U, LDU, V,
961 $ LDU, TAU, WORK, RWORK, RESULT( 2 ) )
966 CALL CLACPY( 'l
', N, N, A, LDA, V, LDU )
969 CALL CHETRD( 'l
', N, V, LDU, SD, SE, TAU, WORK, LWORK,
972.NE.
IF( IINFO0 ) THEN
973 WRITE( NOUNIT, FMT = 9999 )'chetrd(l)
', IINFO, N, JTYPE,
976.LT.
IF( IINFO0 ) THEN
984 CALL CLACPY( 'l
', N, N, V, LDU, U, LDU )
987 CALL CUNGTR( 'l
', N, U, LDU, TAU, WORK, LWORK, IINFO )
988.NE.
IF( IINFO0 ) THEN
989 WRITE( NOUNIT, FMT = 9999 )'cungtr(l)
', IINFO, N, JTYPE,
992.LT.
IF( IINFO0 ) THEN
1000 CALL CHET21( 2, 'lower
', N, 1, A, LDA, SD, SE, U, LDU, V,
1001 $ LDU, TAU, WORK, RWORK, RESULT( 3 ) )
1002 CALL CHET21( 3, 'lower
', N, 1, A, LDA, SD, SE, U, LDU, V,
1003 $ LDU, TAU, WORK, RWORK, RESULT( 4 ) )
1011 AP( I ) = A( JR, JC )
1017 CALL CCOPY( NAP, AP, 1, VP, 1 )
1020 CALL CHPTRD( 'u
', N, VP, SD, SE, TAU, IINFO )
1022.NE.
IF( IINFO0 ) THEN
1023 WRITE( NOUNIT, FMT = 9999 )'chptrd(u)
', IINFO, N, JTYPE,
1026.LT.
IF( IINFO0 ) THEN
1029 RESULT( 5 ) = ULPINV
1035 CALL CUPGTR( 'u
', N, VP, TAU, U, LDU, WORK, IINFO )
1036.NE.
IF( IINFO0 ) THEN
1037 WRITE( NOUNIT, FMT = 9999 )'cupgtr(u)
', IINFO, N, JTYPE,
1040.LT.
IF( IINFO0 ) THEN
1043 RESULT( 6 ) = ULPINV
1050 CALL CHPT21( 2, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1051 $ WORK, RWORK, RESULT( 5 ) )
1052 CALL CHPT21( 3, 'upper
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1053 $ WORK, RWORK, RESULT( 6 ) )
1061 AP( I ) = A( JR, JC )
1067 CALL CCOPY( NAP, AP, 1, VP, 1 )
1070 CALL CHPTRD( 'l
', N, VP, SD, SE, TAU, IINFO )
1072.NE.
IF( IINFO0 ) THEN
1073 WRITE( NOUNIT, FMT = 9999 )'chptrd(l)
', IINFO, N, JTYPE,
1076.LT.
IF( IINFO0 ) THEN
1079 RESULT( 7 ) = ULPINV
1085 CALL CUPGTR( 'l
', N, VP, TAU, U, LDU, WORK, IINFO )
1086.NE.
IF( IINFO0 ) THEN
1087 WRITE( NOUNIT, FMT = 9999 )'cupgtr(l)
', IINFO, N, JTYPE,
1090.LT.
IF( IINFO0 ) THEN
1093 RESULT( 8 ) = ULPINV
1098 CALL CHPT21( 2, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1099 $ WORK, RWORK, RESULT( 7 ) )
1100 CALL CHPT21( 3, 'lower
', N, 1, AP, SD, SE, U, LDU, VP, TAU,
1101 $ WORK, RWORK, RESULT( 8 ) )
1107 CALL SCOPY( N, SD, 1, D1, 1 )
1109 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1110 CALL CLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1113 CALL CSTEQR( 'v
', N, D1, RWORK, Z, LDU, RWORK( N+1 ),
1115.NE.
IF( IINFO0 ) THEN
1116 WRITE( NOUNIT, FMT = 9999 )'csteqr(v)
', IINFO, N, JTYPE,
1119.LT.
IF( IINFO0 ) THEN
1122 RESULT( 9 ) = ULPINV
1129 CALL SCOPY( N, SD, 1, D2, 1 )
1131 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1134 CALL CSTEQR( 'n
', N, D2, RWORK, WORK, LDU, RWORK( N+1 ),
1136.NE.
IF( IINFO0 ) THEN
1137 WRITE( NOUNIT, FMT = 9999 )'csteqr(n)
', IINFO, N, JTYPE,
1140.LT.
IF( IINFO0 ) THEN
1143 RESULT( 11 ) = ULPINV
1150 CALL SCOPY( N, SD, 1, D3, 1 )
1152 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1155 CALL SSTERF( N, D3, RWORK, IINFO )
1156.NE.
IF( IINFO0 ) THEN
1157 WRITE( NOUNIT, FMT = 9999 )'ssterf', IINFO, N, JTYPE,
1160.LT.
IF( IINFO0 ) THEN
1163 RESULT( 12 ) = ULPINV
1170 CALL CSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1181 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1182 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1183 TEMP3 = MAX( TEMP3, ABS( D1( J ) ), ABS( D3( J ) ) )
1184 TEMP4 = MAX( TEMP4, ABS( D1( J )-D3( J ) ) )
1187 RESULT( 11 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1188 RESULT( 12 ) = TEMP4 / MAX( UNFL, ULP*MAX( TEMP3, TEMP4 ) )
1194 TEMP1 = THRESH*( HALF-ULP )
1196 DO 160 J = 0, LOG2UI
1197 CALL SSTECH( N, SD, SE, D1, TEMP1, RWORK, IINFO )
1204 RESULT( 13 ) = TEMP1
1209.GT.
IF( JTYPE15 ) THEN
1213 CALL SCOPY( N, SD, 1, D4, 1 )
1215 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1216 CALL CLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1219 CALL CPTEQR( 'v
', N, D4, RWORK, Z, LDU, RWORK( N+1 ),
1221.NE.
IF( IINFO0 ) THEN
1222 WRITE( NOUNIT, FMT = 9999 )'cpteqr(v)
', IINFO, N,
1225.LT.
IF( IINFO0 ) THEN
1228 RESULT( 14 ) = ULPINV
1235 CALL CSTT21( N, 0, SD, SE, D4, DUMMA, Z, LDU, WORK,
1236 $ RWORK, RESULT( 14 ) )
1240 CALL SCOPY( N, SD, 1, D5, 1 )
1242 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1245 CALL CPTEQR( 'n
', N, D5, RWORK, Z, LDU, RWORK( N+1 ),
1247.NE.
IF( IINFO0 ) THEN
1248 WRITE( NOUNIT, FMT = 9999 )'cpteqr(n)
', IINFO, N,
1251.LT.
IF( IINFO0 ) THEN
1254 RESULT( 16 ) = ULPINV
1264 TEMP1 = MAX( TEMP1, ABS( D4( J ) ), ABS( D5( J ) ) )
1265 TEMP2 = MAX( TEMP2, ABS( D4( J )-D5( J ) ) )
1268 RESULT( 16 ) = TEMP2 / MAX( UNFL,
1269 $ HUN*ULP*MAX( TEMP1, TEMP2 ) )
1285.EQ.
IF( JTYPE21 ) THEN
1287 ABSTOL = UNFL + UNFL
1288 CALL SSTEBZ( 'a
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1289 $ M, NSPLIT, WR, IWORK( 1 ), IWORK( N+1 ),
1290 $ RWORK, IWORK( 2*N+1 ), IINFO )
1291.NE.
IF( IINFO0 ) THEN
1292 WRITE( NOUNIT, FMT = 9999 )'sstebz(a,rel)
', IINFO, N,
1295.LT.
IF( IINFO0 ) THEN
1298 RESULT( 17 ) = ULPINV
1305 TEMP2 = TWO*( TWO*N-ONE )*ULP*( ONE+EIGHT*HALF**2 ) /
1310 TEMP1 = MAX( TEMP1, ABS( D4( J )-WR( N-J+1 ) ) /
1311 $ ( ABSTOL+ABS( D4( J ) ) ) )
1314 RESULT( 17 ) = TEMP1 / TEMP2
1322 ABSTOL = UNFL + UNFL
1323 CALL SSTEBZ( 'a
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE, M,
1324 $ NSPLIT, WA1, IWORK( 1 ), IWORK( N+1 ), RWORK,
1325 $ IWORK( 2*N+1 ), IINFO )
1326.NE.
IF( IINFO0 ) THEN
1327 WRITE( NOUNIT, FMT = 9999 )'sstebz(a)
', IINFO, N, JTYPE,
1330.LT.
IF( IINFO0 ) THEN
1333 RESULT( 18 ) = ULPINV
1343 TEMP1 = MAX( TEMP1, ABS( D3( J ) ), ABS( WA1( J ) ) )
1344 TEMP2 = MAX( TEMP2, ABS( D3( J )-WA1( J ) ) )
1347 RESULT( 18 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1357 IL = 1 + ( N-1 )*INT( SLARND( 1, ISEED2 ) )
1358 IU = 1 + ( N-1 )*INT( SLARND( 1, ISEED2 ) )
1366 CALL SSTEBZ( 'i
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1367 $ M2, NSPLIT, WA2, IWORK( 1 ), IWORK( N+1 ),
1368 $ RWORK, IWORK( 2*N+1 ), IINFO )
1369.NE.
IF( IINFO0 ) THEN
1370 WRITE( NOUNIT, FMT = 9999 )'sstebz(i)
', IINFO, N, JTYPE,
1373.LT.
IF( IINFO0 ) THEN
1376 RESULT( 19 ) = ULPINV
1386 VL = WA1( IL ) - MAX( HALF*( WA1( IL )-WA1( IL-1 ) ),
1387 $ ULP*ANORM, TWO*RTUNFL )
1389 VL = WA1( 1 ) - MAX( HALF*( WA1( N )-WA1( 1 ) ),
1390 $ ULP*ANORM, TWO*RTUNFL )
1393 VU = WA1( IU ) + MAX( HALF*( WA1( IU+1 )-WA1( IU ) ),
1394 $ ULP*ANORM, TWO*RTUNFL )
1396 VU = WA1( N ) + MAX( HALF*( WA1( N )-WA1( 1 ) ),
1397 $ ULP*ANORM, TWO*RTUNFL )
1404 CALL SSTEBZ( 'v
', 'e
', N, VL, VU, IL, IU, ABSTOL, SD, SE,
1405 $ M3, NSPLIT, WA3, IWORK( 1 ), IWORK( N+1 ),
1406 $ RWORK, IWORK( 2*N+1 ), IINFO )
1407.NE.
IF( IINFO0 ) THEN
1408 WRITE( NOUNIT, FMT = 9999 )'sstebz(v)
', IINFO, N, JTYPE,
1411.LT.
IF( IINFO0 ) THEN
1414 RESULT( 19 ) = ULPINV
1419.EQ..AND..NE.
IF( M30 N0 ) THEN
1420 RESULT( 19 ) = ULPINV
1426 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1427 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1429 TEMP3 = MAX( ABS( WA1( N ) ), ABS( WA1( 1 ) ) )
1434 RESULT( 19 ) = ( TEMP1+TEMP2 ) / MAX( UNFL, TEMP3*ULP )
1441 CALL SSTEBZ( 'a
', 'b
', N, VL, VU, IL, IU, ABSTOL, SD, SE, M,
1442 $ NSPLIT, WA1, IWORK( 1 ), IWORK( N+1 ), RWORK,
1443 $ IWORK( 2*N+1 ), IINFO )
1444.NE.
IF( IINFO0 ) THEN
1445 WRITE( NOUNIT, FMT = 9999 )'sstebz(a,b)
', IINFO, N,
1448.LT.
IF( IINFO0 ) THEN
1451 RESULT( 20 ) = ULPINV
1452 RESULT( 21 ) = ULPINV
1457 CALL CSTEIN( N, SD, SE, M, WA1, IWORK( 1 ), IWORK( N+1 ), Z,
1458 $ LDU, RWORK, IWORK( 2*N+1 ), IWORK( 3*N+1 ),
1460.NE.
IF( IINFO0 ) THEN
1461 WRITE( NOUNIT, FMT = 9999 )'cstein', IINFO, N, JTYPE,
1464.LT.
IF( IINFO0 ) THEN
1467 RESULT( 20 ) = ULPINV
1468 RESULT( 21 ) = ULPINV
1475 CALL CSTT21( N, 0, SD, SE, WA1, DUMMA, Z, LDU, WORK, RWORK,
1484 CALL SCOPY( N, SD, 1, D1, 1 )
1486 $ CALL SCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1487 CALL CLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1490 CALL CSTEDC( 'i
', N, D1, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1491 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1492.NE.
IF( IINFO0 ) THEN
1493 WRITE( NOUNIT, FMT = 9999 )'cstedc(i)
', IINFO, N, JTYPE,
1496.LT.
IF( IINFO0 ) THEN
1499 RESULT( 22 ) = ULPINV
1506 CALL CSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1513 CALL SCOPY( N, SD, 1, D1, 1 )
1515 $ CALL SCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1516 CALL CLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1519 CALL CSTEDC( 'v
', N, D1, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1520 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1521.NE.
IF( IINFO0 ) THEN
1522 WRITE( NOUNIT, FMT = 9999 )'cstedc(v)
', IINFO, N, JTYPE,
1525.LT.
IF( IINFO0 ) THEN
1528 RESULT( 24 ) = ULPINV
1535 CALL CSTT21( N, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, RWORK,
1542 CALL SCOPY( N, SD, 1, D2, 1 )
1544 $ CALL SCOPY( N-1, SE, 1, RWORK( INDE ), 1 )
1545 CALL CLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1548 CALL CSTEDC( 'n
', N, D2, RWORK( INDE ), Z, LDU, WORK, LWEDC,
1549 $ RWORK( INDRWK ), LRWEDC, IWORK, LIWEDC, IINFO )
1550.NE.
IF( IINFO0 ) THEN
1551 WRITE( NOUNIT, FMT = 9999 )'cstedc(n)
', IINFO, N, JTYPE,
1554.LT.
IF( IINFO0 ) THEN
1557 RESULT( 26 ) = ULPINV
1568 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1569 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1572 RESULT( 26 ) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
1576 IF( ILAENV( 10, 'cstemr', 'va.EQ..AND.
', 1, 0, 0, 0 )1
1577 $ ILAENV( 11, 'cstemr', 'va.EQ.
', 1, 0, 0, 0 )1 ) THEN
1588.EQ..AND.
IF( JTYPE21 CREL ) THEN
1590 ABSTOL = UNFL + UNFL
1591 CALL CSTEMR( 'v
', 'a
', N, SD, SE, VL, VU, IL, IU,
1592 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1593 $ RWORK, LRWORK, IWORK( 2*N+1 ), LWORK-2*N,
1595.NE.
IF( IINFO0 ) THEN
1596 WRITE( NOUNIT, FMT = 9999 )'cstemr(v,a,rel)
',
1597 $ IINFO, N, JTYPE, IOLDSD
1599.LT.
IF( IINFO0 ) THEN
1602 RESULT( 27 ) = ULPINV
1609 TEMP2 = TWO*( TWO*N-ONE )*ULP*( ONE+EIGHT*HALF**2 ) /
1614 TEMP1 = MAX( TEMP1, ABS( D4( J )-WR( N-J+1 ) ) /
1615 $ ( ABSTOL+ABS( D4( J ) ) ) )
1618 RESULT( 27 ) = TEMP1 / TEMP2
1620 IL = 1 + ( N-1 )*INT( SLARND( 1, ISEED2 ) )
1621 IU = 1 + ( N-1 )*INT( SLARND( 1, ISEED2 ) )
1630 ABSTOL = UNFL + UNFL
1631 CALL CSTEMR( 'v
', 'i
', N, SD, SE, VL, VU, IL, IU,
1632 $ M, WR, Z, LDU, N, IWORK( 1 ), TRYRAC,
1633 $ RWORK, LRWORK, IWORK( 2*N+1 ),
1634 $ LWORK-2*N, IINFO )
1636.NE.
IF( IINFO0 ) THEN
1637 WRITE( NOUNIT, FMT = 9999 )'cstemr(v,i,rel)
',
1638 $ IINFO, N, JTYPE, IOLDSD
1640.LT.
IF( IINFO0 ) THEN
1643 RESULT( 28 ) = ULPINV
1651 TEMP2 = TWO*( TWO*N-ONE )*ULP*
1652 $ ( ONE+EIGHT*HALF**2 ) / ( ONE-HALF )**4
1656 TEMP1 = MAX( TEMP1, ABS( WR( J-IL+1 )-D4( N-J+
1657 $ 1 ) ) / ( ABSTOL+ABS( WR( J-IL+1 ) ) ) )
1660 RESULT( 28 ) = TEMP1 / TEMP2
1673 CALL SCOPY( N, SD, 1, D5, 1 )
1675 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1676 CALL CLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1680 IL = 1 + ( N-1 )*INT( SLARND( 1, ISEED2 ) )
1681 IU = 1 + ( N-1 )*INT( SLARND( 1, ISEED2 ) )
1687 CALL CSTEMR( 'v
', 'i
', N, D5, RWORK, VL, VU, IL, IU,
1688 $ M, D1, Z, LDU, N, IWORK( 1 ), TRYRAC,
1689 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1690 $ LIWORK-2*N, IINFO )
1691.NE.
IF( IINFO0 ) THEN
1692 WRITE( NOUNIT, FMT = 9999 )'cstemr(v,i)
', IINFO,
1695.LT.
IF( IINFO0 ) THEN
1698 RESULT( 29 ) = ULPINV
1710 CALL SCOPY( N, SD, 1, D5, 1 )
1712 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1715 CALL CSTEMR( 'n
', 'i
', N, D5, RWORK, VL, VU, IL, IU,
1716 $ M, D2, Z, LDU, N, IWORK( 1 ), TRYRAC,
1717 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1718 $ LIWORK-2*N, IINFO )
1719.NE.
IF( IINFO0 ) THEN
1720 WRITE( NOUNIT, FMT = 9999 )'cstemr(n,i)
', IINFO,
1723.LT.
IF( IINFO0 ) THEN
1726 RESULT( 31 ) = ULPINV
1736 DO 240 J = 1, IU - IL + 1
1737 TEMP1 = MAX( TEMP1, ABS( D1( J ) ),
1739 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1742 RESULT( 31 ) = TEMP2 / MAX( UNFL,
1743 $ ULP*MAX( TEMP1, TEMP2 ) )
1750 CALL SCOPY( N, SD, 1, D5, 1 )
1752 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1753 CALL CLASET( 'full
', N, N, CZERO, CONE, Z, LDU )
1759 VL = D2( IL ) - MAX( HALF*
1760 $ ( D2( IL )-D2( IL-1 ) ), ULP*ANORM,
1763 VL = D2( 1 ) - MAX( HALF*( D2( N )-D2( 1 ) ),
1764 $ ULP*ANORM, TWO*RTUNFL )
1767 VU = D2( IU ) + MAX( HALF*
1768 $ ( D2( IU+1 )-D2( IU ) ), ULP*ANORM,
1771 VU = D2( N ) + MAX( HALF*( D2( N )-D2( 1 ) ),
1772 $ ULP*ANORM, TWO*RTUNFL )
1779 CALL CSTEMR( 'v
', 'v
', N, D5, RWORK, VL, VU, IL, IU,
1780 $ M, D1, Z, LDU, N, IWORK( 1 ), TRYRAC,
1781 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1782 $ LIWORK-2*N, IINFO )
1783.NE.
IF( IINFO0 ) THEN
1784 WRITE( NOUNIT, FMT = 9999 )'cstemr(v,v)
', IINFO,
1787.LT.
IF( IINFO0 ) THEN
1790 RESULT( 32 ) = ULPINV
1797 CALL CSTT22( N, M, 0, SD, SE, D1, DUMMA, Z, LDU, WORK,
1798 $ M, RWORK, RESULT( 32 ) )
1804 CALL SCOPY( N, SD, 1, D5, 1 )
1806 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1809 CALL CSTEMR( 'n
', 'v
', N, D5, RWORK, VL, VU, IL, IU,
1810 $ M, D2, Z, LDU, N, IWORK( 1 ), TRYRAC,
1811 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1812 $ LIWORK-2*N, IINFO )
1813.NE.
IF( IINFO0 ) THEN
1814 WRITE( NOUNIT, FMT = 9999 )'cstemr(n,v)
', IINFO,
1817.LT.
IF( IINFO0 ) THEN
1820 RESULT( 34 ) = ULPINV
1830 DO 250 J = 1, IU - IL + 1
1831 TEMP1 = MAX( TEMP1, ABS( D1( J ) ),
1833 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1836 RESULT( 34 ) = TEMP2 / MAX( UNFL,
1837 $ ULP*MAX( TEMP1, TEMP2 ) )
1852 CALL SCOPY( N, SD, 1, D5, 1 )
1854 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1858 CALL CSTEMR( 'v
', 'a
', N, D5, RWORK, VL, VU, IL, IU,
1859 $ M, D1, Z, LDU, N, IWORK( 1 ), TRYRAC,
1860 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1861 $ LIWORK-2*N, IINFO )
1862.NE.
IF( IINFO0 ) THEN
1863 WRITE( NOUNIT, FMT = 9999 )'cstemr(v,a)
', IINFO, N,
1866.LT.
IF( IINFO0 ) THEN
1869 RESULT( 35 ) = ULPINV
1876 CALL CSTT22( N, M, 0, SD, SE, D1, DUMMA, Z, LDU, WORK, M,
1877 $ RWORK, RESULT( 35 ) )
1883 CALL SCOPY( N, SD, 1, D5, 1 )
1885 $ CALL SCOPY( N-1, SE, 1, RWORK, 1 )
1888 CALL CSTEMR( 'n
', 'a
', N, D5, RWORK, VL, VU, IL, IU,
1889 $ M, D2, Z, LDU, N, IWORK( 1 ), TRYRAC,
1890 $ RWORK( N+1 ), LRWORK-N, IWORK( 2*N+1 ),
1891 $ LIWORK-2*N, IINFO )
1892.NE.
IF( IINFO0 ) THEN
1893 WRITE( NOUNIT, FMT = 9999 )'cstemr(n,a)
', IINFO, N,
1896.LT.
IF( IINFO0 ) THEN
1899 RESULT( 37 ) = ULPINV
1910 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
1911 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
1914 RESULT( 37 ) = TEMP2 / MAX( UNFL,
1915 $ ULP*MAX( TEMP1, TEMP2 ) )
1919 NTESTT = NTESTT + NTEST
1926 DO 290 JR = 1, NTEST
1927.GE.
IF( RESULT( JR )THRESH ) THEN
1932.EQ.
IF( NERRS0 ) THEN
1933 WRITE( NOUNIT, FMT = 9998 )'cst
'
1934 WRITE( NOUNIT, FMT = 9997 )
1935 WRITE( NOUNIT, FMT = 9996 )
1936 WRITE( NOUNIT, FMT = 9995 )'hermitian
'
1937 WRITE( NOUNIT, FMT = 9994 )
1941 WRITE( NOUNIT, FMT = 9987 )
1944.LT.
IF( RESULT( JR )10000.0E0 ) THEN
1945 WRITE( NOUNIT, FMT = 9989 )N, JTYPE, IOLDSD, JR,
1948 WRITE( NOUNIT, FMT = 9988 )N, JTYPE, IOLDSD, JR,
1958 CALL SLASUM( 'cst
', NOUNIT, NERRS, NTESTT )
1961 9999 FORMAT( ' cchkst', A, '', I6, '.
', / 9X, 'n=
',
1962 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
1964 9998 FORMAT( / 1X, A3, ' --
Complex Hermitian eigenvalue problem
' )
1965 9997 FORMAT( ' Matrix types (see CCHKST for details):
' )
1967 9996 FORMAT( / ' Special Matrices:
',
1968 $ / ' 1=zero matrix.
',
1969 $ ' 5=diagonal: clustered entries.
',
1970 $ / ' 2=identity matrix.
',
1971 $ ' 6=diagonal: large, evenly spaced.
',
1972 $ / ' 3=diagonal: evenly spaced entries.
',
1973 $ ' 7=diagonal: small, evenly spaced.
',
1974 $ / ' 4=diagonal: geometr. spaced entries.
' )
1975 9995 FORMAT( ' dense
', A, ' matrices:
',
1976 $ / ' 8=evenly spaced eigenvals.
',
1977 $ ' 12=small, evenly spaced eigenvals.
',
1978 $ / ' 9=geometrically spaced eigenvals.
',
1979 $ ' 13=matrix with random o(1) entries.
',
1980 $ / ' 10=clustered eigenvalues.
',
1981 $ ' 14=matrix with large random entries.
',
1982 $ / ' 11=large, evenly spaced eigenvals.
',
1983 $ ' 15=matrix with small random entries.
' )
1984 9994 FORMAT( ' 16=positive definite, evenly spaced eigenvalues
',
1985 $ / ' 17=positive definite, geometrically spaced eigenvlaues
',
1986 $ / ' 18=positive definite, clustered eigenvalues
',
1987 $ / ' 19=positive definite, small evenly spaced eigenvalues
',
1988 $ / ' 20=positive definite, large evenly spaced eigenvalues
',
1989 $ / ' 21=diagonally dominant tridiagonal, geometrically
',
1990 $ ' spaced eigenvalues' )
1992 9989
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1993 $ 4( i4,
',' ),
' result ', i3,
' is', 0p, f8.2 )
1994 9988
FORMAT(
' Matrix order=', i5,
', type=', i2,
', seed=',
1995 $ 4( i4,
',' ),
' result ', i3,
' is', 1p, e10.3 )
1997 9987
FORMAT( /
'Test performed: see CCHKST for details.', / )
subroutine slabad(small, large)
SLABAD
subroutine sstebz(range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
SSTEBZ
subroutine ssterf(n, d, e, info)
SSTERF
subroutine xerbla(srname, info)
XERBLA
subroutine chetrd(uplo, n, a, lda, d, e, tau, work, lwork, info)
CHETRD
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 cstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
CSTEIN
subroutine cupgtr(uplo, n, ap, tau, q, ldq, work, info)
CUPGTR
subroutine cungtr(uplo, n, a, lda, tau, work, lwork, info)
CUNGTR
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 chptrd(uplo, n, ap, d, e, tau, info)
CHPTRD
subroutine cstedc(compz, n, d, e, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
CSTEDC
subroutine csteqr(compz, n, d, e, z, ldz, work, info)
CSTEQR
subroutine cpteqr(compz, n, d, e, z, ldz, work, info)
CPTEQR
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
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 cstt22(n, m, kband, ad, ae, sd, se, u, ldu, work, ldwork, rwork, result)
CSTT22
subroutine cstt21(n, kband, ad, ae, sd, se, u, ldu, work, rwork, result)
CSTT21
subroutine chpt21(itype, uplo, n, kband, ap, d, e, u, ldu, vp, tau, work, rwork, result)
CHPT21
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 scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sstech(n, a, b, eig, tol, work, info)
SSTECH
subroutine slasum(type, iounit, ie, nrun)
SLASUM