Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions lapack-netlib/SRC/dstevr.c
Original file line number Diff line number Diff line change
Expand Up @@ -566,7 +566,7 @@ f"> */
extern integer ilaenv_(integer *, char *, char *, integer *, integer *,
integer *, integer *, ftnlen, ftnlen);
extern /* Subroutine */ void xerbla_(char *, integer *, ftnlen);
doublereal bignum;
doublereal abstll, bignum;
extern doublereal dlanst_(char *, integer *, doublereal *, doublereal *);
integer indisp;
extern /* Subroutine */ void dstein_(integer *, doublereal *, doublereal *,
Expand Down Expand Up @@ -713,6 +713,7 @@ f"> */
/* Scale matrix to allowable range, if necessary. */

iscale = 0;
abstll = *abstol;
if (valeig) {
vll = *vl;
vuu = *vu;
Expand All @@ -734,6 +735,17 @@ f"> */
dscal_(n, &sigma, &d__[1], &c__1);
i__1 = *n - 1;
dscal_(&i__1, &sigma, &e[1], &c__1);

/* Scale a positive ABSTOL with the matrix. Keep the product */
/* positive, as DSTEBZ takes ABSTOL <= 0 as a request for its */
/* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the */
/* product cannot overflow. */

if (*abstol > 0.) {
/* Computing MAX */
d__1 = f2cmin(*abstol,tnrm) * sigma;
abstll = f2cmax(d__1,safmin);
}
if (valeig) {
vll = *vl * sigma;
vuu = *vu * sigma;
Expand Down Expand Up @@ -799,7 +811,7 @@ f"> */
} else {
*(unsigned char *)order = 'E';
}
dstebz_(range, order, n, &vll, &vuu, il, iu, abstol, &d__[1], &e[1], m, &
dstebz_(range, order, n, &vll, &vuu, il, iu, &abstll, &d__[1], &e[1], m, &
nsplit, &w[1], &iwork[indibl], &iwork[indisp], &work[1], &iwork[
indiwo], info);

Expand Down
14 changes: 12 additions & 2 deletions lapack-netlib/SRC/dstevr.f
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,8 @@ SUBROUTINE DSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
INTEGER I, IEEEOK, INDIBL, INDIFL, INDISP,
$ INDIWO, ISCALE, ITMP1, J, JJ, LIWMIN, LWMIN,
$ NSPLIT
DOUBLE PRECISION BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
DOUBLE PRECISION ABSTLL, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
$ SMLNUM,
$ TMP1, TNRM, VLL, VUU
* ..
* .. External Functions ..
Expand Down Expand Up @@ -440,6 +441,7 @@ SUBROUTINE DSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
* Scale matrix to allowable range, if necessary.
*
ISCALE = 0
ABSTLL = ABSTOL
IF( VALEIG ) THEN
VLL = VL
VUU = VU
Expand All @@ -459,6 +461,14 @@ SUBROUTINE DSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
IF( ISCALE.EQ.1 ) THEN
CALL DSCAL( N, SIGMA, D, 1 )
CALL DSCAL( N-1, SIGMA, E( 1 ), 1 )
*
* Scale a positive ABSTOL with the matrix. Keep the product
* positive, as DSTEBZ takes ABSTOL <= 0 as a request for its
* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the
* product cannot overflow.
*
IF( ABSTOL.GT.ZERO )
$ ABSTLL = MAX( MIN( ABSTOL, TNRM )*SIGMA, SAFMIN )
IF( VALEIG ) THEN
VLL = VL*SIGMA
VUU = VU*SIGMA
Expand Down Expand Up @@ -525,7 +535,7 @@ SUBROUTINE DSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
ORDER = 'E'
END IF

CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E,
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL, D, E,
$ M,
$ NSPLIT, W, IWORK( INDIBL ), IWORK( INDISP ), WORK,
$ IWORK( INDIWO ), INFO )
Expand Down
16 changes: 14 additions & 2 deletions lapack-netlib/SRC/dstevx.c
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,7 @@ f"> */
logical alleig, indeig, valeig;
doublereal safmin;
extern /* Subroutine */ void xerbla_(char *, integer *, ftnlen);
doublereal bignum;
doublereal abstll, bignum;
extern doublereal dlanst_(char *, integer *, doublereal *, doublereal *);
integer indisp;
extern /* Subroutine */ void dstein_(integer *, doublereal *, doublereal *,
Expand Down Expand Up @@ -600,6 +600,7 @@ f"> */
/* Scale matrix to allowable range, if necessary. */

iscale = 0;
abstll = *abstol;
if (valeig) {
vll = *vl;
vuu = *vu;
Expand All @@ -623,6 +624,17 @@ f"> */
dscal_(n, &sigma, &d__[1], &c__1);
i__1 = *n - 1;
dscal_(&i__1, &sigma, &e[1], &c__1);

/* Scale a positive ABSTOL with the matrix. Keep the product */
/* positive, as DSTEBZ takes ABSTOL <= 0 as a request for its */
/* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the */
/* product cannot overflow. */

if (*abstol > 0.) {
/* Computing MAX */
d__1 = f2cmin(*abstol,tnrm) * sigma;
abstll = f2cmax(d__1,safmin);
}
if (valeig) {
vll = *vl * sigma;
vuu = *vu * sigma;
Expand Down Expand Up @@ -674,7 +686,7 @@ f"> */
indwrk = 1;
indisp = *n + 1;
indiwo = indisp + *n;
dstebz_(range, order, n, &vll, &vuu, il, iu, abstol, &d__[1], &e[1], m, &
dstebz_(range, order, n, &vll, &vuu, il, iu, &abstll, &d__[1], &e[1], m, &
nsplit, &w[1], &iwork[1], &iwork[indisp], &work[indwrk], &iwork[
indiwo], &iinfo);
if (iinfo != 0) {
Expand Down
14 changes: 12 additions & 2 deletions lapack-netlib/SRC/dstevx.f
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,8 @@ SUBROUTINE DSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
CHARACTER ORDER
INTEGER I, IINFO, INDISP, INDIWO, INDWRK,
$ ISCALE, ITMP1, J, JJ, NSPLIT
DOUBLE PRECISION BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
DOUBLE PRECISION ABSTLL, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
$ SMLNUM,
$ TMP1, TNRM, VLL, VUU
* ..
* .. External Functions ..
Expand Down Expand Up @@ -340,6 +341,7 @@ SUBROUTINE DSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
* Scale matrix to allowable range, if necessary.
*
ISCALE = 0
ABSTLL = ABSTOL
IF( VALEIG ) THEN
VLL = VL
VUU = VU
Expand All @@ -361,6 +363,14 @@ SUBROUTINE DSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
IF( ISCALE.EQ.1 ) THEN
CALL DSCAL( N, SIGMA, D, 1 )
CALL DSCAL( N-1, SIGMA, E( 1 ), 1 )
*
* Scale a positive ABSTOL with the matrix. Keep the product
* positive, as DSTEBZ takes ABSTOL <= 0 as a request for its
* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the
* product cannot overflow.
*
IF( ABSTOL.GT.ZERO )
$ ABSTLL = MAX( MIN( ABSTOL, TNRM )*SIGMA, SAFMIN )
IF( VALEIG ) THEN
VLL = VL*SIGMA
VUU = VU*SIGMA
Expand Down Expand Up @@ -409,7 +419,7 @@ SUBROUTINE DSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
INDWRK = 1
INDISP = 1 + N
INDIWO = INDISP + N
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E,
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL, D, E,
$ M,
$ NSPLIT, W, IWORK( 1 ), IWORK( INDISP ),
$ WORK( INDWRK ), IWORK( INDIWO ), IINFO )
Expand Down
16 changes: 14 additions & 2 deletions lapack-netlib/SRC/sstevr.c
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ f"> */
extern integer ilaenv_(integer *, char *, char *, integer *, integer *,
integer *, integer *, ftnlen, ftnlen);
extern /* Subroutine */ void xerbla_(char *, integer *, ftnlen);
real bignum;
real abstll, bignum;
integer indisp, indiwo, liwmin;
logical tryrac;
extern real slanst_(char *, integer *, real *, real *);
Expand Down Expand Up @@ -703,6 +703,7 @@ f"> */
/* Scale matrix to allowable range, if necessary. */

iscale = 0;
abstll = *abstol;
if (valeig) {
vll = *vl;
vuu = *vu;
Expand All @@ -724,6 +725,17 @@ f"> */
sscal_(n, &sigma, &d__[1], &c__1);
i__1 = *n - 1;
sscal_(&i__1, &sigma, &e[1], &c__1);

/* Scale a positive ABSTOL with the matrix. Keep the product */
/* positive, as SSTEBZ takes ABSTOL <= 0 as a request for its */
/* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the */
/* product cannot overflow. */

if (*abstol > 0.f) {
/* Computing MAX */
r__1 = f2cmin(*abstol,tnrm) * sigma;
abstll = f2cmax(r__1,safmin);
}
if (valeig) {
vll = *vl * sigma;
vuu = *vu * sigma;
Expand Down Expand Up @@ -789,7 +801,7 @@ f"> */
} else {
*(unsigned char *)order = 'E';
}
sstebz_(range, order, n, &vll, &vuu, il, iu, abstol, &d__[1], &e[1], m, &
sstebz_(range, order, n, &vll, &vuu, il, iu, &abstll, &d__[1], &e[1], m, &
nsplit, &w[1], &iwork[indibl], &iwork[indisp], &work[1], &iwork[
indiwo], info);

Expand Down
14 changes: 12 additions & 2 deletions lapack-netlib/SRC/sstevr.f
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,8 @@ SUBROUTINE SSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
CHARACTER ORDER
INTEGER I, IEEEOK, INDIBL, INDIFL, INDISP,
$ INDIWO, ISCALE, J, JJ, LIWMIN, LWMIN, NSPLIT
REAL BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
REAL ABSTLL, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
$ SMLNUM,
$ TMP1, TNRM, VLL, VUU
* ..
* .. External Functions ..
Expand Down Expand Up @@ -442,6 +443,7 @@ SUBROUTINE SSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
* Scale matrix to allowable range, if necessary.
*
ISCALE = 0
ABSTLL = ABSTOL
IF( VALEIG ) THEN
VLL = VL
VUU = VU
Expand All @@ -461,6 +463,14 @@ SUBROUTINE SSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
IF( ISCALE.EQ.1 ) THEN
CALL SSCAL( N, SIGMA, D, 1 )
CALL SSCAL( N-1, SIGMA, E( 1 ), 1 )
*
* Scale a positive ABSTOL with the matrix. Keep the product
* positive, as SSTEBZ takes ABSTOL <= 0 as a request for its
* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the
* product cannot overflow.
*
IF( ABSTOL.GT.ZERO )
$ ABSTLL = MAX( MIN( ABSTOL, TNRM )*SIGMA, SAFMIN )
IF( VALEIG ) THEN
VLL = VL*SIGMA
VUU = VU*SIGMA
Expand Down Expand Up @@ -527,7 +537,7 @@ SUBROUTINE SSTEVR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
ORDER = 'E'
END IF

CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E,
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL, D, E,
$ M,
$ NSPLIT, W, IWORK( INDIBL ), IWORK( INDISP ), WORK,
$ IWORK( INDIWO ), INFO )
Expand Down
16 changes: 14 additions & 2 deletions lapack-netlib/SRC/sstevx.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ f"> */
extern real slamch_(char *);
real safmin;
extern /* Subroutine */ void xerbla_(char *, integer *, ftnlen);
real bignum;
real abstll, bignum;
integer indisp, indiwo, indwrk;
extern real slanst_(char *, integer *, real *, real *);
extern /* Subroutine */ void sstein_(integer *, real *, real *, integer *,
Expand Down Expand Up @@ -590,6 +590,7 @@ f"> */
/* Scale matrix to allowable range, if necessary. */

iscale = 0;
abstll = *abstol;
if (valeig) {
vll = *vl;
vuu = *vu;
Expand All @@ -613,6 +614,17 @@ f"> */
sscal_(n, &sigma, &d__[1], &c__1);
i__1 = *n - 1;
sscal_(&i__1, &sigma, &e[1], &c__1);

/* Scale a positive ABSTOL with the matrix. Keep the product */
/* positive, as SSTEBZ takes ABSTOL <= 0 as a request for its */
/* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the */
/* product cannot overflow. */

if (*abstol > 0.f) {
/* Computing MAX */
r__1 = f2cmin(*abstol,tnrm) * sigma;
abstll = f2cmax(r__1,safmin);
}
if (valeig) {
vll = *vl * sigma;
vuu = *vu * sigma;
Expand Down Expand Up @@ -664,7 +676,7 @@ f"> */
indwrk = 1;
indisp = *n + 1;
indiwo = indisp + *n;
sstebz_(range, order, n, &vll, &vuu, il, iu, abstol, &d__[1], &e[1], m, &
sstebz_(range, order, n, &vll, &vuu, il, iu, &abstll, &d__[1], &e[1], m, &
nsplit, &w[1], &iwork[1], &iwork[indisp], &work[indwrk], &iwork[
indiwo], &iinfo);
if (iinfo != 0) {
Expand Down
14 changes: 12 additions & 2 deletions lapack-netlib/SRC/sstevx.f
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,8 @@ SUBROUTINE SSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
CHARACTER ORDER
INTEGER I, IINFO, INDISP, INDIWO, INDWRK,
$ ISCALE, ITMP1, J, JJ, NSPLIT
REAL BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
REAL ABSTLL, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
$ SMLNUM,
$ TMP1, TNRM, VLL, VUU
* ..
* .. External Functions ..
Expand Down Expand Up @@ -340,6 +341,7 @@ SUBROUTINE SSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
* Scale matrix to allowable range, if necessary.
*
ISCALE = 0
ABSTLL = ABSTOL
IF ( VALEIG ) THEN
VLL = VL
VUU = VU
Expand All @@ -361,6 +363,14 @@ SUBROUTINE SSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
IF( ISCALE.EQ.1 ) THEN
CALL SSCAL( N, SIGMA, D, 1 )
CALL SSCAL( N-1, SIGMA, E( 1 ), 1 )
*
* Scale a positive ABSTOL with the matrix. Keep the product
* positive, as SSTEBZ takes ABSTOL <= 0 as a request for its
* default tolerance EPS*|T|, and cap ABSTOL at |T| so that the
* product cannot overflow.
*
IF( ABSTOL.GT.ZERO )
$ ABSTLL = MAX( MIN( ABSTOL, TNRM )*SIGMA, SAFMIN )
IF( VALEIG ) THEN
VLL = VL*SIGMA
VUU = VU*SIGMA
Expand Down Expand Up @@ -409,7 +419,7 @@ SUBROUTINE SSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
INDWRK = 1
INDISP = 1 + N
INDIWO = INDISP + N
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E,
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL, D, E,
$ M,
$ NSPLIT, W, IWORK( 1 ), IWORK( INDISP ),
$ WORK( INDWRK ), IWORK( INDIWO ), IINFO )
Expand Down
2 changes: 1 addition & 1 deletion lapack-netlib/TESTING/EIG/dchkee.F
Original file line number Diff line number Diff line change
Expand Up @@ -1942,7 +1942,7 @@ PROGRAM DCHKEE
$ A( 1, 3 ), D( 1, 12 ), A( 1, 4 ), WORK,
$ LWORK, IWORK, LIWORK, RESULT, INFO )
ELSE
CALL DDRVST( NN, NVAL, 18, DOTYPE, ISEED, THRESH, NOUT,
CALL DDRVST( NN, NVAL, 19, DOTYPE, ISEED, THRESH, NOUT,
$ A( 1, 1 ), NMAX, D( 1, 3 ), D( 1, 4 ),
$ D( 1, 5 ), D( 1, 6 ), D( 1, 8 ), D( 1, 9 ),
$ D( 1, 10 ), D( 1, 11 ), A( 1, 2 ), NMAX,
Expand Down
Loading
Loading