449 SUBROUTINE sdrvst2stg( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
450 $ NOUNIT, A, LDA, D1, D2, D3, D4, EVEIGS, WA1,
451 $ WA2, WA3, U, LDU, V, TAU, Z, WORK, LWORK,
452 $ IWORK, LIWORK, RESULT, INFO )
459 INTEGER INFO, LDA, LDU, LIWORK, LWORK, NOUNIT, NSIZES,
465 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
466 REAL A( LDA, * ), D1( * ), D2( * ), D3( * ),
467 $ d4( * ), eveigs( * ), result( * ), tau( * ),
468 $ u( ldu, * ), v( ldu, * ), wa1( * ), wa2( * ),
469 $ wa3( * ), work( * ), z( ldu, * )
475 REAL ZERO, ONE, TWO, TEN
476 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
479 parameter( half = 0.5e+0 )
481 parameter( maxtyp = 18 )
486 INTEGER I, IDIAG, IHBW, IINFO, IL, IMODE, INDX, IROW,
487 $ itemp, itype, iu, iuplo, j, j1, j2, jcol,
488 $ jsize, jtype, kd, lgn, liwedc, lwedc, m, m2,
489 $ m3, mtypes, n, nerrs, nmats, nmax, ntest,
491 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
492 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
496 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
497 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
501 REAL SLAMCH, SLARND, SSXT1
502 EXTERNAL SLAMCH, SLARND, SSXT1
518 COMMON / srnamc / srnamt
521 INTRINSIC abs, real, int, log,
max,
min, sqrt
524 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
525 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
527 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
545 nmax =
max( nmax, nn( j ) )
552 IF( nsizes.LT.0 )
THEN
554 ELSE IF( badnn )
THEN
556 ELSE IF( ntypes.LT.0 )
THEN
558 ELSE IF( lda.LT.nmax )
THEN
560 ELSE IF( ldu.LT.nmax )
THEN
562 ELSE IF( 2*
max( 2, nmax )**2.GT.lwork )
THEN
567 CALL xerbla(
'SDRVST2STG', -info )
573 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
578 unfl = slamch(
'Safe minimum' )
579 ovfl = slamch(
'Overflow' )
581 ulp = slamch(
'Epsilon' )*slamch(
'Base' )
583 rtunfl = sqrt( unfl )
584 rtovfl = sqrt( ovfl )
589 iseed2( i ) = iseed( i )
590 iseed3( i ) = iseed( i )
597 DO 1740 jsize = 1, nsizes
600 lgn = int( log( real( n ) ) / log( two ) )
605 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
613 aninv = one / real(
max( 1, n ) )
615 IF( nsizes.NE.1 )
THEN
616 mtypes =
min( maxtyp, ntypes )
618 mtypes =
min( maxtyp+1, ntypes )
621 DO 1730 jtype = 1, mtypes
623 IF( .NOT.dotype( jtype ) )
647 IF( mtypes.GT.maxtyp )
650 itype = ktype( jtype )
651 imode = kmode( jtype )
655 GO TO ( 40, 50, 60 )kmagn( jtype )
662 anorm = ( rtovfl*ulp )*aninv
666 anorm = rtunfl*n*ulpinv
671 CALL slaset(
'Full', lda, n, zero, zero, a, lda )
679 IF( itype.EQ.1 )
THEN
682 ELSE IF( itype.EQ.2 )
THEN
687 a( jcol, jcol ) = anorm
690 ELSE IF( itype.EQ.4 )
THEN
694 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
695 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
698 ELSE IF( itype.EQ.5 )
THEN
702 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
703 $ anorm, n, n,
'N', a, lda, work( n+1 ),
706 ELSE IF( itype.EQ.7 )
THEN
711 CALL slatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
712 $
'T',
'N', work( n+1 ), 1, one,
713 $ work( 2*n+1 ), 1, one
'N'
714 $ zero, anorm, 'no
', A, LDA, IWORK, IINFO )
716.EQ.
ELSE IF( ITYPE8 ) THEN
721 CALL SLATMR( N, N, 's
', ISEED, 's
', WORK, 6, ONE, ONE,
722 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
723 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, N, N,
724 $ ZERO, ANORM, 'no
', A, LDA, IWORK, IINFO )
726.EQ.
ELSE IF( ITYPE9 ) THEN
730 IHBW = INT( ( N-1 )*SLARND( 1, ISEED3 ) )
731 CALL SLATMS( N, N, 's
', ISEED, 's
', WORK, IMODE, COND,
732 $ ANORM, IHBW, IHBW, 'z
', U, LDU, WORK( N+1 ),
737 CALL SLASET( 'full
', LDA, N, ZERO, ZERO, A, LDA )
738 DO 100 IDIAG = -IHBW, IHBW
739 IROW = IHBW - IDIAG + 1
740 J1 = MAX( 1, IDIAG+1 )
741 J2 = MIN( N, N+IDIAG )
744 A( I, J ) = U( IROW, J )
751.NE.
IF( IINFO0 ) THEN
752 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N, JTYPE,
765 IL = 1 + INT( ( N-1 )*SLARND( 1, ISEED2 ) )
766 IU = 1 + INT( ( N-1 )*SLARND( 1, ISEED2 ) )
776.LE.
IF( JTYPE7 ) THEN
779 D1( I ) = REAL( A( I, I ) )
782 D2( I ) = REAL( A( I+1, I ) )
785 CALL SSTEV( 'v
', N, D1, D2, Z, LDU, WORK, IINFO )
786.NE.
IF( IINFO0 ) THEN
787 WRITE( NOUNIT, FMT = 9999 )'sstev(v)', iinfo, n,
790 IF( iinfo.LT.0 )
THEN
803 d3( i ) = real( a( i, i
806 d4( i ) = real( a( i+1, i ) )
808 CALL sstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
813 d4( i ) = real( a( i+1, i ) )
816 CALL SSTEV( 'n
', N, D3, D4, Z, LDU, WORK, IINFO )
817.NE.
IF( IINFO0 ) THEN
818 WRITE( NOUNIT, FMT = 9999 )'sstev(n)
', IINFO, N,
821.LT.
IF( IINFO0 ) THEN
834 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
835 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
837 RESULT( 3 ) = TEMP2 / MAX( UNFL,
838 $ ULP*MAX( TEMP1, TEMP2 ) )
844 EVEIGS( I ) = D3( I )
845 D1( I ) = REAL( A( I, I ) )
848 D2( I ) = REAL( A( I+1, I ) )
851 CALL SSTEVX( 'v
', 'a', n, d1, d2, vl, vu, il, iu, abstol,
852 $ m, wa1, z, ldu, work, iwork, iwork( 5*n+1 ),
854 IF( iinfo.NE.0 )
THEN
855 WRITE( nounit, fmt = 9999 )'
sstevx(v,a)
', IINFO, N,
858.LT.
IF( IINFO0 ) THEN
868 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
876 D3( I ) = REAL( A( I, I ) )
879 D4( I ) = REAL( A( I+1, I ) )
881 CALL SSTT21( N, 0, D3, D4, WA1, D2, Z, LDU, WORK,
886 D4( I ) = REAL( A( I+1, I ) )
889 CALL SSTEVX( 'n
', 'a
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
890 $ M2, WA2, Z, LDU, WORK, IWORK,
891 $ IWORK( 5*N+1 ), IINFO )
892.NE.
IF( IINFO0 ) THEN
893 WRITE( NOUNIT, FMT = 9999 )'sstevx(n,a)
', IINFO, N,
896.LT.
IF( IINFO0 ) THEN
909 TEMP1 = MAX( TEMP1, ABS( WA2( J ) ),
910 $ ABS( EVEIGS( J ) ) )
911 TEMP2 = MAX( TEMP2, ABS( WA2( J )-EVEIGS( J ) ) )
913 RESULT( 6 ) = TEMP2 / MAX( UNFL,
914 $ ULP*MAX( TEMP1, TEMP2 ) )
920 D1( I ) = REAL( A( I, I ) )
923 D2( I ) = REAL( A( I+1, I ) )
926 CALL SSTEVR( 'v
', 'a
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
927 $ M, WA1, Z, LDU, IWORK, WORK, LWORK,
928 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
929.NE.
IF( IINFO0 ) THEN
930 WRITE( NOUNIT, FMT = 9999 )'sstevr(v,a)
', IINFO, N,
933.LT.
IF( IINFO0 ) THEN
942 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
950 D3( I ) = REAL( A( I, I ) )
953 D4( I ) = REAL( A( I+1, I ) )
955 CALL SSTT21( N, 0, D3, D4, WA1, D2, Z, LDU, WORK,
960 D4( I ) = REAL( A( I+1, I ) )
963 CALL SSTEVR( 'n
', 'a
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
964 $ M2, WA2, Z, LDU, IWORK, WORK, LWORK,
965 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
966.NE.
IF( IINFO0 ) THEN
967 WRITE( NOUNIT, FMT = 9999 )'sstevr(n,a)
', IINFO, N,
970.LT.
IF( IINFO0 ) THEN
983 TEMP1 = MAX( TEMP1, ABS( WA2( J ) ),
984 $ ABS( EVEIGS( J ) ) )
985 TEMP2 = MAX( TEMP2, ABS( WA2( J )-EVEIGS( J ) ) )
987 RESULT( 9 ) = TEMP2 / MAX( UNFL,
988 $ ULP*MAX( TEMP1, TEMP2 ) )
995 D1( I ) = REAL( A( I, I ) )
998 D2( I ) = REAL( A( I+1, I ) )
1001 CALL SSTEVX( 'v
', 'i
', N, D1, D2, VL, VU, IL, IU, ABSTOL,
1002 $ M2, WA2, Z, LDU, WORK, IWORK,
1003 $ IWORK( 5*N+1 ), IINFO )
1004.NE.
IF( IINFO0 ) THEN
1005 WRITE( NOUNIT, FMT = 9999 )'sstevx(v,i)
', IINFO, N,
1008.LT.
IF( IINFO0 ) THEN
1011 RESULT( 10 ) = ULPINV
1012 RESULT( 11 ) = ULPINV
1013 RESULT( 12 ) = ULPINV
1021 D3( I ) = REAL( A( I, I ) )
1024 D4( I ) = REAL( A( I+1, I ) )
1026 CALL SSTT22( N, M2, 0, D3, D4, WA2, D2, Z, LDU, WORK,
1027 $ MAX( 1, M2 ), RESULT( 10 ) )
1032 D4( I ) = REAL( A( I+1, I ) )
1035 CALL SSTEVX( 'n
', 'i
', N, D3, D4, VL, VU, IL, IU, ABSTOL,
1036 $ M3, WA3, Z, LDU, WORK, IWORK,
1037 $ IWORK( 5*N+1 ), IINFO )
1038.NE.
IF( IINFO0 ) THEN
1039 WRITE( NOUNIT, FMT = 9999 )'sstevx(n,i)', iinfo, n,
1042 IF( iinfo.LT.0 )
THEN
1045 result( 12 ) = ulpinv
1052 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1053 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1054 result( 12 ) = ( temp1+temp2 ) /
max( unfl, ulp*temp3 )
1061 vl = wa1( il ) -
max( half*
1062 $ ( wa1( il )-wa1( il-1 ) ), ten*ulp*temp3,
1065 vl = wa1( 1 ) -
max( half*( wa1( n )-wa1( 1 ) ),
1066 $ ten*ulp*temp3, ten*rtunfl )
1069 vu = wa1( iu ) +
max( half*
1070 $ ( wa1( iu+1 )-wa1( iu ) ), ten*ulp*temp3,
1073 vu = wa1( n ) +
max( half*( wa1( n )-wa1( 1 ) ),
1074 $ ten*ulp*temp3, ten*rtunfl )
1082 d1( i ) = real( a( i, i ) )
1085 d2( i ) = real( a( i+1, i ) )
1088 CALL sstevx(
'V',
'V', n, d1, d2, vl, vu, il, iu, abstol,
1089 $ m2, wa2, z, ldu, work, iwork,
1090 $ iwork( 5*n+1 ), iinfo )
1091 IF( iinfo.NE.0 )
THEN
1092 WRITE( nounit, fmt = 9999 )
'SSTEVX(V,V)', iinfo, n,
1095 IF( iinfo.LT.0 )
THEN
1098 result( 13 ) = ulpinv
1099 result( 14 ) = ulpinv
1100 result( 15 ) = ulpinv
1105 IF( m2.EQ.0 .AND. n.GT.0 )
THEN
1106 result( 13 ) = ulpinv
1107 result( 14 ) = ulpinv
1108 result( 15 ) = ulpinv
1115 d3( i ) = real( a( i, i ) )
1118 d4( i ) = real( a( i+1, i ) )
1120 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1125 d4( i ) = real( a( i+1, i ) )
1128 CALL sstevx(
'N',
'V', n, d3, d4, vl, vu, il, iu, abstol,
1129 $ m3, wa3, z, ldu, work, iwork,
1130 $ iwork( 5*n+1 ), iinfo )
1131 IF( iinfo.NE.0 )
THEN
1132 WRITE( nounit, fmt = 9999 )
'SSTEVX(N,V)', iinfo, n,
1135 IF( iinfo.LT.0 )
THEN
1138 result( 15 ) = ulpinv
1145 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1146 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1147 result( 15 ) = ( temp1+temp2 ) /
max( unfl, temp3*ulp )
1153 d1( i ) = real( a( i, i ) )
1156 d2( i ) = real( a( i+1, i ) )
1159 CALL sstevd(
'V', n, d1, d2, z, ldu, work, lwedc, iwork,
1161 IF( iinfo.NE.0 )
THEN
1162 WRITE( nounit, fmt = 9999 )
'SSTEVD(V)', iinfo, n
1165 IF( iinfo.LT.0 )
THEN
1168 result( 16 ) = ulpinv
1169 result( 17 ) = ulpinv
1170 result( 18 ) = ulpinv
1178 d3( i ) = real( a( i, i ) )
1181 d4( i ) = real( a( i+1, i ) )
1183 CALL sstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
1188 d4( i ) = real( a( i+1, i ) )
1193 IF( iinfo.NE.0 )
THEN
1194 WRITE( nounit, fmt = 9999 )
'SSTEVD(N)', iinfo, n,
1197 IF( iinfo.LT.0 )
THEN
1200 result( 18 ) = ulpinv
1210 temp1 =
max( temp1, abs( eveigs( j ) ),
1212 temp2 =
max( temp2, abs( eveigs( j )-d3( j ) ) )
1214 result( 18 ) = temp2 /
max( unfl,
1215 $ ulp*
max( temp1, temp2 ) )
1221 d1( i ) = real( a( i, i ) )
1224 d2( i ) = real( a( i+1, i ) )
1227 CALL sstevr(
'V',
'I', n, d1, d2, vl, vu, il, iu, abstol,
1228 $ m2, wa2, z, ldu, iwork, work, lwork,
1229 $ iwork(2*n+1), liwork-2*n, iinfo )
1230 IF( iinfo.NE.0 )
THEN
1231 WRITE( nounit, fmt = 9999 )
'SSTEVR(V,I)', iinfo, n,
1234 IF( iinfo.LT.0 )
THEN
1237 result( 19 ) = ulpinv
1238 result( 20 ) = ulpinv
1239 result( 21 ) = ulpinv
1247 d3( i ) = real( a( i, i ) )
1250 d4( i ) = real( a( i+1, i ) )
1252 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1253 $
max( 1, m2 ), result( 19 ) )
1258 d4( i ) = real( a( i+1, i ) )
1261 CALL sstevr(
'N',
'I', n, d3, d4, vl, vu, il, iu, abstol,
1262 $ m3, wa3, z, ldu, iwork, work, lwork,
1263 $ iwork(2*n+1), liwork-2*n, iinfo )
1264 IF( iinfo.NE.0 )
THEN
1265 WRITE( nounit, fmt = 9999 )
'SSTEVR(N,I)', iinfo, n,
1268 IF( iinfo.LT.0 )
THEN
1271 result( 21 ) = ulpinv
1278 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1279 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1287 vl = wa1( il ) -
max( half*
1288 $ ( wa1( il )-wa1( il-1 ) ), ten*ulp*temp3,
1291 vl = wa1( 1 ) -
max( half*( wa1( n )-wa1( 1 ) ),
1292 $ ten*ulp*temp3, ten*rtunfl )
1295 vu = wa1( iu ) +
max( half*
1296 $ ( wa1( iu+1 )-wa1( iu ) ), ten*ulp*temp3,
1299 vu = wa1( n ) +
max( half*( wa1( n )-wa1( 1 ) ),
1300 $ ten*ulp*temp3, ten*rtunfl )
1308 d1( i ) = real( a( i, i ) )
1311 d2( i ) = real( a( i+1, i ) )
1314 CALL sstevr(
'V',
'V', n, d1, d2, vl, vu, il, iu, abstol,
1315 $ m2, wa2, z, ldu, iwork, work, lwork,
1316 $ iwork(2*n+1), liwork-2*n, iinfo )
1317 IF( iinfo.NE.0 )
THEN
1318 WRITE( nounit, fmt = 9999 )
'SSTEVR(V,V)', iinfo, n,
1321 IF( iinfo.LT.0 )
THEN
1324 result( 22 ) = ulpinv
1325 result( 23 ) = ulpinv
1326 result( 24 ) = ulpinv
1331 IF( m2.EQ.0 .AND. n.GT.0 )
THEN
1332 result( 22 ) = ulpinv
1333 result( 23 ) = ulpinv
1334 result( 24 ) = ulpinv
1341 d3( i ) = real( a( i, i ) )
1344 d4( i ) = real( a( i
1346 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1347 $
max( 1, m2 ), result( 22 ) )
1351 d4( i ) = real( a( i+1, i ) )
1354 CALL sstevr(
'N',
'V', n, d3, d4, vl, vu, il, iu, abstol,
1355 $ m3, wa3, z, ldu, iwork, work, lwork,
1356 $ iwork(2*n+1), liwork-2*n, iinfo )
1357 IF( iinfo.NE.0 )
THEN
1358 WRITE( nounit, fmt = 9999 )
'SSTEVR(N,V)', iinfo, n,
1361 IF( iinfo.LT.0 )
THEN
1364 result( 24 ) = ulpinv
1371 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1372 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1373 result( 24 ) = ( temp1+temp2 ) /
max( unfl, temp3*ulp )
1390 DO 1720 iuplo = 0, 1
1391 IF( iuplo.EQ.0 )
THEN
1399 CALL SLACPY( ' ', N, N, A, LDA, V, LDU )
1403 CALL SSYEV( 'v
', UPLO, N, A, LDU, D1, WORK, LWORK,
1405.NE.
IF( IINFO0 ) THEN
1406 WRITE( NOUNIT, FMT = 9999 )'ssyev(v,
' // UPLO // ')
',
1407 $ IINFO, N, JTYPE, IOLDSD
1409.LT.
IF( IINFO0 ) THEN
1412 RESULT( NTEST ) = ULPINV
1413 RESULT( NTEST+1 ) = ULPINV
1414 RESULT( NTEST+2 ) = ULPINV
1421 CALL SSYT21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
1422 $ LDU, TAU, WORK, RESULT( NTEST ) )
1424 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1428 CALL SSYEV_2STAGE( 'n
', UPLO, N, A, LDU, D3, WORK, LWORK,
1430.NE.
IF( IINFO0 ) THEN
1431 WRITE( NOUNIT, FMT = 9999 )
1433 $ IINFO, N, JTYPE, IOLDSD
1435.LT.
IF( IINFO0 ) THEN
1438 RESULT( NTEST ) = ULPINV
1448 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
1449 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
1451 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1452 $ ULP*MAX( TEMP1, TEMP2 ) )
1455 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1460 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
1462 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
1463 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1464.GT.
ELSE IF( N0 ) THEN
1465 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
1466 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1469 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
1470 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1471.GT.
ELSE IF( N0 ) THEN
1472 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
1473 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1482 CALL SSYEVX( 'v
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
1483 $ ABSTOL, M, WA1, Z, LDU, WORK, LWORK, IWORK,
1484 $ IWORK( 5*N+1 ), IINFO )
1485.NE.
IF( IINFO0 ) THEN
1486 WRITE( NOUNIT, FMT = 9999 )'ssyevx(v,a,
' // UPLO //
1487 $ ')
', IINFO, N, JTYPE, IOLDSD
1489.LT.
IF( IINFO0 ) THEN
1492 RESULT( NTEST ) = ULPINV
1493 RESULT( NTEST+1 ) = ULPINV
1494 RESULT( NTEST+2 ) = ULPINV
1501 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1503 CALL SSYT21( 1, UPLO, N, 0, A, LDU, D1, D2, Z, LDU, V,
1504 $ LDU, TAU, WORK, RESULT( NTEST ) )
1508 CALL SSYEVX_2STAGE( 'n
', 'a
', UPLO, N, A, LDU, VL, VU,
1509 $ IL, IU, ABSTOL, M2, WA2, Z, LDU, WORK,
1510 $ LWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1511.NE.
IF( IINFO0 ) THEN
1512 WRITE( NOUNIT, FMT = 9999 )
1514 $ ')
', IINFO, N, JTYPE, IOLDSD
1516.LT.
IF( IINFO0 ) THEN
1519 RESULT( NTEST ) = ULPINV
1529 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
1530 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
1532 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1533 $ ULP*MAX( TEMP1, TEMP2 ) )
1538 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1540 CALL SSYEVX( 'v
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
1541 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, IWORK,
1542 $ IWORK( 5*N+1 ), IINFO )
1543.NE.
IF( IINFO0 ) THEN
1544 WRITE( NOUNIT, FMT = 9999 )'ssyevx(v,i,
' // UPLO //
1545 $ ')
', IINFO, N, JTYPE, IOLDSD
1547.LT.
IF( IINFO0 ) THEN
1550 RESULT( NTEST ) = ULPINV
1551 RESULT( NTEST+1 ) = ULPINV
1552 RESULT( NTEST+2 ) = ULPINV
1559 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1561 CALL SSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1562 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1565 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1567 CALL SSYEVX_2STAGE( 'n
', 'i
', UPLO, N, A, LDU, VL, VU,
1568 $ IL, IU, ABSTOL, M3, WA3, Z, LDU, WORK,
1569 $ LWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1570.NE.
IF( IINFO0 ) THEN
1571 WRITE( NOUNIT, FMT = 9999 )
1573 $ ')
', IINFO, N, JTYPE, IOLDSD
1575.LT.
IF( IINFO0 ) THEN
1578 RESULT( NTEST ) = ULPINV
1585 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1586 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1587 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1588 $ MAX( UNFL, ULP*TEMP3 )
1592 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1594 CALL SSYEVX( 'v
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
1595 $ ABSTOL, M2, WA2, Z, LDU, WORK, LWORK, IWORK,
1596 $ IWORK( 5*N+1 ), IINFO )
1597.NE.
IF( IINFO0 ) THEN
1598 WRITE( NOUNIT, FMT = 9999 )'ssyevx(v,v,
' // UPLO //
1599 $ ')
', IINFO, N, JTYPE, IOLDSD
1601.LT.
IF( IINFO0 ) THEN
1604 RESULT( NTEST ) = ULPINV
1605 RESULT( NTEST+1 ) = ULPINV
1606 RESULT( NTEST+2 ) = ULPINV
1613 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1615 CALL SSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1616 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1619 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1621 CALL SSYEVX_2STAGE( 'n
', 'v
', UPLO, N, A, LDU, VL, VU,
1622 $ IL, IU, ABSTOL, M3, WA3, Z, LDU, WORK,
1623 $ LWORK, IWORK, IWORK( 5*N+1 ), IINFO )
1624.NE.
IF( IINFO0 ) THEN
1625 WRITE( NOUNIT, FMT = 9999 )
1627 $ ')
', IINFO, N, JTYPE, IOLDSD
1629.LT.
IF( IINFO0 ) THEN
1632 RESULT( NTEST ) = ULPINV
1637.EQ..AND..GT.
IF( M30 N0 ) THEN
1638 RESULT( NTEST ) = ULPINV
1644 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1645 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1647 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1651 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1652 $ MAX( UNFL, TEMP3*ULP )
1658 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
1663.EQ.
IF( IUPLO1 ) THEN
1667 WORK( INDX ) = A( I, J )
1675 WORK( INDX ) = A( I, J )
1683 CALL SSPEV( 'v
', UPLO, N, WORK, D1, Z, LDU, V, IINFO )
1684.NE.
IF( IINFO0 ) THEN
1685 WRITE( NOUNIT, FMT = 9999 )'sspev(v,
' // UPLO // ')
',
1686 $ IINFO, N, JTYPE, IOLDSD
1688.LT.
IF( IINFO0 ) THEN
1691 RESULT( NTEST ) = ULPINV
1692 RESULT( NTEST+1 ) = ULPINV
1693 RESULT( NTEST+2 ) = ULPINV
1700 CALL SSYT21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
1701 $ LDU, TAU, WORK, RESULT( NTEST ) )
1703.EQ.
IF( IUPLO1 ) THEN
1707 WORK( INDX ) = A( I, J )
1715 WORK( INDX ) = A( I, J )
1723 CALL SSPEV( 'n
', UPLO, N, WORK, D3, Z, LDU, V, IINFO )
1724.NE.
IF( IINFO0 ) THEN
1725 WRITE( NOUNIT, FMT = 9999 )'sspev(n,
' // UPLO // ')
',
1726 $ IINFO, N, JTYPE, IOLDSD
1728.LT.
IF( IINFO0 ) THEN
1731 RESULT( NTEST ) = ULPINV
1741 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
1742 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
1744 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1745 $ ULP*MAX( TEMP1, TEMP2 ) )
1751.EQ.
IF( IUPLO1 ) THEN
1755 WORK( INDX ) = A( I, J )
1763 WORK( INDX ) = A( I, J )
1772 TEMP3 = MAX( ABS( D1( 1 ) ), ABS( D1( N ) ) )
1774 VL = D1( IL ) - MAX( HALF*( D1( IL )-D1( IL-1 ) ),
1775 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1776.GT.
ELSE IF( N0 ) THEN
1777 VL = D1( 1 ) - MAX( HALF*( D1( N )-D1( 1 ) ),
1778 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1781 VU = D1( IU ) + MAX( HALF*( D1( IU+1 )-D1( IU ) ),
1782 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1783.GT.
ELSE IF( N0 ) THEN
1784 VU = D1( N ) + MAX( HALF*( D1( N )-D1( 1 ) ),
1785 $ TEN*ULP*TEMP3, TEN*RTUNFL )
1794 CALL SSPEVX( 'v
', 'a
', UPLO, N, WORK, VL, VU, IL, IU,
1795 $ ABSTOL, M, WA1, Z, LDU, V, IWORK,
1796 $ IWORK( 5*N+1 ), IINFO )
1797.NE.
IF( IINFO0 ) THEN
1798 WRITE( NOUNIT, FMT = 9999 )'sspevx(v,a,
' // UPLO //
1799 $ ')
', IINFO, N, JTYPE, IOLDSD
1801.LT.
IF( IINFO0 ) THEN
1804 RESULT( NTEST ) = ULPINV
1805 RESULT( NTEST+1 ) = ULPINV
1806 RESULT( NTEST+2 ) = ULPINV
1813 CALL SSYT21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
1814 $ LDU, TAU, WORK, RESULT( NTEST ) )
1818.EQ.
IF( IUPLO1 ) THEN
1822 WORK( INDX ) = A( I, J )
1830 WORK( INDX ) = A( I, J )
1837 CALL SSPEVX( 'n
', 'a
', UPLO, N, WORK, VL, VU, IL, IU,
1838 $ ABSTOL, M2, WA2, Z, LDU, V, IWORK,
1839 $ IWORK( 5*N+1 ), IINFO )
1840.NE.
IF( IINFO0 ) THEN
1841 WRITE( NOUNIT, FMT = 9999 )'sspevx(n,a,
' // UPLO //
1842 $ ')
', IINFO, N, JTYPE, IOLDSD
1844.LT.
IF( IINFO0 ) THEN
1847 RESULT( NTEST ) = ULPINV
1857 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
1858 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
1860 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
1861 $ ULP*MAX( TEMP1, TEMP2 ) )
1864.EQ.
IF( IUPLO1 ) THEN
1868 WORK( INDX ) = A( I, J )
1876 WORK( INDX ) = A( I, J )
1885 CALL SSPEVX( 'v
', 'i
', UPLO, N, WORK, VL, VU, IL, IU,
1886 $ ABSTOL, M2, WA2, Z, LDU, V, IWORK,
1887 $ IWORK( 5*N+1 ), IINFO )
1888.NE.
IF( IINFO0 ) THEN
1889 WRITE( NOUNIT, FMT = 9999 )'sspevx(v,i,
' // UPLO //
1890 $ ')
', IINFO, N, JTYPE, IOLDSD
1892.LT.
IF( IINFO0 ) THEN
1895 RESULT( NTEST ) = ULPINV
1896 RESULT( NTEST+1 ) = ULPINV
1897 RESULT( NTEST+2 ) = ULPINV
1904 CALL SSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1905 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1909.EQ.
IF( IUPLO1 ) THEN
1913 WORK( INDX ) = A( I, J )
1921 WORK( INDX ) = A( I, J )
1928 CALL SSPEVX( 'n
', 'i
', UPLO, N, WORK, VL, VU, IL, IU,
1929 $ ABSTOL, M3, WA3, Z, LDU, V, IWORK,
1930 $ IWORK( 5*N+1 ), IINFO )
1931.NE.
IF( IINFO0 ) THEN
1932 WRITE( NOUNIT, FMT = 9999 )'sspevx(n,i,
' // UPLO //
1933 $ ')
', IINFO, N, JTYPE, IOLDSD
1935.LT.
IF( IINFO0 ) THEN
1938 RESULT( NTEST ) = ULPINV
1943.EQ..AND..GT.
IF( M30 N0 ) THEN
1944 RESULT( NTEST ) = ULPINV
1950 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1951 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
1953 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
1957 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
1958 $ MAX( UNFL, TEMP3*ULP )
1961.EQ.
IF( IUPLO1 ) THEN
1965 WORK( INDX ) = A( I, J )
1973 WORK( INDX ) = A( I, J )
1982 CALL SSPEVX( 'v
', 'v
', UPLO, N, WORK, VL, VU, IL, IU,
1983 $ ABSTOL, M2, WA2, Z, LDU, V, IWORK,
1984 $ IWORK( 5*N+1 ), IINFO )
1985.NE.
IF( IINFO0 ) THEN
1986 WRITE( NOUNIT, FMT = 9999 )'sspevx(v,v,' // uplo //
1987 $
')', iinfo, n, jtype, ioldsd
1989 IF( iinfo.LT.0 )
THEN
1992 result( ntest ) = ulpinv
1993 result( ntest+1 ) = ulpinv
1994 result( ntest+2 ) = ulpinv
2001 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2002 $ v, ldu, tau, work, result( ntest ) )
2006 IF( iuplo.EQ.1 )
THEN
2010 work( indx ) = a( i, j )
2018 work( indx ) = a( i, j )
2025 CALL sspevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
2026 $ abstol, m3, wa3, z, ldu, v, iwork,
2027 $ iwork( 5*n+1 ), iinfo )
2028 IF( iinfo.NE.0 )
THEN
2029 WRITE( nounit, fmt = 9999 )
'SSPEVX(N,V,' // uplo //
2030 $
')', iinfo, n, jtype, ioldsd
2032 IF( iinfo.LT.0 )
THEN
2035 result( ntest ) = ulpinv
2040 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2041 result( ntest ) = ulpinv
2047 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2048 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2050 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2054 result( ntest ) = ( temp1+temp2 ) /
2055 $
max( unfl, temp3*ulp )
2061 IF( jtype.LE.7 )
THEN
2063 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
2072 IF( iuplo.EQ.1 )
THEN
2074 DO 1090 i =
max( 1, j-kd ), j
2075 v( kd+1+i-j, j ) = a( i, j )
2080 DO 1110 i = j,
min( n, j+kd )
2081 v( 1+i-j, j ) = a( i, j )
2088 CALL ssbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
2090 IF( iinfo.NE.0 )
THEN
2091 WRITE( nounit, fmt = 9999 )
'SSBEV(V,' // uplo //
')',
2092 $ iinfo, n, jtype, ioldsd
2094 IF( iinfo.LT.0 )
THEN
2097 result( ntest ) = ulpinv
2098 result( ntest+1 ) = ulpinv
2099 result( ntest+2 ) = ulpinv
2106 CALL ssyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2107 $ ldu, tau, work, result( ntest ) )
2109 IF( iuplo.EQ.1 )
THEN
2111 DO 1130 i =
max( 1, j-kd ), j
2112 v( kd+1+i-j, j ) = a( i, j )
2117 DO 1150 i = j,
min( n, j+kd )
2118 v( 1+i-j, j ) = a( i, j )
2124 srnamt =
'SSBEV_2STAGE'
2125 CALL ssbev_2stage(
'N', uplo, n, kd, v, ldu, d3, z, ldu,
2126 $ work, lwork, iinfo )
2127 IF( iinfo.NE.0 )
THEN
2128 WRITE( nounit, fmt = 9999 )
2129 $
'SSBEV_2STAGE(N,' // uplo //
')',
2130 $ iinfo, n, jtype, ioldsd
2132 IF( iinfo.LT.0 )
THEN
2135 result( ntest ) = ulpinv
2145 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2146 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
2148 result( ntest ) = temp2 /
max( unfl,
2149 $ ulp*
max( temp1, temp2 ) )
2155 IF( iuplo.EQ.1 )
THEN
2157 DO 1190 i =
max( 1, j-kd ), j
2158 v( kd+1+i-j, j ) = a( i, j )
2163 DO 1210 i = j,
min( n, j+kd )
2164 v( 1+i-j, j ) = a( i, j )
2171 CALL ssbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
2172 $ vu, il, iu, abstol, m, wa2, z, ldu, work,
2173 $ iwork, iwork( 5*n+1 ), iinfo )
2174 IF( iinfo.NE.0 )
THEN
2175 WRITE( nounit, fmt = 9999 )
'SSBEVX(V,A,' // uplo //
2176 $
')', iinfo, n, jtype, ioldsd
2178 IF( iinfo.LT.0 )
THEN
2181 result( ntest ) = ulpinv
2182 result( ntest+1 ) = ulpinv
2183 result( ntest+2 ) = ulpinv
2190 CALL ssyt21( 1, uplo, n, 0, a, ldu, wa2, d2, z, ldu, v,
2191 $ ldu, tau, work, result( ntest ) )
2195 IF( iuplo.EQ.1 )
THEN
2197 DO 1230 i =
max( 1, j-kd ), j
2198 v( kd+1+i-j, j ) = a( i, j )
2203 DO 1250 i = j,
min( n, j+kd )
2204 v( 1+i-j, j ) = a( i, j )
2209 srnamt =
'SSBEVX_2STAGE'
2211 $ u, ldu, vl, vu, il, iu, abstol, m3, wa3,
2212 $ z, ldu, work, lwork, iwork, iwork( 5*n+1 ),
2214 IF( iinfo.NE.0 )
THEN
2215 WRITE( nounit, fmt = 9999 )
2216 $
'SSBEVX_2STAGE(N,A,' // uplo //
2217 $
')', iinfo, n, jtype, ioldsd
2219 IF( iinfo.LT.0 )
THEN
2222 result( ntest ) = ulpinv
2232 temp1 =
max( temp1, abs( wa2( j ) ), abs( wa3( j ) ) )
2233 temp2 =
max( temp2, abs( wa2( j )-wa3( j ) ) )
2235 result( ntest ) = temp2 /
max( unfl,
2236 $ ulp*
max( temp1, temp2 ) )
2240 IF( iuplo.EQ.1 )
THEN
2242 DO 1290 i =
max( 1, j-kd ), j
2243 v( kd+1+i-j, j ) = a( i, j )
2248 DO 1310 i = j,
min( n, j+kd )
2249 v( 1+i-j, j ) = a( i, j )
2255 CALL ssbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
2256 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2257 $ iwork, iwork( 5*n+1 ), iinfo )
2258 IF( iinfo.NE.0 )
THEN
2259 WRITE( nounit, fmt = 9999 )
'SSBEVX(V,I,' // uplo //
2260 $
')', iinfo, n, jtype, ioldsd
2262 IF( iinfo.LT.0 )
THEN
2265 result( ntest ) = ulpinv
2266 result( ntest+1 ) = ulpinv
2267 result( ntest+2 ) = ulpinv
2274 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2275 $ v, ldu, tau, work, result( ntest ) )
2279 IF( iuplo.EQ.1 )
THEN
2281 DO 1330 i =
max( 1, j-kd ), j
2282 v( kd+1+i-j, j ) = a( i, j )
2287 DO 1350 i = j,
min( n, j+kd )
2288 v( 1+i-j, j ) = a( i, j )
2293 srnamt =
'SSBEVX_2STAGE'
2295 $ u, ldu, vl, vu, il, iu, abstol, m3, wa3,
2296 $ z, ldu, work, lwork, iwork, iwork( 5*n+1 ),
2298 IF( iinfo.NE.0 )
THEN
2299 WRITE( nounit, fmt = 9999 )
2300 $
'SSBEVX_2STAGE(N,I,' // uplo //
2301 $
')', iinfo, n, jtype, ioldsd
2303 IF( iinfo.LT.0 )
THEN
2306 result( ntest ) = ulpinv
2313 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2314 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2316 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2320 result( ntest ) = ( temp1+temp2 ) /
2321 $
max( unfl, temp3*ulp )
2325 IF( iuplo.EQ.1 )
THEN
2327 DO 1380 i =
max( 1, j-kd ), j
2328 v( kd+1+i-j, j ) = a( i, j )
2333 DO 1400 i = j,
min( n, j+kd )
2334 v( 1+i-j, j ) = a( i, j )
2340 CALL ssbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
2341 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2342 $ iwork, iwork( 5*n+1 ), iinfo )
2343 IF( iinfo.NE.0 )
THEN
2344 WRITE( nounit, fmt = 9999 )
'SSBEVX(V,V,' // uplo //
2345 $
')', iinfo, n, jtype, ioldsd
2347 IF( iinfo.LT.0 )
THEN
2350 result( ntest ) = ulpinv
2351 result( ntest+1 ) = ulpinv
2352 result( ntest+2 ) = ulpinv
2359 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2360 $ v, ldu, tau, work, result( ntest ) )
2364 IF( iuplo.EQ.1 )
THEN
2366 DO 1420 i =
max( 1, j-kd ), j
2367 v( kd+1+i-j, j ) = a( i, j )
2372 DO 1440 i = j,
min( n, j+kd )
2373 v( 1+i-j, j ) = a( i, j )
2378 srnamt =
'SSBEVX_2STAGE'
2380 $ u, ldu, vl, vu, il, iu, abstol, m3, wa3,
2381 $ z, ldu, work, lwork, iwork, iwork( 5*n+1 ),
2383 IF( iinfo.NE.0 )
THEN
2384 WRITE( nounit, fmt = 9999 )
2385 $
'SSBEVX_2STAGE(N,V,' // uplo //
2386 $
')', iinfo, n, jtype, ioldsd
2388 IF( iinfo.LT.0 )
THEN
2391 result( ntest ) = ulpinv
2396 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2397 result( ntest ) = ulpinv
2403 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2404 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2406 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2410 result( ntest ) = ( temp1+temp2 ) /
2411 $
max( unfl, temp3*ulp )
2417 CALL slacpy(
' ', n, n, a, lda, v, ldu )
2421 CALL ssyevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
2422 $ iwork, liwedc, iinfo )
2423 IF( iinfo.NE.0 )
THEN
2424 WRITE( nounit, fmt = 9999 )
'SSYEVD(V,' // uplo //
2425 $
')', iinfo, n, jtype, ioldsd
2427 IF( iinfo.LT.0 )
THEN
2430 result( ntest ) = ulpinv
2431 result( ntest+1 ) = ulpinv
2432 result( ntest+2 ) = ulpinv
2439 CALL ssyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
2440 $ ldu, tau, work, result( ntest ) )
2442 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2445 srnamt =
'SSYEVD_2STAGE'
2447 $ lwork, iwork, liwedc, iinfo )
2448 IF( iinfo.NE.0 )
THEN
2449 WRITE( nounit, fmt = 9999 )
2450 $
'SSYEVD_2STAGE(N,' // uplo //
2451 $
')', iinfo, n, jtype, ioldsd
2453 IF( iinfo.LT.0 )
THEN
2456 result( ntest ) = ulpinv
2466 temp1 =
max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2467 temp2 =
max( temp2, abs( d1( j )-d3( j ) ) )
2469 result( ntest ) = temp2 /
max( unfl,
2470 $ ulp*
max( temp1, temp2 ) )
2476 CALL slacpy( '
', N, N, V, LDU, A, LDA )
2481.EQ.
IF( IUPLO1 ) THEN
2485 WORK( INDX ) = A( I, J )
2493 WORK( INDX ) = A( I, J )
2501 CALL SSPEVD( 'v
', UPLO, N, WORK, D1, Z, LDU,
2502 $ WORK( INDX ), LWEDC-INDX+1, IWORK, LIWEDC,
2504.NE.
IF( IINFO0 ) THEN
2505 WRITE( NOUNIT, FMT = 9999 )'sspevd(v,
' // UPLO //
2506 $ ')
', IINFO, N, JTYPE, IOLDSD
2508.LT.
IF( IINFO0 ) THEN
2511 RESULT( NTEST ) = ULPINV
2512 RESULT( NTEST+1 ) = ULPINV
2513 RESULT( NTEST+2 ) = ULPINV
2520 CALL SSYT21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
2521 $ LDU, TAU, WORK, RESULT( NTEST ) )
2523.EQ.
IF( IUPLO1 ) THEN
2528 WORK( INDX ) = A( I, J )
2536 WORK( INDX ) = A( I, J )
2544 CALL SSPEVD( 'n
', UPLO, N, WORK, D3, Z, LDU,
2545 $ WORK( INDX ), LWEDC-INDX+1, IWORK, LIWEDC,
2547.NE.
IF( IINFO0 ) THEN
2548 WRITE( NOUNIT, FMT = 9999 )'sspevd(n,
' // UPLO //
2549 $ ')
', IINFO, N, JTYPE, IOLDSD
2551.LT.
IF( IINFO0 ) THEN
2554 RESULT( NTEST ) = ULPINV
2564 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
2565 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
2567 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
2568 $ ULP*MAX( TEMP1, TEMP2 ) )
2573.LE.
IF( JTYPE7 ) THEN
2575.GE..AND..LE.
ELSE IF( JTYPE8 JTYPE15 ) THEN
2584.EQ.
IF( IUPLO1 ) THEN
2586 DO 1590 I = MAX( 1, J-KD ), J
2587 V( KD+1+I-J, J ) = A( I, J )
2592 DO 1610 I = J, MIN( N, J+KD )
2593 V( 1+I-J, J ) = A( I, J )
2600 CALL SSBEVD( 'v
', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
2601 $ LWEDC, IWORK, LIWEDC, IINFO )
2602.NE.
IF( IINFO0 ) THEN
2603 WRITE( NOUNIT, FMT = 9999 )'ssbevd(v,
' // UPLO //
2604 $ ')
', IINFO, N, JTYPE, IOLDSD
2606.LT.
IF( IINFO0 ) THEN
2609 RESULT( NTEST ) = ULPINV
2610 RESULT( NTEST+1 ) = ULPINV
2611 RESULT( NTEST+2 ) = ULPINV
2618 CALL SSYT21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
2619 $ LDU, TAU, WORK, RESULT( NTEST ) )
2621.EQ.
IF( IUPLO1 ) THEN
2623 DO 1630 I = MAX( 1, J-KD ), J
2624 V( KD+1+I-J, J ) = A( I, J )
2629 DO 1650 I = J, MIN( N, J+KD )
2630 V( 1+I-J, J ) = A( I, J )
2637 CALL SSBEVD_2STAGE( 'n
', UPLO, N, KD, V, LDU, D3, Z, LDU,
2638 $ WORK, LWORK, IWORK, LIWEDC, IINFO )
2639.NE.
IF( IINFO0 ) THEN
2640 WRITE( NOUNIT, FMT = 9999 )
2642 $ ')
', IINFO, N, JTYPE, IOLDSD
2644.LT.
IF( IINFO0 ) THEN
2647 RESULT( NTEST ) = ULPINV
2657 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D3( J ) ) )
2658 TEMP2 = MAX( TEMP2, ABS( D1( J )-D3( J ) ) )
2660 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
2661 $ ULP*MAX( TEMP1, TEMP2 ) )
2666 CALL SLACPY( ' ', N, N, A, LDA, V, LDU )
2669 CALL SSYEVR( 'v
', 'a
', UPLO, N, A, LDU, VL, VU, IL, IU,
2670 $ ABSTOL, M, WA1, Z, LDU, IWORK, WORK, LWORK,
2671 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2672.NE.
IF( IINFO0 ) THEN
2673 WRITE( NOUNIT, FMT = 9999 )'ssyevr(v,a,
' // UPLO //
2674 $ ')
', IINFO, N, JTYPE, IOLDSD
2676.LT.
IF( IINFO0 ) THEN
2679 RESULT( NTEST ) = ULPINV
2680 RESULT( NTEST+1 ) = ULPINV
2681 RESULT( NTEST+2 ) = ULPINV
2688 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2690 CALL SSYT21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
2691 $ LDU, TAU, WORK, RESULT( NTEST ) )
2695 CALL SSYEVR_2STAGE( 'n
', 'a
', UPLO, N, A, LDU, VL, VU,
2696 $ IL, IU, ABSTOL, M2, WA2, Z, LDU, IWORK,
2697 $ WORK, LWORK, IWORK(2*N+1), LIWORK-2*N,
2699.NE.
IF( IINFO0 ) THEN
2700 WRITE( NOUNIT, FMT = 9999 )
2702 $ ')
', IINFO, N, JTYPE, IOLDSD
2704.LT.
IF( IINFO0 ) THEN
2707 RESULT( NTEST ) = ULPINV
2717 TEMP1 = MAX( TEMP1, ABS( WA1( J ) ), ABS( WA2( J ) ) )
2718 TEMP2 = MAX( TEMP2, ABS( WA1( J )-WA2( J ) ) )
2720 RESULT( NTEST ) = TEMP2 / MAX( UNFL,
2721 $ ULP*MAX( TEMP1, TEMP2 ) )
2726 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2728 CALL SSYEVR( 'v
', 'i
', UPLO, N, A, LDU, VL, VU, IL, IU,
2729 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
2730 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2731.NE.
IF( IINFO0 ) THEN
2732 WRITE( NOUNIT, FMT = 9999 )'ssyevr(v,i,
' // UPLO //
2733 $ ')
', IINFO, N, JTYPE, IOLDSD
2735.LT.
IF( IINFO0 ) THEN
2738 RESULT( NTEST ) = ULPINV
2739 RESULT( NTEST+1 ) = ULPINV
2740 RESULT( NTEST+2 ) = ULPINV
2747 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2749 CALL SSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2750 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
2753 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2755 CALL SSYEVR_2STAGE( 'n
', 'i
', UPLO, N, A, LDU, VL, VU,
2756 $ IL, IU, ABSTOL, M3, WA3, Z, LDU, IWORK,
2757 $ WORK, LWORK, IWORK(2*N+1), LIWORK-2*N,
2759.NE.
IF( IINFO0 ) THEN
2760 WRITE( NOUNIT, FMT = 9999 )
2762 $ ')
', IINFO, N, JTYPE, IOLDSD
2764.LT.
IF( IINFO0 ) THEN
2767 RESULT( NTEST ) = ULPINV
2774 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2775 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
2776 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
2777 $ MAX( UNFL, ULP*TEMP3 )
2781 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2783 CALL SSYEVR( 'v
', 'v
', UPLO, N, A, LDU, VL, VU, IL, IU,
2784 $ ABSTOL, M2, WA2, Z, LDU, IWORK, WORK, LWORK,
2785 $ IWORK(2*N+1), LIWORK-2*N, IINFO )
2786.NE.
IF( IINFO0 ) THEN
2787 WRITE( NOUNIT, FMT = 9999 )'ssyevr(v,v,
' // UPLO //
2788 $ ')
', IINFO, N, JTYPE, IOLDSD
2790.LT.
IF( IINFO0 ) THEN
2793 RESULT( NTEST ) = ULPINV
2794 RESULT( NTEST+1 ) = ULPINV
2795 RESULT( NTEST+2 ) = ULPINV
2802 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2804 CALL SSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2805 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
2808 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2810 CALL SSYEVR_2STAGE( 'n
', 'v
', UPLO, N, A, LDU, VL, VU,
2811 $ IL, IU, ABSTOL, M3, WA3, Z, LDU, IWORK,
2812 $ WORK, LWORK, IWORK(2*N+1), LIWORK-2*N,
2814.NE.
IF( IINFO0 ) THEN
2815 WRITE( NOUNIT, FMT = 9999 )
2817 $ ')
', IINFO, N, JTYPE, IOLDSD
2819.LT.
IF( IINFO0 ) THEN
2822 RESULT( NTEST ) = ULPINV
2827.EQ..AND..GT.
IF( M30 N0 ) THEN
2828 RESULT( NTEST ) = ULPINV
2834 TEMP1 = SSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2835 TEMP2 = SSXT1( 1, WA3, M3, WA2, M2, ABSTOL, ULP, UNFL )
2837 TEMP3 = MAX( ABS( WA1( 1 ) ), ABS( WA1( N ) ) )
2841 RESULT( NTEST ) = ( TEMP1+TEMP2 ) /
2842 $ MAX( UNFL, TEMP3*ULP )
2844 CALL SLACPY( ' ', N, N, V, LDU, A, LDA )
2850 NTESTT = NTESTT + NTEST
2852 CALL SLAFTS( 'sst
', N, N, JTYPE, NTEST, RESULT, IOLDSD,
2853 $ THRESH, NOUNIT, NERRS )
2860 CALL ALASVM( 'sst
', NOUNIT, NERRS, NTESTT, 0 )
2862 9999 FORMAT( ' sdrvst2stg:
', A, ' returned info=
', I6, '.
', / 9X,
2863 $ 'n=
', I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )