449 SUBROUTINE ddrvst( 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( * ), 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
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, OVFL, RTOVFL,
492 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
496 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
497 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
501 DOUBLE PRECISION DLAMCH, DLARND, DSXT1
502 EXTERNAL DLAMCH, DLARND, DSXT1
515 COMMON / srnamc / srnamt
518 INTRINSIC abs, dble, int, log, max, min, sqrt
521 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 3*9 /
522 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
524 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
542 nmax = max( nmax, nn( j ) )
549 IF( nsizes.LT.0 )
THEN
551 ELSE IF( badnn )
THEN
553 ELSE IF( ntypes.LT.0 )
THEN
555 ELSE IF( lda.LT.nmax )
THEN
557 ELSE IF( ldu.LT.nmax )
THEN
559 ELSE IF( 2*max( 2, nmax )**2.GT.lwork )
THEN
564 CALL xerbla(
'DDRVST', -info )
570 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
575 unfl = dlamch(
'Safe minimum' )
576 ovfl = dlamch(
'Overflow' )
577 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
579 rtunfl = sqrt( unfl )
580 rtovfl = sqrt( ovfl )
585 iseed2( i ) = iseed( i )
586 iseed3( i ) = iseed( i )
593 DO 1740 jsize = 1, nsizes
596 lgn = int( log( dble( n ) ) / log( two ) )
601 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
609 aninv = one / dble( max( 1, n ) )
611 IF( nsizes.NE.1 )
THEN
612 mtypes = min( maxtyp, ntypes )
614 mtypes = min( maxtyp+1, ntypes )
617 DO 1730 jtype = 1, mtypes
619 IF( .NOT.dotype( jtype ) )
625 ioldsd( j ) = iseed( j )
643 IF( mtypes.GT.maxtyp )
646 itype = ktype( jtype )
647 imode = kmode( jtype )
651 GO TO ( 40, 50, 60 )kmagn( jtype )
658 anorm = ( rtovfl*ulp )*aninv
662 anorm = rtunfl*n*ulpinv
667 CALL dlaset(
'Full', lda, n, zero, zero, a, lda )
675 IF( itype.EQ.1 )
THEN
678 ELSE IF( itype.EQ.2 )
THEN
683 a( jcol, jcol ) = anorm
686 ELSE IF( itype.EQ.4 )
THEN
690 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
691 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
694 ELSE IF( itype.EQ.5 )
THEN
698 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
699 $ anorm, n, n,
'N', a, lda, work( n+1 ),
702 ELSE IF( itype.EQ.7 )
THEN
707 CALL dlatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
708 $
'T',
'N', work( n+1 ), 1, one,
709 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
710 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
712 ELSE IF( itype.EQ.8 )
THEN
717 CALL dlatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
718 $
'T',
'N', work( n+1 ), 1, one,
719 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
720 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
722 ELSE IF( itype.EQ.9 )
THEN
726 ihbw = int( ( n-1 )*dlarnd( 1, iseed3 ) )
727 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
728 $ anorm, ihbw, ihbw,
'Z', u, ldu, work( n+1 ),
733 CALL dlaset(
'Full', lda, n, zero, zero, a, lda )
734 DO 100 idiag = -ihbw, ihbw
735 irow = ihbw - idiag + 1
736 j1 = max( 1, idiag+1 )
737 j2 = min( n, n+idiag )
740 a( i, j ) = u( irow, j )
747 IF( iinfo.NE.0 )
THEN
748 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
761 il = 1 + ( n-1 )*int( dlarnd( 1, iseed2 ) )
762 iu = 1 + ( n-1 )*int( dlarnd( 1, iseed2 ) )
772 IF( jtype.LE.7 )
THEN
775 d1( i ) = dble( a( i, i ) )
778 d2( i ) = dble( a( i+1, i ) )
781 CALL dstev(
'V', n, d1, d2, z, ldu, work, iinfo )
782 IF( iinfo.NE.0 )
THEN
783 WRITE( nounit, fmt = 9999 )
'DSTEV(V)', iinfo, n,
786 IF( iinfo.LT.0 )
THEN
799 d3( i ) = dble( a( i, i ) )
802 d4( i ) = dble( a( i+1, i ) )
804 CALL dstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
809 d4( i ) = dble( a( i+1, i ) )
812 CALL dstev(
'N', n, d3, d4, z, ldu, work, iinfo )
813 IF( iinfo.NE.0 )
THEN
814 WRITE( nounit, fmt = 9999 )
'DSTEV(N)', iinfo, n,
817 IF( iinfo.LT.0 )
THEN
830 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
831 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
833 result( 3 ) = temp2 / max( unfl,
834 $ ulp*max( temp1, temp2 ) )
840 eveigs( i ) = d3( i )
841 d1( i ) = dble( a( i, i ) )
844 d2( i ) = dble( a( i+1, i ) )
847 CALL dstevx(
'V',
'A', n, d1, d2, vl, vu, il, iu, abstol,
848 $ m, wa1, z, ldu, work, iwork, iwork( 5*n+1 ),
850 IF( iinfo.NE.0 )
THEN
851 WRITE( nounit, fmt = 9999 )
'DSTEVX(V,A)', iinfo, n,
854 IF( iinfo.LT.0 )
THEN
864 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
872 d3( i ) = dble( a( i, i ) )
875 d4( i ) = dble( a( i+1, i ) )
877 CALL dstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
882 d4( i ) = dble( a( i+1, i ) )
885 CALL dstevx(
'N',
'A', n, d3, d4, vl, vu, il, iu, abstol,
886 $ m2, wa2, z, ldu, work, iwork,
887 $ iwork( 5*n+1 ), iinfo )
888 IF( iinfo.NE.0 )
THEN
889 WRITE( nounit, fmt = 9999 )
'DSTEVX(N,A)', iinfo, n,
892 IF( iinfo.LT.0 )
THEN
905 temp1 = max( temp1, abs( wa2( j ) ),
906 $ abs( eveigs( j ) ) )
907 temp2 = max( temp2, abs( wa2( j )-eveigs( j ) ) )
909 result( 6 ) = temp2 / max( unfl,
910 $ ulp*max( temp1, temp2 ) )
916 d1( i ) = dble( a( i, i ) )
919 d2( i ) = dble( a( i+1, i ) )
922 CALL dstevr(
'V',
'A', n, d1, d2, vl, vu, il, iu, abstol,
923 $ m, wa1, z, ldu, iwork, work, lwork,
924 $ iwork(2*n+1), liwork-2*n, iinfo )
925 IF( iinfo.NE.0 )
THEN
926 WRITE( nounit, fmt = 9999 )
'DSTEVR(V,A)', iinfo, n,
929 IF( iinfo.LT.0 )
THEN
938 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
946 d3( i ) = dble( a( i, i ) )
949 d4( i ) = dble( a( i+1, i ) )
951 CALL dstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
956 d4( i ) = dble( a( i+1, i ) )
959 CALL dstevr(
'N',
'A', n, d3, d4, vl, vu, il, iu, abstol,
960 $ m2, wa2, z, ldu, iwork, work, lwork,
961 $ iwork(2*n+1), liwork-2*n, iinfo )
962 IF( iinfo.NE.0 )
THEN
963 WRITE( nounit, fmt = 9999 )
'DSTEVR(N,A)', iinfo, n,
966 IF( iinfo.LT.0 )
THEN
979 temp1 = max( temp1, abs( wa2( j ) ),
980 $ abs( eveigs( j ) ) )
981 temp2 = max( temp2, abs( wa2( j )-eveigs( j ) ) )
983 result( 9 ) = temp2 / max( unfl,
984 $ ulp*max( temp1, temp2 ) )
991 d1( i ) = dble( a( i, i ) )
994 d2( i ) = dble( a( i+1, i ) )
997 CALL dstevx(
'V',
'I', n, d1, d2, vl, vu, il, iu, abstol,
998 $ m2, wa2, z, ldu, work, iwork,
999 $ iwork( 5*n+1 ), iinfo )
1000 IF( iinfo.NE.0 )
THEN
1001 WRITE( nounit, fmt = 9999 )
'DSTEVX(V,I)', iinfo, n,
1004 IF( iinfo.LT.0 )
THEN
1007 result( 10 ) = ulpinv
1008 result( 11 ) = ulpinv
1009 result( 12 ) = ulpinv
1017 d3( i ) = dble( a( i, i ) )
1020 d4( i ) = dble( a( i+1, i ) )
1022 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1023 $ max( 1, m2 ), result( 10 ) )
1028 d4( i ) = dble( a( i+1, i ) )
1031 CALL dstevx(
'N',
'I', n, d3, d4, vl, vu, il, iu, abstol,
1032 $ m3, wa3, z, ldu, work, iwork,
1033 $ iwork( 5*n+1 ), iinfo )
1034 IF( iinfo.NE.0 )
THEN
1035 WRITE( nounit, fmt = 9999 )
'DSTEVX(N,I)', iinfo, n,
1038 IF( iinfo.LT.0 )
THEN
1041 result( 12 ) = ulpinv
1048 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1049 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1050 result( 12 ) = ( temp1+temp2 ) / max( unfl, ulp*temp3 )
1057 vl = wa1( il ) - max( half*
1058 $ ( wa1( il )-wa1( il-1 ) ), ten*ulp*temp3,
1061 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1062 $ ten*ulp*temp3, ten*rtunfl )
1065 vu = wa1( iu ) + max( half*
1066 $ ( wa1( iu+1 )-wa1( iu ) ), ten*ulp*temp3,
1069 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1070 $ ten*ulp*temp3, ten*rtunfl )
1078 d1( i ) = dble( a( i, i ) )
1081 d2( i ) = dble( a( i+1, i ) )
1084 CALL dstevx(
'V',
'V', n, d1, d2, vl, vu, il, iu, abstol,
1085 $ m2, wa2, z, ldu, work, iwork,
1086 $ iwork( 5*n+1 ), iinfo )
1087 IF( iinfo.NE.0 )
THEN
1088 WRITE( nounit, fmt = 9999 )
'DSTEVX(V,V)', iinfo, n,
1091 IF( iinfo.LT.0 )
THEN
1094 result( 13 ) = ulpinv
1095 result( 14 ) = ulpinv
1096 result( 15 ) = ulpinv
1101 IF( m2.EQ.0 .AND. n.GT.0 )
THEN
1102 result( 13 ) = ulpinv
1103 result( 14 ) = ulpinv
1104 result( 15 ) = ulpinv
1111 d3( i ) = dble( a( i, i ) )
1114 d4( i ) = dble( a( i+1, i ) )
1116 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1117 $ max( 1, m2 ), result( 13 ) )
1121 d4( i ) = dble( a( i+1, i ) )
1124 CALL dstevx(
'N',
'V', n, d3, d4, vl, vu, il, iu, abstol,
1125 $ m3, wa3, z, ldu, work, iwork,
1126 $ iwork( 5*n+1 ), iinfo )
1127 IF( iinfo.NE.0 )
THEN
1128 WRITE( nounit, fmt = 9999 )
'DSTEVX(N,V)', iinfo, n,
1131 IF( iinfo.LT.0 )
THEN
1134 result( 15 ) = ulpinv
1141 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1142 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1143 result( 15 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1149 d1( i ) = dble( a( i, i ) )
1152 d2( i ) = dble( a( i+1, i ) )
1155 CALL dstevd(
'V', n, d1, d2, z, ldu, work, lwedc, iwork,
1157 IF( iinfo.NE.0 )
THEN
1158 WRITE( nounit, fmt = 9999 )
'DSTEVD(V)', iinfo, n,
1161 IF( iinfo.LT.0 )
THEN
1164 result( 16 ) = ulpinv
1165 result( 17 ) = ulpinv
1166 result( 18 ) = ulpinv
1174 d3( i ) = dble( a( i, i ) )
1177 d4( i ) = dble( a( i+1, i ) )
1179 CALL dstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
1184 d4( i ) = dble( a( i+1, i ) )
1187 CALL dstevd(
'N', n, d3, d4, z, ldu, work, lwedc, iwork,
1189 IF( iinfo.NE.0 )
THEN
1190 WRITE( nounit, fmt = 9999 )
'DSTEVD(N)', iinfo, n,
1193 IF( iinfo.LT.0 )
THEN
1196 result( 18 ) = ulpinv
1206 temp1 = max( temp1, abs( eveigs( j ) ),
1208 temp2 = max( temp2, abs( eveigs( j )-d3( j ) ) )
1210 result( 18 ) = temp2 / max( unfl,
1211 $ ulp*max( temp1, temp2 ) )
1217 d1( i ) = dble( a( i, i ) )
1220 d2( i ) = dble( a( i+1, i ) )
1223 CALL dstevr(
'V',
'I', n, d1, d2, vl, vu, il, iu, abstol,
1224 $ m2, wa2, z, ldu, iwork, work, lwork,
1225 $ iwork(2*n+1), liwork-2*n, iinfo )
1226 IF( iinfo.NE.0 )
THEN
1227 WRITE( nounit, fmt = 9999 )
'DSTEVR(V,I)', iinfo, n,
1230 IF( iinfo.LT.0 )
THEN
1233 result( 19 ) = ulpinv
1234 result( 20 ) = ulpinv
1235 result( 21 ) = ulpinv
1243 d3( i ) = dble( a( i, i ) )
1246 d4( i ) = dble( a( i+1, i ) )
1248 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1249 $ max( 1, m2 ), result( 19 ) )
1254 d4( i ) = dble( a( i+1, i ) )
1257 CALL dstevr(
'N',
'I', n, d3, d4, vl, vu, il, iu, abstol,
1258 $ m3, wa3, z, ldu, iwork, work, lwork,
1259 $ iwork(2*n+1), liwork-2*n, iinfo )
1260 IF( iinfo.NE.0 )
THEN
1261 WRITE( nounit, fmt = 9999 )
'DSTEVR(N,I)', iinfo, n,
1264 IF( iinfo.LT.0 )
THEN
1267 result( 21 ) = ulpinv
1274 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1275 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1276 result( 21 ) = ( temp1+temp2 ) / max( unfl, ulp*temp3 )
1283 vl = wa1( il ) - max( half*
1284 $ ( wa1( il )-wa1( il-1 ) ), ten*ulp*temp3,
1287 vl = wa1( 1 ) - max( half*( wa1( n )-wa1( 1 ) ),
1288 $ ten*ulp*temp3, ten*rtunfl )
1291 vu = wa1( iu ) + max( half*
1292 $ ( wa1( iu+1 )-wa1( iu ) ), ten*ulp*temp3,
1295 vu = wa1( n ) + max( half*( wa1( n )-wa1( 1 ) ),
1296 $ ten*ulp*temp3, ten*rtunfl )
1304 d1( i ) = dble( a( i, i ) )
1307 d2( i ) = dble( a( i+1, i ) )
1310 CALL dstevr(
'V',
'V', n, d1, d2, vl, vu, il, iu, abstol,
1311 $ m2, wa2, z, ldu, iwork, work, lwork,
1312 $ iwork(2*n+1), liwork-2*n, iinfo )
1313 IF( iinfo.NE.0 )
THEN
1314 WRITE( nounit, fmt = 9999 )
'DSTEVR(V,V)', iinfo, n,
1317 IF( iinfo.LT.0 )
THEN
1320 result( 22 ) = ulpinv
1321 result( 23 ) = ulpinv
1322 result( 24 ) = ulpinv
1327 IF( m2.EQ.0 .AND. n.GT.0 )
THEN
1328 result( 22 ) = ulpinv
1329 result( 23 ) = ulpinv
1330 result( 24 ) = ulpinv
1337 d3( i ) = dble( a( i, i ) )
1340 d4( i ) = dble( a( i+1, i ) )
1342 CALL dstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1343 $ max( 1, m2 ), result( 22 ) )
1347 d4( i ) = dble( a( i+1, i ) )
1350 CALL dstevr(
'N',
'V', n, d3, d4, vl, vu, il, iu, abstol,
1351 $ m3, wa3, z, ldu, iwork, work, lwork,
1352 $ iwork(2*n+1), liwork-2*n, iinfo )
1353 IF( iinfo.NE.0 )
THEN
1354 WRITE( nounit, fmt = 9999 )
'DSTEVR(N,V)', iinfo, n,
1357 IF( iinfo.LT.0 )
THEN
1360 result( 24 ) = ulpinv
1367 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1368 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1369 result( 24 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1386 DO 1720 iuplo = 0, 1
1387 IF( iuplo.EQ.0 )
THEN
1395 CALL dlacpy(
' ', n, n, a, lda, v, ldu )
1399 CALL dsyev(
'V', uplo, n, a, ldu, d1, work, lwork,
1401 IF( iinfo.NE.0 )
THEN
1402 WRITE( nounit, fmt = 9999 )
'DSYEV(V,' // uplo //
')',
1403 $ iinfo, n, jtype, ioldsd
1405 IF( iinfo.LT.0 )
THEN
1408 result( ntest ) = ulpinv
1409 result( ntest+1 ) = ulpinv
1410 result( ntest+2 ) = ulpinv
1417 CALL dsyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1418 $ ldu, tau, work, result( ntest ) )
1420 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1424 CALL dsyev(
'N', uplo, n, a, ldu, d3, work, lwork,
1426 IF( iinfo.NE.0 )
THEN
1427 WRITE( nounit, fmt = 9999 )
'DSYEV(N,' // uplo //
')',
1428 $ iinfo, n, jtype, ioldsd
1430 IF( iinfo.LT.0 )
THEN
1433 result( ntest ) = ulpinv
1443 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1444 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1446 result( ntest ) = temp2 / max( unfl,
1447 $ ulp*max( temp1, temp2 ) )
1450 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1455 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
1457 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
1458 $ ten*ulp*temp3, ten*rtunfl )
1459 ELSE IF( n.GT.0 )
THEN
1460 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
1461 $ ten*ulp*temp3, ten*rtunfl )
1464 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
1465 $ ten*ulp*temp3, ten*rtunfl )
1466 ELSE IF( n.GT.0 )
THEN
1467 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
1468 $ ten*ulp*temp3, ten*rtunfl )
1477 CALL dsyevx(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1478 $ abstol, m, wa1, z, ldu, work, lwork, iwork,
1479 $ iwork( 5*n+1 ), iinfo )
1480 IF( iinfo.NE.0 )
THEN
1481 WRITE( nounit, fmt = 9999 )
'DSYEVX(V,A,' // uplo //
1482 $
')', iinfo, n, jtype, ioldsd
1484 IF( iinfo.LT.0 )
THEN
1487 result( ntest ) = ulpinv
1488 result( ntest+1 ) = ulpinv
1489 result( ntest+2 ) = ulpinv
1496 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1498 CALL dsyt21( 1, uplo, n, 0, a, ldu, d1, d2, z, ldu, v,
1499 $ ldu, tau, work, result( ntest ) )
1503 CALL dsyevx(
'N',
'A', uplo, n, a, ldu, vl, vu, il, iu,
1504 $ abstol, m2, wa2, z, ldu, work, lwork, iwork,
1505 $ iwork( 5*n+1 ), iinfo )
1506 IF( iinfo.NE.0 )
THEN
1507 WRITE( nounit, fmt = 9999 )
'DSYEVX(N,A,' // uplo //
1508 $
')', iinfo, n, jtype, ioldsd
1510 IF( iinfo.LT.0 )
THEN
1513 result( ntest ) = ulpinv
1523 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1524 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1526 result( ntest ) = temp2 / max( unfl,
1527 $ ulp*max( temp1, temp2 ) )
1532 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1534 CALL dsyevx(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1535 $ abstol, m2, wa2, z, ldu, work, lwork, iwork,
1536 $ iwork( 5*n+1 ), iinfo )
1537 IF( iinfo.NE.0 )
THEN
1538 WRITE( nounit, fmt = 9999 )
'DSYEVX(V,I,' // uplo //
1539 $
')', iinfo, n, jtype, ioldsd
1541 IF( iinfo.LT.0 )
THEN
1544 result( ntest ) = ulpinv
1545 result( ntest+1 ) = ulpinv
1546 result( ntest+2 ) = ulpinv
1553 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1555 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1556 $ v, ldu, tau, work, result( ntest ) )
1559 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1561 CALL dsyevx(
'N',
'I', uplo, n, a, ldu, vl, vu, il, iu,
1562 $ abstol, m3, wa3, z, ldu, work, lwork, iwork,
1563 $ iwork( 5*n+1 ), iinfo )
1564 IF( iinfo.NE.0 )
THEN
1565 WRITE( nounit, fmt = 9999 )
'DSYEVX(N,I,' // uplo //
1566 $
')', iinfo, n, jtype, ioldsd
1568 IF( iinfo.LT.0 )
THEN
1571 result( ntest ) = ulpinv
1578 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1579 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1580 result( ntest ) = ( temp1+temp2 ) /
1581 $ max( unfl, ulp*temp3 )
1585 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1587 CALL dsyevx(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
1588 $ abstol, m2, wa2, z, ldu, work, lwork, iwork,
1589 $ iwork( 5*n+1 ), iinfo )
1590 IF( iinfo.NE.0 )
THEN
1591 WRITE( nounit, fmt = 9999 )
'DSYEVX(V,V,' // uplo //
1592 $
')', iinfo, n, jtype, ioldsd
1594 IF( iinfo.LT.0 )
THEN
1597 result( ntest ) = ulpinv
1598 result( ntest+1 ) = ulpinv
1599 result( ntest+2 ) = ulpinv
1606 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1608 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1609 $ v, ldu, tau, work, result( ntest ) )
1612 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1614 CALL dsyevx(
'N',
'V', uplo, n, a, ldu, vl, vu, il, iu,
1615 $ abstol, m3, wa3, z, ldu, work, lwork, iwork,
1616 $ iwork( 5*n+1 ), iinfo )
1617 IF( iinfo.NE.0 )
THEN
1618 WRITE( nounit, fmt = 9999 )
'DSYEVX(N,V,' // uplo //
1619 $
')', iinfo, n, jtype, ioldsd
1621 IF( iinfo.LT.0 )
THEN
1624 result( ntest ) = ulpinv
1629 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1630 result( ntest ) = ulpinv
1636 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1637 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1639 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1643 result( ntest ) = ( temp1+temp2 ) /
1644 $ max( unfl, temp3*ulp )
1650 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
1655 IF( iuplo.EQ.1 )
THEN
1659 work( indx ) = a( i, j )
1667 work( indx ) = a( i, j )
1675 CALL dspev(
'V', uplo, n, work, d1, z, ldu, v, iinfo )
1676 IF( iinfo.NE.0 )
THEN
1677 WRITE( nounit, fmt = 9999 )
'DSPEV(V,' // uplo //
')',
1678 $ iinfo, n, jtype, ioldsd
1680 IF( iinfo.LT.0 )
THEN
1683 result( ntest ) = ulpinv
1684 result( ntest+1 ) = ulpinv
1685 result( ntest+2 ) = ulpinv
1692 CALL dsyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
1693 $ ldu, tau, work, result( ntest ) )
1695 IF( iuplo.EQ.1 )
THEN
1699 work( indx ) = a( i, j )
1707 work( indx ) = a( i, j )
1715 CALL dspev(
'N', uplo, n, work, d3, z, ldu, v, iinfo )
1716 IF( iinfo.NE.0 )
THEN
1717 WRITE( nounit, fmt = 9999 )
'DSPEV(N,' // uplo //
')',
1718 $ iinfo, n, jtype, ioldsd
1720 IF( iinfo.LT.0 )
THEN
1723 result( ntest ) = ulpinv
1733 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
1734 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
1736 result( ntest ) = temp2 / max( unfl,
1737 $ ulp*max( temp1, temp2 ) )
1743 IF( iuplo.EQ.1 )
THEN
1747 work( indx ) = a( i, j )
1755 work( indx ) = a( i, j )
1764 temp3 = max( abs( d1( 1 ) ), abs( d1( n ) ) )
1766 vl = d1( il ) - max( half*( d1( il )-d1( il-1 ) ),
1767 $ ten*ulp*temp3, ten*rtunfl )
1768 ELSE IF( n.GT.0 )
THEN
1769 vl = d1( 1 ) - max( half*( d1( n )-d1( 1 ) ),
1770 $ ten*ulp*temp3, ten*rtunfl )
1773 vu = d1( iu ) + max( half*( d1( iu+1 )-d1( iu ) ),
1774 $ ten*ulp*temp3, ten*rtunfl )
1775 ELSE IF( n.GT.0 )
THEN
1776 vu = d1( n ) + max( half*( d1( n )-d1( 1 ) ),
1777 $ ten*ulp*temp3, ten*rtunfl )
1786 CALL dspevx(
'V',
'A', uplo, n, work, vl, vu, il, iu,
1787 $ abstol, m, wa1, z, ldu, v, iwork,
1788 $ iwork( 5*n+1 ), iinfo )
1789 IF( iinfo.NE.0 )
THEN
1790 WRITE( nounit, fmt = 9999 )
'DSPEVX(V,A,' // uplo //
1791 $
')', iinfo, n, jtype, ioldsd
1793 IF( iinfo.LT.0 )
THEN
1796 result( ntest ) = ulpinv
1797 result( ntest+1 ) = ulpinv
1798 result( ntest+2 ) = ulpinv
1805 CALL dsyt21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
1806 $ ldu, tau, work, result( ntest ) )
1810 IF( iuplo.EQ.1 )
THEN
1814 work( indx ) = a( i, j )
1822 work( indx ) = a( i, j )
1829 CALL dspevx(
'N',
'A', uplo, n, work, vl, vu, il, iu,
1830 $ abstol, m2, wa2, z, ldu, v, iwork,
1831 $ iwork( 5*n+1 ), iinfo )
1832 IF( iinfo.NE.0 )
THEN
1833 WRITE( nounit, fmt = 9999 )
'DSPEVX(N,A,' // uplo //
1834 $
')', iinfo, n, jtype, ioldsd
1836 IF( iinfo.LT.0 )
THEN
1839 result( ntest ) = ulpinv
1849 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
1850 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
1852 result( ntest ) = temp2 / max( unfl,
1853 $ ulp*max( temp1, temp2 ) )
1856 IF( iuplo.EQ.1 )
THEN
1860 work( indx ) = a( i, j )
1868 work( indx ) = a( i, j )
1877 CALL dspevx(
'V',
'I', uplo, n, work, vl, vu, il, iu,
1878 $ abstol, m2, wa2, z, ldu, v, iwork,
1879 $ iwork( 5*n+1 ), iinfo )
1880 IF( iinfo.NE.0 )
THEN
1881 WRITE( nounit, fmt = 9999 )
'DSPEVX(V,I,' // uplo //
1882 $
')', iinfo, n, jtype, ioldsd
1884 IF( iinfo.LT.0 )
THEN
1887 result( ntest ) = ulpinv
1888 result( ntest+1 ) = ulpinv
1889 result( ntest+2 ) = ulpinv
1896 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1897 $ v, ldu, tau, work, result( ntest ) )
1901 IF( iuplo.EQ.1 )
THEN
1905 work( indx ) = a( i, j )
1913 work( indx ) = a( i, j )
1920 CALL dspevx(
'N',
'I', uplo, n, work, vl, vu, il, iu,
1921 $ abstol, m3, wa3, z, ldu, v, iwork,
1922 $ iwork( 5*n+1 ), iinfo )
1923 IF( iinfo.NE.0 )
THEN
1924 WRITE( nounit, fmt = 9999 )
'DSPEVX(N,I,' // uplo //
1925 $
')', iinfo, n, jtype, ioldsd
1927 IF( iinfo.LT.0 )
THEN
1930 result( ntest ) = ulpinv
1935 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
1936 result( ntest ) = ulpinv
1942 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1943 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1945 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
1949 result( ntest ) = ( temp1+temp2 ) /
1950 $ max( unfl, temp3*ulp )
1953 IF( iuplo.EQ.1 )
THEN
1957 work( indx ) = a( i, j )
1965 work( indx ) = a( i, j )
1974 CALL dspevx(
'V',
'V', uplo, n, work, vl, vu, il, iu,
1975 $ abstol, m2, wa2, z, ldu, v, iwork,
1976 $ iwork( 5*n+1 ), iinfo )
1977 IF( iinfo.NE.0 )
THEN
1978 WRITE( nounit, fmt = 9999 )
'DSPEVX(V,V,' // uplo //
1979 $
')', iinfo, n, jtype, ioldsd
1981 IF( iinfo.LT.0 )
THEN
1984 result( ntest ) = ulpinv
1985 result( ntest+1 ) = ulpinv
1986 result( ntest+2 ) = ulpinv
1993 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1994 $ v, ldu, tau, work, result( ntest ) )
1998 IF( iuplo.EQ.1 )
THEN
2002 work( indx ) = a( i, j )
2010 work( indx ) = a( i, j )
2017 CALL dspevx(
'N',
'V', uplo, n, work, vl, vu, il, iu,
2018 $ abstol, m3, wa3, z, ldu, v, iwork,
2019 $ iwork( 5*n+1 ), iinfo )
2020 IF( iinfo.NE.0 )
THEN
2021 WRITE( nounit, fmt = 9999 )
'DSPEVX(N,V,' // uplo //
2022 $
')', iinfo, n, jtype, ioldsd
2024 IF( iinfo.LT.0 )
THEN
2027 result( ntest ) = ulpinv
2032 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2033 result( ntest ) = ulpinv
2039 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2040 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2042 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2046 result( ntest ) = ( temp1+temp2 ) /
2047 $ max( unfl, temp3*ulp )
2053 IF( jtype.LE.7 )
THEN
2055 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
2064 IF( iuplo.EQ.1 )
THEN
2066 DO 1090 i = max( 1, j-kd ), j
2067 v( kd+1+i-j, j ) = a( i, j )
2072 DO 1110 i = j, min( n, j+kd )
2073 v( 1+i-j, j ) = a( i, j )
2080 CALL dsbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
2082 IF( iinfo.NE.0 )
THEN
2083 WRITE( nounit, fmt = 9999 )
'DSBEV(V,' // uplo //
')',
2084 $ iinfo, n, jtype, ioldsd
2086 IF( iinfo.LT.0 )
THEN
2089 result( ntest ) = ulpinv
2090 result( ntest+1 ) = ulpinv
2091 result( ntest+2 ) = ulpinv
2098 CALL dsyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2099 $ ldu, tau, work, result( ntest ) )
2101 IF( iuplo.EQ.1 )
THEN
2103 DO 1130 i = max( 1, j-kd ), j
2104 v( kd+1+i-j, j ) = a( i, j )
2109 DO 1150 i = j, min( n, j+kd )
2110 v( 1+i-j, j ) = a( i, j )
2117 CALL dsbev(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
2119 IF( iinfo.NE.0 )
THEN
2120 WRITE( nounit, fmt = 9999 )
'DSBEV(N,' // uplo //
')',
2121 $ iinfo, n, jtype, ioldsd
2123 IF( iinfo.LT.0 )
THEN
2126 result( ntest ) = ulpinv
2136 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2137 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2139 result( ntest ) = temp2 / max( unfl,
2140 $ ulp*max( temp1, temp2 ) )
2146 IF( iuplo.EQ.1 )
THEN
2148 DO 1190 i = max( 1, j-kd ), j
2149 v( kd+1+i-j, j ) = a( i, j )
2154 DO 1210 i = j, min( n, j+kd )
2155 v( 1+i-j, j ) = a( i, j )
2162 CALL dsbevx(
'V',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
2163 $ vu, il, iu, abstol, m, wa2, z, ldu, work,
2164 $ iwork, iwork( 5*n+1 ), iinfo )
2165 IF( iinfo.NE.0 )
THEN
2166 WRITE( nounit, fmt = 9999 )
'DSBEVX(V,A,' // uplo //
2167 $
')', iinfo, n, jtype, ioldsd
2169 IF( iinfo.LT.0 )
THEN
2172 result( ntest ) = ulpinv
2173 result( ntest+1 ) = ulpinv
2174 result( ntest+2 ) = ulpinv
2181 CALL dsyt21( 1, uplo, n, 0, a, ldu, wa2, d2, z, ldu, v,
2182 $ ldu, tau, work, result( ntest ) )
2186 IF( iuplo.EQ.1 )
THEN
2188 DO 1230 i = max( 1, j-kd ), j
2189 v( kd+1+i-j, j ) = a( i, j )
2194 DO 1250 i = j, min( n, j+kd )
2195 v( 1+i-j, j ) = a( i, j )
2201 CALL dsbevx(
'N',
'A', uplo, n, kd, v, ldu, u, ldu, vl,
2202 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2203 $ iwork, iwork( 5*n+1 ), iinfo )
2204 IF( iinfo.NE.0 )
THEN
2205 WRITE( nounit, fmt = 9999 )
'DSBEVX(N,A,' // uplo //
2206 $
')', iinfo, n, jtype, ioldsd
2208 IF( iinfo.LT.0 )
THEN
2211 result( ntest ) = ulpinv
2221 temp1 = max( temp1, abs( wa2( j ) ), abs( wa3( j ) ) )
2222 temp2 = max( temp2, abs( wa2( j )-wa3( j ) ) )
2224 result( ntest ) = temp2 / max( unfl,
2225 $ ulp*max( temp1, temp2 ) )
2229 IF( iuplo.EQ.1 )
THEN
2231 DO 1290 i = max( 1, j-kd ), j
2232 v( kd+1+i-j, j ) = a( i, j )
2237 DO 1310 i = j, min( n, j+kd )
2238 v( 1+i-j, j ) = a( i, j )
2244 CALL dsbevx(
'V',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
2245 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2246 $ iwork, iwork( 5*n+1 ), iinfo )
2247 IF( iinfo.NE.0 )
THEN
2248 WRITE( nounit, fmt = 9999 )
'DSBEVX(V,I,' // uplo //
2249 $
')', iinfo, n, jtype, ioldsd
2251 IF( iinfo.LT.0 )
THEN
2254 result( ntest ) = ulpinv
2255 result( ntest+1 ) = ulpinv
2256 result( ntest+2 ) = ulpinv
2263 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2264 $ v, ldu, tau, work, result( ntest ) )
2268 IF( iuplo.EQ.1 )
THEN
2270 DO 1330 i = max( 1, j-kd ), j
2271 v( kd+1+i-j, j ) = a( i, j )
2276 DO 1350 i = j, min( n, j+kd )
2277 v( 1+i-j, j ) = a( i, j )
2283 CALL dsbevx(
'N',
'I', uplo, n, kd, v, ldu, u, ldu, vl,
2284 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2285 $ iwork, iwork( 5*n+1 ), iinfo )
2286 IF( iinfo.NE.0 )
THEN
2287 WRITE( nounit, fmt = 9999 )
'DSBEVX(N,I,' // uplo //
2288 $
')', iinfo, n, jtype, ioldsd
2290 IF( iinfo.LT.0 )
THEN
2293 result( ntest ) = ulpinv
2300 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2301 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2303 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2307 result( ntest ) = ( temp1+temp2 ) /
2308 $ max( unfl, temp3*ulp )
2312 IF( iuplo.EQ.1 )
THEN
2314 DO 1380 i = max( 1, j-kd ), j
2315 v( kd+1+i-j, j ) = a( i, j )
2320 DO 1400 i = j, min( n, j+kd )
2321 v( 1+i-j, j ) = a( i, j )
2327 CALL dsbevx(
'V',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
2328 $ vu, il, iu, abstol, m2, wa2, z, ldu, work,
2329 $ iwork, iwork( 5*n+1 ), iinfo )
2330 IF( iinfo.NE.0 )
THEN
2331 WRITE( nounit, fmt = 9999 )
'DSBEVX(V,V,' // uplo //
2332 $
')', iinfo, n, jtype, ioldsd
2334 IF( iinfo.LT.0 )
THEN
2337 result( ntest ) = ulpinv
2338 result( ntest+1 ) = ulpinv
2339 result( ntest+2 ) = ulpinv
2346 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2347 $ v, ldu, tau, work, result( ntest ) )
2351 IF( iuplo.EQ.1 )
THEN
2353 DO 1420 i = max( 1, j-kd ), j
2354 v( kd+1+i-j, j ) = a( i, j )
2359 DO 1440 i = j, min( n, j+kd )
2360 v( 1+i-j, j ) = a( i, j )
2366 CALL dsbevx(
'N',
'V', uplo, n, kd, v, ldu, u, ldu, vl,
2367 $ vu, il, iu, abstol, m3, wa3, z, ldu, work,
2368 $ iwork, iwork( 5*n+1 ), iinfo )
2369 IF( iinfo.NE.0 )
THEN
2370 WRITE( nounit, fmt = 9999 )
'DSBEVX(N,V,' // uplo //
2371 $
')', iinfo, n, jtype, ioldsd
2373 IF( iinfo.LT.0 )
THEN
2376 result( ntest ) = ulpinv
2381 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2382 result( ntest ) = ulpinv
2388 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2389 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2391 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2395 result( ntest ) = ( temp1+temp2 ) /
2396 $ max( unfl, temp3*ulp )
2402 CALL dlacpy(
' ', n, n, a, lda, v, ldu )
2406 CALL dsyevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
2407 $ iwork, liwedc, iinfo )
2408 IF( iinfo.NE.0 )
THEN
2409 WRITE( nounit, fmt = 9999 )
'DSYEVD(V,' // uplo //
2410 $
')', iinfo, n, jtype, ioldsd
2412 IF( iinfo.LT.0 )
THEN
2415 result( ntest ) = ulpinv
2416 result( ntest+1 ) = ulpinv
2417 result( ntest+2 ) = ulpinv
2424 CALL dsyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
2425 $ ldu, tau, work, result( ntest ) )
2427 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2431 CALL dsyevd(
'N', uplo, n, a, ldu, d3, work, lwedc,
2432 $ iwork, liwedc, iinfo )
2433 IF( iinfo.NE.0 )
THEN
2434 WRITE( nounit, fmt = 9999 )
'DSYEVD(N,' // uplo //
2435 $
')', iinfo, n, jtype, ioldsd
2437 IF( iinfo.LT.0 )
THEN
2440 result( ntest ) = ulpinv
2450 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2451 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2453 result( ntest ) = temp2 / max( unfl,
2454 $ ulp*max( temp1, temp2 ) )
2460 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2465 IF( iuplo.EQ.1 )
THEN
2469 work( indx ) = a( i, j )
2477 work( indx ) = a( i, j )
2485 CALL dspevd(
'V', uplo, n, work, d1, z, ldu,
2486 $ work( indx ), lwedc-indx+1, iwork, liwedc,
2488 IF( iinfo.NE.0 )
THEN
2489 WRITE( nounit, fmt = 9999 )
'DSPEVD(V,' // uplo //
2490 $
')', iinfo, n, jtype, ioldsd
2492 IF( iinfo.LT.0 )
THEN
2495 result( ntest ) = ulpinv
2496 result( ntest+1 ) = ulpinv
2497 result( ntest+2 ) = ulpinv
2504 CALL dsyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2505 $ ldu, tau, work, result( ntest ) )
2507 IF( iuplo.EQ.1 )
THEN
2512 work( indx ) = a( i, j )
2520 work( indx ) = a( i, j )
2528 CALL dspevd(
'N', uplo, n, work, d3, z, ldu,
2529 $ work( indx ), lwedc-indx+1, iwork, liwedc,
2531 IF( iinfo.NE.0 )
THEN
2532 WRITE( nounit, fmt = 9999 )
'DSPEVD(N,' // uplo //
2533 $
')', iinfo, n, jtype, ioldsd
2535 IF( iinfo.LT.0 )
THEN
2538 result( ntest ) = ulpinv
2548 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2549 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2551 result( ntest ) = temp2 / max( unfl,
2552 $ ulp*max( temp1, temp2 ) )
2557 IF( jtype.LE.7 )
THEN
2559 ELSE IF( jtype.GE.8 .AND. jtype.LE.15 )
THEN
2568 IF( iuplo.EQ.1 )
THEN
2570 DO 1590 i = max( 1, j-kd ), j
2571 v( kd+1+i-j, j ) = a( i, j )
2576 DO 1610 i = j, min( n, j+kd )
2577 v( 1+i-j, j ) = a( i, j )
2584 CALL dsbevd(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
2585 $ lwedc, iwork, liwedc, iinfo )
2586 IF( iinfo.NE.0 )
THEN
2587 WRITE( nounit, fmt = 9999 )
'DSBEVD(V,' // uplo //
2588 $
')', iinfo, n, jtype, ioldsd
2590 IF( iinfo.LT.0 )
THEN
2593 result( ntest ) = ulpinv
2594 result( ntest+1 ) = ulpinv
2595 result( ntest+2 ) = ulpinv
2602 CALL dsyt21( 1, uplo, n, 0, a, lda, d1, d2, z, ldu, v,
2603 $ ldu, tau, work, result( ntest ) )
2605 IF( iuplo.EQ.1 )
THEN
2607 DO 1630 i = max( 1, j-kd ), j
2608 v( kd+1+i-j, j ) = a( i, j )
2613 DO 1650 i = j, min( n, j+kd )
2614 v( 1+i-j, j ) = a( i, j )
2621 CALL dsbevd(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
2622 $ lwedc, iwork, liwedc, iinfo )
2623 IF( iinfo.NE.0 )
THEN
2624 WRITE( nounit, fmt = 9999 )
'DSBEVD(N,' // uplo //
2625 $
')', iinfo, n, jtype, ioldsd
2627 IF( iinfo.LT.0 )
THEN
2630 result( ntest ) = ulpinv
2640 temp1 = max( temp1, abs( d1( j ) ), abs( d3( j ) ) )
2641 temp2 = max( temp2, abs( d1( j )-d3( j ) ) )
2643 result( ntest ) = temp2 / max( unfl,
2644 $ ulp*max( temp1, temp2 ) )
2649 CALL dlacpy(
' ', n, n, a, lda, v, ldu )
2652 CALL dsyevr(
'V',
'A', uplo, n, a, ldu, vl, vu, il, iu,
2653 $ abstol, m, wa1, z, ldu, iwork, work, lwork,
2654 $ iwork(2*n+1), liwork-2*n, iinfo )
2655 IF( iinfo.NE.0 )
THEN
2656 WRITE( nounit, fmt = 9999 )
'DSYEVR(V,A,' // uplo //
2657 $
')', iinfo, n, jtype, ioldsd
2659 IF( iinfo.LT.0 )
THEN
2662 result( ntest ) = ulpinv
2663 result( ntest+1 ) = ulpinv
2664 result( ntest+2 ) = ulpinv
2671 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2673 CALL dsyt21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
2674 $ ldu, tau, work, result( ntest ) )
2678 CALL dsyevr(
'N',
'A', uplo, n, a, ldu, vl, vu, il, iu,
2679 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2680 $ iwork(2*n+1), liwork-2*n, iinfo )
2681 IF( iinfo.NE.0 )
THEN
2682 WRITE( nounit, fmt = 9999 )
'DSYEVR(N,A,' // uplo //
2683 $
')', iinfo, n, jtype, ioldsd
2685 IF( iinfo.LT.0 )
THEN
2688 result( ntest ) = ulpinv
2698 temp1 = max( temp1, abs( wa1( j ) ), abs( wa2( j ) ) )
2699 temp2 = max( temp2, abs( wa1( j )-wa2( j ) ) )
2701 result( ntest ) = temp2 / max( unfl,
2702 $ ulp*max( temp1, temp2 ) )
2707 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2709 CALL dsyevr(
'V',
'I', uplo, n, a, ldu, vl, vu, il, iu,
2710 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2711 $ iwork(2*n+1), liwork-2*n, iinfo )
2712 IF( iinfo.NE.0 )
THEN
2713 WRITE( nounit, fmt = 9999 )
'DSYEVR(V,I,' // uplo //
2714 $
')', iinfo, n, jtype, ioldsd
2716 IF( iinfo.LT.0 )
THEN
2719 result( ntest ) = ulpinv
2720 result( ntest+1 ) = ulpinv
2721 result( ntest+2 ) = ulpinv
2728 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2730 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2731 $ v, ldu, tau, work, result( ntest ) )
2734 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2736 CALL dsyevr(
'N',
'I', uplo, n, a, ldu, vl, vu, il, iu,
2737 $ abstol, m3, wa3, z, ldu, iwork, work, lwork,
2738 $ iwork(2*n+1), liwork-2*n, iinfo )
2739 IF( iinfo.NE.0 )
THEN
2740 WRITE( nounit, fmt = 9999 )
'DSYEVR(N,I,' // uplo //
2741 $
')', iinfo, n, jtype, ioldsd
2743 IF( iinfo.LT.0 )
THEN
2746 result( ntest ) = ulpinv
2753 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2754 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2755 result( ntest ) = ( temp1+temp2 ) /
2756 $ max( unfl, ulp*temp3 )
2760 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2762 CALL dsyevr(
'V',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2763 $ abstol, m2, wa2, z, ldu, iwork, work, lwork,
2764 $ iwork(2*n+1), liwork-2*n, iinfo )
2765 IF( iinfo.NE.0 )
THEN
2766 WRITE( nounit, fmt = 9999 )
'DSYEVR(V,V,' // uplo //
2767 $
')', iinfo, n, jtype, ioldsd
2769 IF( iinfo.LT.0 )
THEN
2772 result( ntest ) = ulpinv
2773 result( ntest+1 ) = ulpinv
2774 result( ntest+2 ) = ulpinv
2781 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2783 CALL dsyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2784 $ v, ldu, tau, work, result( ntest ) )
2787 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2789 CALL dsyevr(
'N',
'V', uplo, n, a, ldu, vl, vu, il, iu,
2790 $ abstol, m3, wa3, z, ldu, iwork, work, lwork,
2791 $ iwork(2*n+1), liwork-2*n, iinfo )
2792 IF( iinfo.NE.0 )
THEN
2793 WRITE( nounit, fmt = 9999 )
'DSYEVR(N,V,' // uplo //
2794 $
')', iinfo, n, jtype, ioldsd
2796 IF( iinfo.LT.0 )
THEN
2799 result( ntest ) = ulpinv
2804 IF( m3.EQ.0 .AND. n.GT.0 )
THEN
2805 result( ntest ) = ulpinv
2811 temp1 = dsxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2812 temp2 = dsxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2814 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
2818 result( ntest ) = ( temp1+temp2 ) /
2819 $ max( unfl, temp3*ulp )
2821 CALL dlacpy(
' ', n, n, v, ldu, a, lda )
2827 ntestt = ntestt + ntest
2829 CALL dlafts(
'DST', n, n, jtype, ntest, result, ioldsd,
2830 $ thresh, nounit, nerrs )
2837 CALL alasvm(
'DST', nounit, nerrs, ntestt, 0 )
2839 9999
FORMAT(
' DDRVST: ', a,
' returned INFO=', i6,
'.', / 9x,
'N=',
2840 $ i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine xerbla(srname, info)
subroutine ddrvst(nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, d1, d2, d3, d4, eveigs, wa1, wa2, wa3, u, ldu, v, tau, z, work, lwork, iwork, liwork, result, info)
DDRVST
subroutine dlafts(type, m, n, imat, ntests, result, iseed, thresh, iounit, ie)
DLAFTS
subroutine dlatmr(m, n, dist, iseed, sym, d, mode, cond, dmax, rsign, grade, dl, model, condl, dr, moder, condr, pivtng, ipivot, kl, ku, sparse, anorm, pack, a, lda, iwork, info)
DLATMR
subroutine dlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
DLATMS
subroutine dstt21(n, kband, ad, ae, sd, se, u, ldu, work, result)
DSTT21
subroutine dstt22(n, m, kband, ad, ae, sd, se, u, ldu, work, ldwork, result)
DSTT22
subroutine dsyt21(itype, uplo, n, kband, a, lda, d, e, u, ldu, v, ldv, tau, work, result)
DSYT21
subroutine dsyt22(itype, uplo, n, m, kband, a, lda, d, e, u, ldu, v, ldv, tau, work, result)
DSYT22
subroutine dsbev(jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, info)
DSBEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
subroutine dsbevd(jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, iwork, liwork, info)
DSBEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dsbevx(jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
DSBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dsyev(jobz, uplo, n, a, lda, w, work, lwork, info)
DSYEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine dsyevd(jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork, info)
DSYEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine dsyevr(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
DSYEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine dsyevx(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info)
DSYEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine dspev(jobz, uplo, n, ap, w, z, ldz, work, info)
DSPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
subroutine dspevd(jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork, liwork, info)
DSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dspevx(jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
DSPEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine dstev(jobz, n, d, e, z, ldz, work, info)
DSTEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
subroutine dstevd(jobz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
DSTEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dstevr(jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
DSTEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dstevx(jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
DSTEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...