449 SUBROUTINE sdrvst( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
450 $ NOUNIT, A, LDA, D1, D2, D3, D4, EVEIGS, WA1,
451 $ WA2, WA3, U, LDU, V, TAU, Z, WORK, LWORK,
452 $ IWORK, LIWORK, RESULT, INFO )
459 INTEGER INFO, LDA, LDU, LIWORK, LWORK, NOUNIT, NSIZES,
465 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
466 REAL A( LDA, * ), D1( * ), D2( * ), D3( * ),
467 $ d4( * ), eveigs( * ), result( * ), tau( * ),
468 $ u( ldu, * ), v( ldu, * ), wa1( * ), wa2( * ),
469 $ wa3( * ), work( * ), z( ldu, * )
475 REAL ZERO, ONE, TWO, TEN
476 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
479 parameter( half = 0.5e0 )
481 parameter( maxtyp = 18 )
486 INTEGER I, IDIAG, IHBW, IINFO, IL, IMODE, INDX, IROW,
487 $ itemp, itype, iu, iuplo, j, j1, j2, jcol,
488 $ jsize, jtype, kd, lgn, liwedc, lwedc, m, m2,
489 $ m3, mtypes, n, nerrs, nmats, nmax, ntest,
491 REAL ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
492 $ RTUNFL, TEMP1, TEMP2, TEMP3, ULP, ULPINV, UNFL,
496 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
497 $ ISEED3( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
501 REAL SLAMCH, SLARND, SSXT1
502 EXTERNAL SLAMCH, SLARND, SSXT1
515 COMMON / srnamc / srnamt
518 INTRINSIC abs, int, log, max, min, real, 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(
'SDRVST', -info )
570 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
575 unfl = slamch(
'Safe minimum' )
576 ovfl = slamch(
'Overflow' )
577 ulp = slamch(
'Epsilon' )*slamch(
'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( real( n ) ) / log( two ) )
601 lwedc = 1 + 4*n + 2*n*lgn + 4*n**2
609 aninv = one / real( 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 slaset(
'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 slatms( 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 slatms( 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 slatmr( 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 slatmr( 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 )*slarnd( 1, iseed3 ) )
727 CALL slatms( n, n,
'S', iseed,
'S', work, imode, cond,
728 $ anorm, ihbw, ihbw,
'Z', u, ldu, work( n+1 ),
733 CALL slaset(
'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 + int( ( n-1 )*slarnd( 1, iseed2 ) )
762 iu = 1 + int( ( n-1 )*slarnd( 1, iseed2 ) )
772 IF( jtype.LE.7 )
THEN
775 d1( i ) = real( a( i, i ) )
778 d2( i ) = real( a( i+1, i ) )
781 CALL sstev(
'V', n, d1, d2, z, ldu, work, iinfo )
782 IF( iinfo.NE.0 )
THEN
783 WRITE( nounit, fmt = 9999 )
'SSTEV(V)', iinfo, n,
786 IF( iinfo.LT.0 )
THEN
799 d3( i ) = real( a( i, i ) )
802 d4( i ) = real( a( i+1, i ) )
804 CALL sstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
809 d4( i ) = real( a( i+1, i ) )
812 CALL sstev(
'N', n, d3, d4, z, ldu, work, iinfo )
813 IF( iinfo.NE.0 )
THEN
814 WRITE( nounit, fmt = 9999 )
'SSTEV(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 ) = real( a( i, i ) )
844 d2( i ) = real( a( i+1, i ) )
847 CALL sstevx(
'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 )
'SSTEVX(V,A)', iinfo, n,
854 IF( iinfo.LT.0 )
THEN
864 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
872 d3( i ) = real( a( i, i ) )
875 d4( i ) = real( a( i+1, i ) )
877 CALL sstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
882 d4( i ) = real( a( i+1, i ) )
885 CALL sstevx(
'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 )
'SSTEVX(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 ) = real( a( i, i ) )
919 d2( i ) = real( a( i+1, i ) )
922 CALL sstevr(
'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 )
'SSTEVR(V,A)', iinfo, n,
929 IF( iinfo.LT.0 )
THEN
938 temp3 = max( abs( wa1( 1 ) ), abs( wa1( n ) ) )
946 d3( i ) = real( a( i, i ) )
949 d4( i ) = real( a( i+1, i ) )
951 CALL sstt21( n, 0, d3, d4, wa1, d2, z, ldu, work,
956 d4( i ) = real( a( i+1, i ) )
959 CALL sstevr(
'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 )
'SSTEVR(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 ) = real( a( i, i ) )
994 d2( i ) = real( a( i+1, i ) )
997 CALL sstevx(
'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 )
'SSTEVX(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 ) = real( a( i, i ) )
1020 d4( i ) = real( a( i+1, i ) )
1022 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1023 $ max( 1, m2 ), result( 10 ) )
1028 d4( i ) = real( a( i+1, i ) )
1031 CALL sstevx(
'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 )
'SSTEVX(N,I)', iinfo, n,
1038 IF( iinfo.LT.0 )
THEN
1041 result( 12 ) = ulpinv
1048 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1049 temp2 = ssxt1( 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 ) = real( a( i, i ) )
1081 d2( i ) = real( a( i+1, i ) )
1084 CALL sstevx(
'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 )
'SSTEVX(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 ) = real( a( i, i ) )
1114 d4( i ) = real( a( i+1, i ) )
1116 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1117 $ max( 1, m2 ), result( 13 ) )
1121 d4( i ) = real( a( i+1, i ) )
1124 CALL sstevx(
'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 )
'SSTEVX(N,V)', iinfo, n,
1131 IF( iinfo.LT.0 )
THEN
1134 result( 15 ) = ulpinv
1141 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1142 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1143 result( 15 ) = ( temp1+temp2 ) / max( unfl, temp3*ulp )
1149 d1( i ) = real( a( i, i ) )
1152 d2( i ) = real( a( i+1, i ) )
1155 CALL sstevd(
'V', n, d1, d2, z, ldu, work, lwedc, iwork,
1157 IF( iinfo.NE.0 )
THEN
1158 WRITE( nounit, fmt = 9999 )
'SSTEVD(V)', iinfo, n,
1161 IF( iinfo.LT.0 )
THEN
1164 result( 16 ) = ulpinv
1165 result( 17 ) = ulpinv
1166 result( 18 ) = ulpinv
1174 d3( i ) = real( a( i, i ) )
1177 d4( i ) = real( a( i+1, i ) )
1179 CALL sstt21( n, 0, d3, d4, d1, d2, z, ldu, work,
1184 d4( i ) = real( a( i+1, i ) )
1187 CALL sstevd(
'N', n, d3, d4, z, ldu, work, lwedc, iwork,
1189 IF( iinfo.NE.0 )
THEN
1190 WRITE( nounit, fmt = 9999 )
'SSTEVD(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 ) = real( a( i, i ) )
1220 d2( i ) = real( a( i+1, i ) )
1223 CALL sstevr(
'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 )
'SSTEVR(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 ) = real( a( i, i ) )
1246 d4( i ) = real( a( i+1, i ) )
1248 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1249 $ max( 1, m2 ), result( 19 ) )
1254 d4( i ) = real( a( i+1, i ) )
1257 CALL sstevr(
'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 )
'SSTEVR(N,I)', iinfo, n,
1264 IF( iinfo.LT.0 )
THEN
1267 result( 21 ) = ulpinv
1274 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1275 temp2 = ssxt1( 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 ) = real( a( i, i ) )
1307 d2( i ) = real( a( i+1, i ) )
1310 CALL sstevr(
'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 )
'SSTEVR(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 ) = real( a( i, i ) )
1340 d4( i ) = real( a( i+1, i ) )
1342 CALL sstt22( n, m2, 0, d3, d4, wa2, d2, z, ldu, work,
1343 $ max( 1, m2 ), result( 22 ) )
1347 d4( i ) = real( a( i+1, i ) )
1350 CALL sstevr(
'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 )
'SSTEVR(N,V)', iinfo, n,
1357 IF( iinfo.LT.0 )
THEN
1360 result( 24 ) = ulpinv
1367 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1368 temp2 = ssxt1( 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 slacpy(
' ', n, n, a, lda, v, ldu )
1399 CALL ssyev(
'V', uplo, n, a, ldu, d1, work, lwork,
1401 IF( iinfo.NE.0 )
THEN
1402 WRITE( nounit, fmt = 9999 )
'SSYEV(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 ssyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
1418 $ ldu, tau, work, result( ntest ) )
1420 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1424 CALL ssyev(
'N', uplo, n, a, ldu, d3, work, lwork,
1426 IF( iinfo.NE.0 )
THEN
1427 WRITE( nounit, fmt = 9999 )
'SSYEV(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 slacpy(
' ', 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 ssyevx(
'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 )
'SSYEVX(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 slacpy(
' ', n, n, v, ldu, a, lda )
1498 CALL ssyt21( 1, uplo, n, 0, a, ldu, d1, d2, z, ldu, v,
1499 $ ldu, tau, work, result( ntest ) )
1503 CALL ssyevx(
'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 )
'SSYEVX(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 slacpy(
' ', n, n, v, ldu, a, lda )
1534 CALL ssyevx(
'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 )
'SSYEVX(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 slacpy(
' ', n, n, v, ldu, a, lda )
1555 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1556 $ v, ldu, tau, work, result( ntest ) )
1559 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1561 CALL ssyevx(
'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 )
'SSYEVX(N,I,' // uplo //
1566 $
')', iinfo, n, jtype, ioldsd
1568 IF( iinfo.LT.0 )
THEN
1571 result( ntest ) = ulpinv
1578 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1579 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
1580 result( ntest ) = ( temp1+temp2 ) /
1581 $ max( unfl, ulp*temp3 )
1585 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1587 CALL ssyevx(
'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 )
'SSYEVX(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 slacpy(
' ', n, n, v, ldu, a, lda )
1608 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
1609 $ v, ldu, tau, work, result( ntest ) )
1612 CALL slacpy(
' ', n, n, v, ldu, a, lda )
1614 CALL ssyevx(
'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 )
'SSYEVX(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 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1637 temp2 = ssxt1( 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 slacpy(
' ', 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 sspev(
'V', uplo, n, work, d1, z, ldu, v, iinfo )
1676 IF( iinfo.NE.0 )
THEN
1677 WRITE( nounit, fmt = 9999 )
'SSPEV(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 ssyt21( 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 sspev(
'N', uplo, n, work, d3, z, ldu, v, iinfo )
1716 IF( iinfo.NE.0 )
THEN
1717 WRITE( nounit, fmt = 9999 )
'SSPEV(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 sspevx(
'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 )
'SSPEVX(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 ssyt21( 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 sspevx(
'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 )
'SSPEVX(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 sspevx(
'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 )
'SSPEVX(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 ssyt22( 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 sspevx(
'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 )
'SSPEVX(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 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
1943 temp2 = ssxt1( 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 sspevx(
'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 )
'SSPEVX(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 ssyt22( 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 sspevx(
'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 )
'SSPEVX(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 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2040 temp2 = ssxt1( 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 ssbev(
'V', uplo, n, kd, v, ldu, d1, z, ldu, work,
2082 IF( iinfo.NE.0 )
THEN
2083 WRITE( nounit, fmt = 9999 )
'SSBEV(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 ssyt21( 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 ssbev(
'N', uplo, n, kd, v, ldu, d3, z, ldu, work,
2119 IF( iinfo.NE.0 )
THEN
2120 WRITE( nounit, fmt = 9999 )
'SSBEV(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 ssbevx(
'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 )
'SSBEVX(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 ssyt21( 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 ssbevx(
'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 )
'SSBEVX(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 ssbevx(
'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 )
'SSBEVX(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 ssyt22( 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 ssbevx(
'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 )
'SSBEVX(N,I,' // uplo //
2288 $
')', iinfo, n, jtype, ioldsd
2290 IF( iinfo.LT.0 )
THEN
2293 result( ntest ) = ulpinv
2300 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2301 temp2 = ssxt1( 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 ssbevx(
'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 )
'SSBEVX(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 ssyt22( 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 ssbevx(
'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 )
'SSBEVX(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 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2389 temp2 = ssxt1( 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 slacpy(
' ', n, n, a, lda, v, ldu )
2406 CALL ssyevd(
'V', uplo, n, a, ldu, d1, work, lwedc,
2407 $ iwork, liwedc, iinfo )
2408 IF( iinfo.NE.0 )
THEN
2409 WRITE( nounit, fmt = 9999 )
'SSYEVD(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 ssyt21( 1, uplo, n, 0, v, ldu, d1, d2, a, ldu, z,
2425 $ ldu, tau, work, result( ntest ) )
2427 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2431 CALL ssyevd(
'N', uplo, n, a, ldu, d3, work, lwedc,
2432 $ iwork, liwedc, iinfo )
2433 IF( iinfo.NE.0 )
THEN
2434 WRITE( nounit, fmt = 9999 )
'SSYEVD(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 slacpy(
' ', 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 sspevd(
'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 )
'SSPEVD(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 ssyt21( 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 sspevd(
'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 )
'SSPEVD(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 ssbevd(
'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 )
'SSBEVD(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 ssyt21( 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 ssbevd(
'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 )
'SSBEVD(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 slacpy(
' ', n, n, a, lda, v, ldu )
2652 CALL ssyevr(
'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 )
'SSYEVR(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 slacpy(
' ', n, n, v, ldu, a, lda )
2673 CALL ssyt21( 1, uplo, n, 0, a, ldu, wa1, d2, z, ldu, v,
2674 $ ldu, tau, work, result( ntest ) )
2678 CALL ssyevr(
'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 )
'SSYEVR(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 slacpy(
' ', n, n, v, ldu, a, lda )
2709 CALL ssyevr(
'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 )
'SSYEVR(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 slacpy(
' ', n, n, v, ldu, a, lda )
2730 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2731 $ v, ldu, tau, work, result( ntest ) )
2734 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2736 CALL ssyevr(
'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 )
'SSYEVR(N,I,' // uplo //
2741 $
')', iinfo, n, jtype, ioldsd
2743 IF( iinfo.LT.0 )
THEN
2746 result( ntest ) = ulpinv
2753 temp1 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2754 temp2 = ssxt1( 1, wa3, m3, wa2, m2, abstol, ulp, unfl )
2755 result( ntest ) = ( temp1+temp2 ) /
2756 $ max( unfl, ulp*temp3 )
2760 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2762 CALL ssyevr(
'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 )
'SSYEVR(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 slacpy(
' ', n, n, v, ldu, a, lda )
2783 CALL ssyt22( 1, uplo, n, m2, 0, a, ldu, wa2, d2, z, ldu,
2784 $ v, ldu, tau, work, result( ntest ) )
2787 CALL slacpy(
' ', n, n, v, ldu, a, lda )
2789 CALL ssyevr(
'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 )
'SSYEVR(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 = ssxt1( 1, wa2, m2, wa3, m3, abstol, ulp, unfl )
2812 temp2 = ssxt1( 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 slacpy(
' ', n, n, v, ldu, a, lda )
2827 ntestt = ntestt + ntest
2829 CALL slafts(
'SST', n, n, jtype, ntest, result, ioldsd,
2830 $ thresh, nounit, nerrs )
2837 CALL alasvm(
'SST', nounit, nerrs, ntestt, 0 )
2839 9999
FORMAT(
' SDRVST: ', 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 ssbev(jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, info)
SSBEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
subroutine ssbevd(jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, iwork, liwork, info)
SSBEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine ssbevx(jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
SSBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine ssyev(jobz, uplo, n, a, lda, w, work, lwork, info)
SSYEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine ssyevd(jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork, info)
SSYEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine ssyevr(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
SSYEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine ssyevx(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info)
SSYEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine sspev(jobz, uplo, n, ap, w, z, ldz, work, info)
SSPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
subroutine sspevd(jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork, liwork, info)
SSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sspevx(jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
SSPEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine sstev(jobz, n, d, e, z, ldz, work, info)
SSTEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices
subroutine sstevd(jobz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
SSTEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sstevr(jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
SSTEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sstevx(jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info)
SSTEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sdrvst(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)
SDRVST
subroutine slafts(type, m, n, imat, ntests, result, iseed, thresh, iounit, ie)
SLAFTS
subroutine slatmr(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)
SLATMR
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine sstt21(n, kband, ad, ae, sd, se, u, ldu, work, result)
SSTT21
subroutine sstt22(n, m, kband, ad, ae, sd, se, u, ldu, work, ldwork, result)
SSTT22
subroutine ssyt21(itype, uplo, n, kband, a, lda, d, e, u, ldu, v, ldv, tau, work, result)
SSYT21
subroutine ssyt22(itype, uplo, n, m, kband, a, lda, d, e, u, ldu, v, ldv, tau, work, result)
SSYT22