LAPACK Archives

[Lapack] Bugs in DLASD8 and DLASD6

Dear Justin,
Just to let you know that the bug you reported (bug0121) has been corrected in 
rev 1505 on Oct 1st 2014.

The bug fix will be released in the coming LAPACK release. At the moment, it is 
available in our SVN repository.

The bug has been traced to [d/s]laed6, which computes the root closest to the 
origin of a secular equation and is used in the D&C tridiagonal eigensolver 
(DSTEDC) and D&C least squares solver (DGELSD). We have interacted with 
Ren-Cang Li (the original developer of [d/s]laed6) about possible fixes, and I 
am attaching a new version of [d/s]laed6. This version has been tested with our 
'torture cases' (more on this below) in:

- single and double precision
- Intel Xeon Westmere with gnu (gfortran) and intel (ifort) compilers
- AMD MagnyCours with pgi, cray, intel and gnu compilers

The bug was related to a too stringent tolerance convergence criterion, line 
390 in laed6. The fix is

390          IF( ( ABS( F ).LE.FOUR*EPS*ERRETM ) .OR.
391      $      ( (UBD-LBD).LE.FOUR*EPS*ABS(TAU) )  )

to replace

390          IF( ABS( F ).LE.EPS*ERRETM )

Thank you again for reporting the issue!
On Sep 23, 2014, at 9:29 AM, julie <julie@Domain.Removed> wrote:

Dear Justin
Thank you for the bug report, and the detailed explanation
We recorded the bug on our Errata as bug 121 -
We are going to take a look very shortly.
On Sep 22, 2014, at 10:22 AM, Justin (Weiguang Si) <forswg@Domain.Removed 
<mailto:forswg@Domain.Removed>> wrote:

We got a fatal error message "On entry to DLASD4 paramater number -1 had an 
illegal value" when using IpOpt. We think this is due to a bug in Lapack.

The bug is in DLASD8 (see line 276 to line 284 of DLASD8 
which calls DLASD4 and then handles the INFO =1 error return incorrectly. 
The error indicates that DLASD4 failed to converge and should have been 
reported as an INFO = 1 return to DLASD8's caller. It should not have been 
passed to XERBLA. We also see similar bugs in DLASD6 (see line 414 to line 
422 of DLASD6 

DLASDA shows what we think is the correct behavior (see line 486 to line 507 
Here it is just passing the info value from DLASD6 back as the info value 
from DLASDA which is reasonable (setting info = 1 before returning might be 
cleaner). This method allows the higher-level subroutine that called DLASDA 
to recover from low-level convergence failure. We think that's the fix we 
need done in DLASD8 and DLASD6.

Thanks a lot for your attention.

Justin (Weiguang Si)

Postdoctoral Researcher
Neuromuscular Biomechanics Lab
Stanford University

forswg@Domain.Removed <mailto:forswg@Domain.Removed>
Lapack mailing list
Lapack@Domain.Removed <mailto:Lapack@Domain.Removed>

-------------- next part --------------
An HTML attachment was scrubbed...

<Prev in Thread] Current Thread [Next in Thread>

For additional information you may use the LAPACK/ScaLAPACK Forum.
Or one of the mailing lists, or