summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjulie <julielangou@users.noreply.github.com>2012-05-22 00:55:21 +0000
committerjulie <julielangou@users.noreply.github.com>2012-05-22 00:55:21 +0000
commitfb89702b460bd02d29d453ecff8202f7180fc7da (patch)
tree6afa901a7a905ccaaedec5ad1df0d990af0c5e5a
parent45c1a9c1157fa71679f2d3cb111553a37ed848e1 (diff)
downloadlapack-fb89702b460bd02d29d453ecff8202f7180fc7da.tar.gz
lapack-fb89702b460bd02d29d453ecff8202f7180fc7da.tar.bz2
lapack-fb89702b460bd02d29d453ecff8202f7180fc7da.zip
Correct a problem reported by Keita Teranishi from CRAY on May 18th 2012
Confirmed and Corrected by Julie on May 21st 2012 ==================================== EMAIL: We would like to report a bug in {S,D}SYEVR and {C,Z}HEEVR routines. This bug causes writing two different data in the same address in IWORK, potentially producing wrong answers. The bug description is provided in the bottom of the email. Please let us know, if you have any questions. Thank you, Line 543 in {S,D}SYEVR: Line 717 on {C,Z}HEEVR: === Code Starts here== INDISP = INDIBL + N * IWORK(INDIFL:INDIFL+N-1) stores the indices of eigenvectors * that corresponding to eigenvectors that fail to converge in * DSTEIN. This information is discarded; if any fail, the driver * returns INFO > 0. INDIFL = INDISP + N * INDIWO is the offset of the remaining integer workspace. INDIWO = INDISP + N <- -- It is suspicious. =====End of the Code========= I think this should be INDIWO = INDIFL+N. Otherwise, subsequent {S,D}STEIN call takes the same address for IWORK(INDIWO) and INWROK(INDIFL). CALL DSTEIN( N, WORK( INDD ), WORK( INDE ), M, W, $ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ, $ WORK( INDWK ), IWORK( INDIWO ), IWORK( INDIFL ), $ INFO ) ====================================
-rw-r--r--SRC/cheevr.f2
-rw-r--r--SRC/dsyevr.f2
-rw-r--r--SRC/ssyevr.f2
-rw-r--r--SRC/zheevr.f2
4 files changed, 4 insertions, 4 deletions
diff --git a/SRC/cheevr.f b/SRC/cheevr.f
index 8456838f..3db71bb0 100644
--- a/SRC/cheevr.f
+++ b/SRC/cheevr.f
@@ -579,7 +579,7 @@
* returns INFO > 0.
INDIFL = INDISP + N
* INDIWO is the offset of the remaining integer workspace.
- INDIWO = INDISP + N
+ INDIWO = INDIFL + N
*
* Call CHETRD to reduce Hermitian matrix to tridiagonal form.
diff --git a/SRC/dsyevr.f b/SRC/dsyevr.f
index 2b930d00..b29d963a 100644
--- a/SRC/dsyevr.f
+++ b/SRC/dsyevr.f
@@ -539,7 +539,7 @@
* returns INFO > 0.
INDIFL = INDISP + N
* INDIWO is the offset of the remaining integer workspace.
- INDIWO = INDISP + N
+ INDIWO = INDIFL + N
*
* Call DSYTRD to reduce symmetric matrix to tridiagonal form.
diff --git a/SRC/ssyevr.f b/SRC/ssyevr.f
index 7549b22a..3e63d06d 100644
--- a/SRC/ssyevr.f
+++ b/SRC/ssyevr.f
@@ -543,7 +543,7 @@
* returns INFO > 0.
INDIFL = INDISP + N
* INDIWO is the offset of the remaining integer workspace.
- INDIWO = INDISP + N
+ INDIWO = INDIFL + N
*
* Call SSYTRD to reduce symmetric matrix to tridiagonal form.
diff --git a/SRC/zheevr.f b/SRC/zheevr.f
index 1a427163..71714839 100644
--- a/SRC/zheevr.f
+++ b/SRC/zheevr.f
@@ -579,7 +579,7 @@
* returns INFO > 0.
INDIFL = INDISP + N
* INDIWO is the offset of the remaining integer workspace.
- INDIWO = INDISP + N
+ INDIWO = INDIFL + N
*
* Call ZHETRD to reduce Hermitian matrix to tridiagonal form.