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, , NOUNIT, NSIZES,
461 DOUBLE PRECISION THRESH
465 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
466 DOUBLE PRECISION A( LDA, * ), D1( * ), D2( * ), 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
481 parameter( maxtyp = 18 )
486 INTEGER , IDIAG, IHBW, IINFO, IL, IMODE, INDX, IROW,
489 $ m3, mtypes, n, nerrs, nmats, nmax, ntest,
491 DOUBLE PRECISION, ANORM, , OVFL, RTOVFL,
492 $ RTUNFL, TEMP1, TEMP2
496 INTEGER IDUMMA( 1 ), ( 4 )
501 DOUBLE PRECISION DLAMCH, DLARND,
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 ) )
613 aninv = one / dble(
max( 1, n ) )
615 IF( nsizes.NE.1 )
THEN
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, 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,
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 )-eveigs( 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
942 temp3 =
max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
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, 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 ) = 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.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1162 WRITE( NOUNIT, FMT = 9999 )'dstevd(v)
', IINFO, N,
1165.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1194 WRITE( NOUNIT, FMT = 9999 )'dstevd(n)
', IINFO, N,
1197.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1231 WRITE( NOUNIT, FMT = 9999 )'dstevr(v,i)
', IINFO, N,
1234.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1265 WRITE( NOUNIT, FMT = 9999 )'dstevr(n,i)
', IINFO, N,
1268.LT.
IF( IINFO0 ) 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.NE.
IF( IINFO0 ) THEN
1318 WRITE( NOUNIT, FMT = 9999 )'dstevr(v,v)
', IINFO, N,
1321.LT.
IF( IINFO0 ) THEN
1324 RESULT( 22 ) = ULPINV
1325 RESULT( 23 ) = ULPINV
1326 RESULT( 24 ) = ULPINV
1331.EQ..AND..GT.
IF( M20 N0 ) 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.NE.
IF( IINFO0 ) THEN
1358 WRITE( NOUNIT, FMT = 9999 )'dstevr(n,v)
', IINFO, N,
1361.LT.
IF( IINFO0 ) 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.EQ.
IF( IUPLO0 ) THEN
1399 CALL DLACPY( ' ', N, N, A, LDA, V, LDU )
1403 CALL DSYEV( 'v
', UPLO, N, A, LDU, D1, WORK, LWORK,
1405.NE.
IF( IINFO0 ) THEN
1406 WRITE( NOUNIT, FMT = 9999 )'dsyev(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 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 )
1428 CALL DSYEV_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 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.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 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.NE.
IF( IINFO0 ) THEN
1486 WRITE( NOUNIT, FMT = 9999 )'dsyevx(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 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 ) )
1508 CALL DSYEVX_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 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.NE.
IF( IINFO0 ) THEN
1544 WRITE( NOUNIT, FMT = 9999 )'dsyevx(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 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 )
1567 CALL DSYEVX_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 = 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 IF( iinfo.LT.0 )
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 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 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 IF( iinfo.NE.0 )
THEN
2344 WRITE( nounit, fmt = 9999 )
'DSBEVX(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 dsyt22( 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 =
'DSBEVX_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 $
'DSBEVX_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 = 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 IF( iinfo.NE.0 )
THEN
2424 WRITE( nounit, fmt = 9999 )
'DSYEVD(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 dsyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
2442 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2445 srnamt =
'DSYEVD_2STAGE'
2447 $ lwork, iwork, liwedc, iinfo )
2448 IF( iinfo.NE.0 )
THEN
2450 $
'DSYEVD_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 dlacpy(
' ', 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 dspevd(
'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 )
'DSPEVD(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 dsyt21( 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 dspevd(
'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 )
'DSPEVD(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 dsbevd(
'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 )
'DSBEVD(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 dsyt21( 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 =
'DSBEVD_2STAGE'
2638 $ work, lwork, iwork, liwedc, iinfo )
2639 IF( iinfo.NE.0 )
THEN
2640 WRITE( nounit, fmt = 9999 )
2641 $
'DSBEVD_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 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 IF( iinfo.NE.0 )
THEN
2673 WRITE( nounit, fmt = 9999 )
'DSYEVR(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 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 ) )
2694 srnamt =
'DSYEVR_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 $
'DSYEVR_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 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,
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 IF( iinfo.NE.0 )
THEN
2815 WRITE( nounit, fmt = 9999 )
2816 $
'DSYEVR_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 = 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,
')' )