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, , 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 ) )
629 ioldsd( j ) = iseed( j )
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', idumma, 0, 0,
714 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
716 ELSE IF( itype.EQ.8 )
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 ELSE IF( itype.EQ.9 )
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 IF( iinfo.NE.0 )
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 IF( jtype.LE.7 )
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 IF( iinfo.NE.0 )
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 IF( iinfo.NE.0 )
THEN
818 WRITE( nounit, fmt = 9999 )
'SSTEV(N)', iinfo, n,
821 IF( iinfo.LT.0 )
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 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
THEN
893 WRITE( nounit, fmt = 9999 )
'SSTEVX(N,A)', iinfo, n,
896 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
THEN
930 WRITE( nounit, fmt = 9999 )
'SSTEVR(V,A)', iinfo, n,
933 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
THEN
967 WRITE( nounit, fmt = 9999 )
'SSTEVR(N,A)', iinfo
970 IF( iinfo.LT.0 )
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 ) )
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 IF( iinfo.NE.0 )
THEN
1005 WRITE( nounit, fmt = 9999 )
'SSTEVX(V,I)', iinfo, n,
1008 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
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,
1121 $
max( 1, m2 ), result( 13 ) )
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 ) )
1191 CALL sstevd(
'N', n, d3, d4, z, ldu, work, lwedc, iwork,
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,
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 )
1280 result( 21 ) = ( temp1+temp2 ) /
max( unfl, ulp*temp3 )
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+1, 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 IF( iinfo.NE.0 )
THEN
1406 WRITE( nounit, fmt = 9999 )
'SSYEV(V,' // uplo //
')',
1407 $ iinfo, n, jtype, ioldsd
1409 IF( iinfo.LT.0 )
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 )
1427 srnamt =
'SSYEV_2STAGE'
1428 CALL ssyev_2stage(
'N', uplo, n, a, ldu, d3, work, lwork,
1430 IF( iinfo.NE.0 )
THEN
1431 WRITE( nounit, fmt = 9999 )
1432 $
'SSYEV_2STAGE(N,' // uplo //
')',
1433 $ iinfo, n, jtype, ioldsd
1435 IF( iinfo.LT.0 )
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 ELSE IF( n.GT.0 )
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 ELSE IF( n.GT.0 )
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 IF( iinfo.NE.0 )
THEN
1486 WRITE( nounit, fmt = 9999 )
'SSYEVX(V,A,' // uplo //
1487 $
')', iinfo, n, jtype, ioldsd
1489 IF( iinfo.LT.0 )
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 ) )
1507 srnamt =
'SSYEVX_2STAGE'
1509 $ il, iu, abstol, m2, wa2, z, ldu, work,
1510 $ lwork, iwork, iwork( 5*n+1 ), iinfo )
1511 IF( iinfo.NE.0 )
THEN
1512 WRITE( nounit, fmt = 9999 )
1513 $
'SSYEVX_2STAGE(N,A,' // uplo //
1514 $
')', iinfo, n, jtype, ioldsd
1516 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
THEN
1544 WRITE( nounit, fmt = 9999 )
'SSYEVX(V,I,' // uplo //
1545 $
')', iinfo, n, jtype, ioldsd
1547 IF( iinfo.LT.0 )
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 )
1566 srnamt =
'SSYEVX_2STAGE'
1568 $ il, iu, abstol, m3, wa3, z, ldu, work,
1569 $ lwork, iwork, iwork( 5*n+1 ), iinfo )
1570 IF( iinfo.NE.0 )
THEN
1571 WRITE( nounit, fmt = 9999 )
1572 $
'SSYEVX_2STAGE(N,I,' // uplo //
1573 $
')', iinfo, n, jtype, ioldsd
1575 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
THEN
1598 WRITE( nounit, fmt = 9999 )
'SSYEVX(V,V,' // uplo //
1599 $
')', iinfo, n, jtype, ioldsd
1601 IF( iinfo.LT.0 )
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 )
1620 srnamt =
'SSYEVX_2STAGE'
1622 $ il, iu, abstol, m3, wa3, z, ldu, work,
1623 $ lwork, iwork, iwork( 5*n+1 ), iinfo )
1624 IF( iinfo.NE.0 )
THEN
1625 WRITE( nounit, fmt = 9999 )
1626 $
'SSYEVX_2STAGE(N,V,' // uplo //
1627 $
')', iinfo, n, jtype, ioldsd
1629 IF( iinfo.LT.0 )
THEN
1632 result( ntest ) = ulpinv
1637 IF( m3.EQ.0 .AND. n.GT.0 )
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 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
1685 WRITE( nounit, fmt = 9999 )
'SSPEV(V,' // uplo //
')',
1686 $ iinfo, n, jtype, ioldsd
1688 IF( iinfo.LT.0 )
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 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
1725 WRITE( nounit, fmt = 9999 )
'SSPEV(N,' // uplo //
')',
1726 $ iinfo, n, jtype, ioldsd
1728 IF( iinfo.LT.0 )
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 IF( iuplo.EQ.1 )
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 ELSE IF( n.GT.0 )
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 ELSE IF( n.GT.0 )
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 IF( iinfo.NE.0 )
THEN
1798 WRITE( nounit, fmt = 9999 )
'SSPEVX(V,A,' // uplo //
1799 $
')', iinfo, n, jtype, ioldsd
1801 IF( iinfo.LT.0 )
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 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
1841 WRITE( nounit, fmt = 9999 )
'SSPEVX(N,A,' // uplo //
1842 $
')', iinfo, n, jtype, ioldsd
1844 IF( iinfo.LT.0 )
THEN
1847 result( ntest ) = ulpinv
1857 temp1 =
max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1858 temp2 =
max( temp2, abs( wa1( j )-wa2
1860 result( ntest ) = temp2 /
max( unfl,
1861 $ ulp*
max( temp1, temp2 ) )
1864 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
1889 WRITE( nounit, fmt = 9999 )
'SSPEVX(V,I,' // uplo //
1890 $
')', iinfo, n, jtype, ioldsd
1892 IF( iinfo.LT.0 )
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 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
1932 WRITE( nounit, fmt = 9999 )
'SSPEVX(N,I,' // uplo //
1933 $
')', iinfo, n, jtype, ioldsd
1935 IF( iinfo.LT.0 )
THEN
1938 result( ntest ) = ulpinv
1943 IF( m3.EQ.0 .AND. n.GT.0 )
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 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
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
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 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
2505 WRITE( nounit, fmt = 9999 )
'SSPEVD(V,' // uplo //
2506 $
')', iinfo, n, jtype, ioldsd
2508 IF( iinfo.LT.0 )
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 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
2548 WRITE( nounit, fmt = 9999 )
'SSPEVD(N,' // uplo //
2549 $
')', iinfo, n, jtype, ioldsd
2551 IF( iinfo.LT.0 )
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 IF( jtype.LE.7 )
THEN
2575 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
2584 IF( iuplo.EQ.1 )
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 IF( iinfo.NE.0 )
THEN
2603 WRITE( nounit, fmt = 9999 )
'SSBEVD(V,' // uplo //
2604 $
')', iinfo, n, jtype, ioldsd
2606 IF( iinfo.LT.0 )
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 IF( iuplo.EQ.1 )
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 )
2636 srnamt =
'SSBEVD_2STAGE'
2638 $ work, lwork, iwork, liwedc, iinfo )
2639 IF( iinfo.NE.0 )
THEN
2640 WRITE( nounit, fmt = 9999 )
2641 $
'SSBEVD_2STAGE(N,' // uplo //
2642 $
')', iinfo, n, jtype, ioldsd
2644 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
THEN
2673 WRITE( nounit, fmt = 9999 )
'SSYEVR(V,A,' // uplo //
2674 $
')', iinfo, n, jtype, ioldsd
2676 IF( iinfo.LT.0 )
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 ) )
2694 srnamt =
'SSYEVR_2STAGE'
2696 $ il, iu, abstol, m2, wa2, z, ldu, iwork,
2697 $ work, lwork, iwork(2*n+1), liwork-2*n,
2699 IF( iinfo.NE.0 )
THEN
2700 WRITE( nounit, fmt = 9999 )
2701 $
'SSYEVR_2STAGE(N,A,' // uplo //
2702 $
')', iinfo, n, jtype, ioldsd
2704 IF( iinfo.LT.0 )
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 IF( iinfo.LT.0 )
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 IF( iinfo.NE.0 )
THEN
2787 WRITE( nounit, fmt = 9999 )
'SSYEVR(V,V,' // uplo //
2788 $
')', iinfo, n, jtype, ioldsd
2790 IF( iinfo.LT.0 )
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 )
2809 srnamt =
'SSYEVR_2STAGE'
2811 $ il, iu, abstol, m3, wa3, z, ldu, iwork,
2812 $ work, lwork, iwork(2*n+1), liwork-2*n,
2814 IF( iinfo.NE.0 )
THEN
2815 WRITE( nounit, fmt = 9999 )
2816 $
'SSYEVR_2STAGE(N,V,' // uplo //
2817 $
')', iinfo, n, jtype, ioldsd
2819 IF( iinfo.LT.0 )
THEN
2822 result( ntest ) = ulpinv
2827 IF( m3.EQ.0 .AND. n.GT.0 )
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,
')' )