Correct a problem reported by Keita Teranishi from CRAY on May 18th 2012
authorjulie <julielangou@users.noreply.github.com>
Tue, 22 May 2012 00:55:21 +0000 (00:55 +0000)
committerjulie <julielangou@users.noreply.github.com>
Tue, 22 May 2012 00:55:21 +0000 (00:55 +0000)
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 )

====================================

SRC/cheevr.f
SRC/dsyevr.f
SRC/ssyevr.f
SRC/zheevr.f

index 8456838..3db71bb 100644 (file)
 *     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.
index 2b930d0..b29d963 100644 (file)
 *     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.
index 7549b22..3e63d06 100644 (file)
 *     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.
index 1a42716..7171483 100644 (file)
 *     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.