449 SUBROUTINE ddrvst2stg( 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,
461 DOUBLE PRECISION THRESH
465 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
466 DOUBLE PRECISION A( LDA, * ), D1( * ), ( * ), D3( * ),
467 $ d4( * ), eveigs( * ), result( * ), tau( * ),
468 $ u( ldu, * ), v( ldu, * ), wa1( * ), wa2( * ),
469 $ wa3( * ), work( * ), z( ldu, * )
475 DOUBLE PRECISION ZERO, ONE, TWO, TEN
476 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
478 DOUBLE PRECISION HALF
479 parameter( half = 0.5d0 )
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 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, , 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 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
502 EXTERNAL DLAMCH, DLARND, DSXT1
518 COMMON / srnamc / srnamt
521 INTRINSIC abs, dble, 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(
'DDRVST2STG', -info )
573 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
578 unfl = dlamch(
'Safe minimum' )
579 ovfl = dlamch(
'Overflow' )
581 ulp = dlamch(
'Epsilon' )*dlamch(
'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( dble( n ) ) / log( two ) )
605 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
613 aninv = one / dble(
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 dlaset(
'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 dlatms( 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 dlatms( 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 dlatmr( n, n,
'S', iseed,
'S', work, 6, 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 dlatmr( 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 )*dlarnd( 1, iseed3 ) )
731 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
732 $ anorm, ihbw, ihbw,
'Z', u, ldu, work( n+1 ),
737 CALL dlaset(
'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 )*dlarnd( 1, iseed2 ) )
766 iu = 1 + int( ( n-1 )*dlarnd( 1, iseed2 ) )
776 IF( jtype.LE.7 )
THEN
779 d1( i ) = dble( a( i, i ) )
782 d2( i ) = dble( a( i+1, i ) )
785 CALL dstev(
'V', n, d1, d2, z, ldu, work, iinfo )
786 IF( iinfo.NE.0 )
THEN
787 WRITE( nounit, fmt = 9999 )
'DSTEV(V)', iinfo, n,
790 IF( iinfo.LT.0 )
THEN
803 d3( i ) = dble( a( i, i ) )
806 d4( i ) = dble( a( i+1, i ) )
808 CALL dstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
813 d4( i ) = dble( a( i+1, i ) )
816 CALL dstev(
'N', n, d3, d4, z, ldu, work, iinfo )
817 IF( iinfo.NE.0 )
THEN
818 WRITE( nounit, fmt = 9999 )
'DSTEV(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 ) = dble( a( i, i ) )
848 d2( i ) = dble( a( i+1, i ) )
851 CALL dstevx(
'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 )
'DSTEVX(V,A)', iinfo, n,
858 IF( iinfo.LT.0 )
THEN
868 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
876 d3( i ) = dble( a( i, i ) )
879 d4( i ) = dble( a( i+1, i ) )
881 CALL dstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
886 d4( i ) = dble( a( i+1, i ) )
889 CALL dstevx(
'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 )
'DSTEVX(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
913 result( 6 ) = temp2 /
max( unfl,
914 $ ulp*
max( temp1, temp2 ) )
920 d1( i ) = dble( a( i, i ) )
923 d2( i ) = dble( a( i+1, i ) )
926 CALL dstevr(
'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 )
'DSTEVR(V,A)', iinfo, n,
933 IF( iinfo.LT.0 )
THEN
950 d3( i ) = dble( a( i, i ) )
953 d4( i ) = dble( a( i+1, i ) )
955 CALL dstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
960 d4( i ) = dble( a( i+1, i ) )
963 CALL dstevr(
'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 )
'DSTEVR(N,A)', iinfo, n,
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 ) )
995 d1( i ) = dble( a( i, i ) )
998 d2( i ) = dble( a( i+1, i ) )
1001 CALL dstevx(
'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 )
'DSTEVX(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 ) = dble( a( i, i ) )
1024 d4( i ) = dble( a( i+1, i ) )
1026 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1027 $
max( 1, m2 ), result( 10 ) )
1032 d4( i ) = dble( a( i+1, i ) )
1035 CALL dstevx(
'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 )
'DSTEVX(N,I)', iinfo, n,
1042 IF( iinfo.LT.0 )
THEN
1045 result( 12 ) = ulpinv
1052 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1053 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp
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 ) = dble( a( i, i ) )
1085 d2( i ) = dble( a( i+1, i ) )
1088 CALL dstevx(
'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 )
'DSTEVX(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 ) = dble( a( i, i ) )
1118 d4( i ) = dble( a( i+1, i ) )
1120 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1121 $
max( 1, m2 ), result( 13 ) )
1125 d4( i ) = dble( a( i+1, i ) )
1128 CALL dstevx(
'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 )
'DSTEVX(N,V)', iinfo, n,
1135 IF( iinfo.LT.0 )
THEN
1138 result( 15 ) = ulpinv
1145 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1146 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1147 result( 15 ) = ( temp1+temp2 ) /
max( unfl, temp3*ulp )
1153 d1( i ) = dble( a( i, i ) )
1156 d2( i ) = dble( a( i+1, i ) )
1159 CALL dstevd(
'V', n, d1, d2, z, ldu, work, lwedc, iwork,
1161 IF( iinfo.NE.0 )
THEN
1162 WRITE( nounit, fmt = 9999 )
'DSTEVD(V)', iinfo, n,
1165 IF( iinfo.LT.0 )
THEN
1168 result( 16 ) = ulpinv
1169 result( 17 ) = ulpinv
1170 result( 18 ) = ulpinv
1178 d3( i ) = dble( a( i, i ) )
1181 d4( i ) = dble( a( i+1, i ) )
1183 CALL dstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
1188 d4( i ) = dble( a( i+1, i ) )
1191 CALL dstevd(
'N', n, d3, d4, z, ldu, work, lwedc, iwork,
1193 IF( iinfo.NE.0 )
THEN
1194 WRITE( nounit, fmt = 9999 )
'DSTEVD(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 ) = dble( a( i, i ) )
1224 d2( i ) = dble( a( i+1, i ) )
1227 CALL dstevr(
'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 )
'DSTEVR(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 ) = dble( a( i, i ) )
1250 d4( i ) = dble( a( i+1, i ) )
1252 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1253 $
max( 1, m2 ), result( 19 ) )
1258 d4( i ) = dble( a( i+1, i ) )
1261 CALL dstevr(
'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 )
'DSTEVR(N,I)', iinfo, n,
1268 IF( iinfo.LT.0 )
THEN
1271 result( 21 ) = ulpinv
1278 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1279 temp2 = dsxt1( 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 ) = dble( a( i, i ) )
1311 d2( i ) = dble( a( i+1, i ) )
1314 CALL dstevr(
'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 )
'DSTEVR(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 ) = dble( a( i, i ) )
1344 d4( i ) = dble( a( i+1, i ) )
1346 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1347 $
max( 1, m2 ), result( 22 ) )
1351 d4( i ) = dble( a( i+1, i ) )
1354 CALL dstevr(
'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 )
'DSTEVR(N,V)', iinfo, n,
1361 IF( iinfo.LT.0 )
THEN
1364 result( 24 ) = ulpinv
1371 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1372 temp2 = dsxt1( 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 dlacpy(
' ', n, n, a, lda, v, ldu
1403 CALL dsyev(
'V', uplo, n, a, ldu, d1, work, lwork,
1405 IF( iinfo.NE.0 )
THEN
1406 WRITE( nounit, fmt = 9999 )
'DSYEV(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 dsyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1422 $ ldu, tau, work, result( ntest ) )
1424 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1427 srnamt =
'DSYEV_2STAGE'
1428 CALL dsyev_2stage(
'N', uplo, n, a, ldu, d3, work, lwork,
1430 IF( iinfo.NE.0 )
THEN
1431 WRITE( nounit, fmt = 9999 )
1432 $
'DSYEV_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 dlacpy(
' ', 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 dsyevx(
'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 )
'DSYEVX(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 dlacpy(
' ', n, n, v, ldu, a, lda )
1503 CALL dsyt21( 1, uplo, n, 0, a, ldu, d1, d2, z, ldu, v,
1504 $ ldu, tau, work, result( ntest ) )
1507 srnamt =
'DSYEVX_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 $
'DSYEVX_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 dlacpy(
' ', n, n, v, ldu, a, lda )
1540 CALL dsyevx(
'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 )
'DSYEVX(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 dlacpy(
' ', n, n, v, ldu, a, lda )
1561 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1562 $ v, ldu, tau, work, result( ntest ) )
1565 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1566 srnamt =
'DSYEVX_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 $
'DSYEVX_2STAGE(N,I,' // uplo //
1573 $
')', iinfo, n, jtype, ioldsd
1575 IF( iinfo.LT.0 )
THEN
1578 result( ntest ) = ulpinv
1585 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1586 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1587 result( ntest ) = ( temp1+temp2 ) /
1588 $
max( unfl, ulp*temp3 )
1592 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1594 CALL dsyevx(
'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 )'dsyevx(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 DLACPY( ' ', N, N, V, LDU, A, LDA )
1615 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
1616 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
1619 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
1621 CALL DSYEVX_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 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1645 TEMP2 = DSXT1( 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 DLACPY( ' ', 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 DSPEV( 'v
', UPLO, N, WORK, D1, Z, LDU, V, IINFO )
1684.NE.
IF( IINFO0 ) THEN
1685 WRITE( NOUNIT, FMT = 9999 )'dspev(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 DSYT21( 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 DSPEV( 'n
', UPLO, N, WORK, D3, Z, LDU, V, IINFO )
1724.NE.
IF( IINFO0 ) THEN
1725 WRITE( NOUNIT, FMT = 9999 )'dspev(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 DSPEVX( '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 )'dspevx(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 DSYT21( 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 DSPEVX( '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 )'dspevx(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 DSPEVX( '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 )'dspevx(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 DSYT22( 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 DSPEVX( '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 )'dspevx(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 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
1951 TEMP2 = DSXT1( 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 DSPEVX( '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 )'dspevx(v,v,
' // UPLO //
1987 $ ')
', IINFO, N, JTYPE, IOLDSD
1989.LT.
IF( IINFO0 ) THEN
1992 RESULT( NTEST ) = ULPINV
1993 RESULT( NTEST+1 ) = ULPINV
1994 RESULT( NTEST+2 ) = ULPINV
2001 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2002 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
2006.EQ.
IF( IUPLO1 ) THEN
2010 WORK( INDX ) = A( I, J )
2018 WORK( INDX ) = A( I, J )
2025 CALL DSPEVX( 'n
', 'v
', UPLO, N, WORK, VL, VU, IL, IU,
2026 $ ABSTOL, M3, WA3, Z, LDU, V, IWORK,
2027 $ IWORK( 5*N+1 ), IINFO )
2028.NE.
IF( IINFO0 ) THEN
2029 WRITE( NOUNIT, FMT = 9999 )'dspevx(n,v,
' // UPLO //
2030 $ ')
', IINFO, N, JTYPE, IOLDSD
2032.LT.
IF( IINFO0 ) THEN
2035 RESULT( NTEST ) = ULPINV
2040.EQ..AND..GT.
IF( M30 N0 ) THEN
2041 RESULT( NTEST ) = ULPINV
2047 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2048 TEMP2 = DSXT1( 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.LE.
IF( JTYPE7 ) THEN
2063.GE..AND..LE.
ELSE IF( JTYPE8 JTYPE15 ) THEN
2072.EQ.
IF( IUPLO1 ) 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 DSBEV( 'v
', UPLO, N, KD, V, LDU, D1, Z, LDU, WORK,
2090.NE.
IF( IINFO0 ) THEN
2091 WRITE( NOUNIT, FMT = 9999 )'dsbev(v,
' // UPLO // ')
',
2092 $ IINFO, N, JTYPE, IOLDSD
2094.LT.
IF( IINFO0 ) THEN
2097 RESULT( NTEST ) = ULPINV
2098 RESULT( NTEST+1 ) = ULPINV
2099 RESULT( NTEST+2 ) = ULPINV
2106 CALL DSYT21( 1, UPLO, N, 0, A, LDA, D1, D2, Z, LDU, V,
2107 $ LDU, TAU, WORK, RESULT( NTEST ) )
2109.EQ.
IF( IUPLO1 ) 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 )
2125 CALL DSBEV_2STAGE( 'n
', UPLO, N, KD, V, LDU, D3, Z, LDU,
2126 $ WORK, LWORK, IINFO )
2127.NE.
IF( IINFO0 ) THEN
2128 WRITE( NOUNIT, FMT = 9999 )
2130 $ IINFO, N, JTYPE, IOLDSD
2132.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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 DSBEVX( '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.NE.
IF( IINFO0 ) THEN
2175 WRITE( NOUNIT, FMT = 9999 )'dsbevx(v,a,
' // UPLO //
2176 $ ')
', IINFO, N, JTYPE, IOLDSD
2178.LT.
IF( IINFO0 ) THEN
2181 RESULT( NTEST ) = ULPINV
2182 RESULT( NTEST+1 ) = ULPINV
2183 RESULT( NTEST+2 ) = ULPINV
2190 CALL DSYT21( 1, UPLO, N, 0, A, LDU, WA2, D2, Z, LDU, V,
2191 $ LDU, TAU, WORK, RESULT( NTEST ) )
2195.EQ.
IF( IUPLO1 ) 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 )
2210 CALL DSBEVX_2STAGE( 'n
', 'a
', UPLO, N, KD, V, LDU,
2211 $ U, LDU, VL, VU, IL, IU, ABSTOL, M3, WA3,
2212 $ Z, LDU, WORK, LWORK, IWORK, IWORK( 5*N+1 ),
2214.NE.
IF( IINFO0 ) THEN
2215 WRITE( NOUNIT, FMT = 9999 )
2217 $ ')
', IINFO, N, JTYPE, IOLDSD
2219.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO1 ) 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 DSBEVX( '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.NE.
IF( IINFO0 ) THEN
2259 WRITE( NOUNIT, FMT = 9999 )'dsbevx(v,i,
' // UPLO //
2260 $ ')
', IINFO, N, JTYPE, IOLDSD
2262.LT.
IF( IINFO0 ) THEN
2265 RESULT( NTEST ) = ULPINV
2266 RESULT( NTEST+1 ) = ULPINV
2267 RESULT( NTEST+2 ) = ULPINV
2274 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2275 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
2279.EQ.
IF( IUPLO1 ) 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 )
2294 CALL DSBEVX_2STAGE( 'n
', 'i
', UPLO, N, KD, V, LDU,
2295 $ U, LDU, VL, VU, IL, IU, ABSTOL, M3, WA3,
2296 $ Z, LDU, WORK, LWORK, IWORK, IWORK( 5*N+1 ),
2298.NE.
IF( IINFO0 ) THEN
2299 WRITE( NOUNIT, FMT = 9999 )
2301 $ ')
', IINFO, N, JTYPE, IOLDSD
2303.LT.
IF( IINFO0 ) THEN
2306 RESULT( NTEST ) = ULPINV
2313 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2314 TEMP2 = DSXT1( 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.EQ.
IF( IUPLO1 ) 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 DSBEVX( '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.NE.
IF( IINFO0 ) THEN
2344 WRITE( NOUNIT, FMT = 9999 )'dsbevx(v,v,
' // UPLO //
2345 $ ')
', IINFO, N, JTYPE, IOLDSD
2347.LT.
IF( IINFO0 ) THEN
2350 RESULT( NTEST ) = ULPINV
2351 RESULT( NTEST+1 ) = ULPINV
2352 RESULT( NTEST+2 ) = ULPINV
2359 CALL DSYT22( 1, UPLO, N, M2, 0, A, LDU, WA2, D2, Z, LDU,
2360 $ V, LDU, TAU, WORK, RESULT( NTEST ) )
2364.EQ.
IF( IUPLO1 ) 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 )
2379 CALL DSBEVX_2STAGE( 'n
', 'v
', UPLO, N, KD, V, LDU,
2380 $ U, LDU, VL, VU, IL, IU, ABSTOL, M3, WA3,
2381 $ Z, LDU, WORK, LWORK, IWORK, IWORK( 5*N+1 ),
2383.NE.
IF( IINFO0 ) THEN
2384 WRITE( NOUNIT, FMT = 9999 )
2386 $ ')
', IINFO, N, JTYPE, IOLDSD
2388.LT.
IF( IINFO0 ) THEN
2391 RESULT( NTEST ) = ULPINV
2396.EQ..AND..GT.
IF( M30 N0 ) THEN
2397 RESULT( NTEST ) = ULPINV
2403 TEMP1 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2404 TEMP2 = DSXT1( 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 DLACPY( ' ', N, N, A, LDA, V, LDU )
2421 CALL DSYEVD( 'v
', UPLO, N, A, LDU, D1, WORK, LWEDC,
2422 $ IWORK, LIWEDC, IINFO )
2423.NE.
IF( IINFO0 ) THEN
2424 WRITE( NOUNIT, FMT = 9999 )'dsyevd(v,
' // UPLO //
2425 $ ')
', IINFO, N, JTYPE, IOLDSD
2427.LT.
IF( IINFO0 ) THEN
2430 RESULT( NTEST ) = ULPINV
2431 RESULT( NTEST+1 ) = ULPINV
2432 RESULT( NTEST+2 ) = ULPINV
2439 CALL DSYT21( 1, UPLO, N, 0, V, LDU, D1, D2, A, LDU, Z,
2440 $ LDU, TAU, WORK, RESULT( NTEST ) )
2442 CALL DLACPY( ' ', N, N, V, LDU, A, LDA )
2446 CALL DSYEVD_2STAGE( 'n
', UPLO, N, A, LDU, D3, WORK,
2447 $ LWORK, IWORK, LIWEDC, IINFO )
2448.NE.
IF( IINFO0 ) THEN
2449 WRITE( NOUNIT, FMT = 9999 )
2451 $ ')
', IINFO, N, JTYPE, IOLDSD
2453.LT.
IF( IINFO0 ) 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 DLACPY( ' ', 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 DSPEVD( '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 )'dspevd(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 DSYT21( 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 DSPEVD( '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 )'dspevd(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 DSBEVD( '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 )'dsbevd(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 DSYT21( 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 DSBEVD_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 DLACPY( ' ', N, N, A, LDA, V, LDU )
2669 CALL DSYEVR( '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 )'dsyevr(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 DLACPY( ' ', N, N, V, LDU, A, LDA )
2690 CALL DSYT21( 1, UPLO, N, 0, A, LDU, WA1, D2, Z, LDU, V,
2691 $ LDU, TAU, WORK, RESULT( NTEST ) )
2695 CALL DSYEVR_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 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 dlacpy(
' ', n, n, v, ldu, a, lda )
2728 CALL dsyevr(
'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 IF( iinfo.NE.0 )
THEN
2732 WRITE( nounit, fmt = 9999 )
'DSYEVR(V,I,' // uplo //
2733 $
')', iinfo, n, jtype, ioldsd
2735 IF( iinfo.LT.0 )
THEN
2738 result( ntest ) = ulpinv
2739 result( ntest+1 ) = ulpinv
2740 result( ntest+2 ) = ulpinv
2747 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2749 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2750 $ v, ldu, tau, work, result( ntest ) )
2753 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2754 srnamt =
'DSYEVR_2STAGE'
2756 $ il, iu, abstol, m3, wa3, z, ldu, iwork,
2757 $ work, lwork, iwork(2*n+1), liwork-2*n,
2759 IF( iinfo.NE.0 )
THEN
2760 WRITE( nounit, fmt = 9999 )
2761 $
'DSYEVR_2STAGE(N,I,' // uplo //
2762 $
')', iinfo, n, jtype, ioldsd
2764 IF( iinfo.LT.0 )
THEN
2767 result( ntest ) = ulpinv
2774 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2775 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2776 result( ntest ) = ( temp1+temp2 ) /
2777 $
max( unfl, ulp*temp3 )
2781 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2783 CALL dsyevr(
'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 )
'DSYEVR(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 dlacpy(
' ', n, n, v, ldu, a, lda )
2804 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2805 $ v, ldu, tau, work, result( ntest ) )
2808 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2809 srnamt =
'DSYEVR_2STAGE'
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 = DSXT1( 1, WA2, M2, WA3, M3, ABSTOL, ULP, UNFL )
2835 TEMP2 = DSXT1( 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 DLACPY( ' ', N, N, V, LDU, A, LDA )
2850 NTESTT = NTESTT + NTEST
2852 CALL DLAFTS( 'dst
', N, N, JTYPE, NTEST, RESULT, IOLDSD,
2853 $ THRESH, NOUNIT, NERRS )
2860 CALL ALASVM( 'dst
', NOUNIT, NERRS, NTESTT, 0 )
2862 9999 FORMAT( ' ddrvst2stg:
', A, ' returned info=
', I6, '.
', / 9X,
2863 $ 'n=
', I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, '' )