[Lapack] Bug in LAPACK 3.2 dlarfb.f and likes

From: Chuvelev, Michael
Date: Wed, 22 Jul 2009 07:48:37 +0100

Julie,
I'm not certain that my fix is appropriate though - I just needed to get M for
LASTV in dlarfb.f, not M-1. It requires more consideration.
Thanks.
Best regards,
Michael.
________________________________
From: julie langou [mailto:julie@Domain.Removed]
Sent: Wednesday, July 22, 2009 12:51 AM
To: Chuvelev, Michael
Cc: lapack@Domain.Removed; Henry, Greg; Kobotov, Alexander V
Subject: Re: [Lapack] Bug in LAPACK 3.2 dlarfb.f and likes
Hello Michael,
Thanks a lot for the bug report. We have reproduced all your sayings: your test
code flags an error for NX from 0, 1, 2, up to N more or less, your fix to
DLARFB fixes the problem. We observe this for lapack-3.2.1 and for our lapack
in svn.
We need a little a bit of time to get through the code and understand the fix.
One thing that bothers us is that DCKKQR did not catch the problem. (Note: we
do text for various NB and NX in our test suite through setting the value with
XLAENV and then using a fake ILAENV).
So, all this to say, that we will come back to your shortly on this one.
Best wishes,
Julie and Julien
On Jul 21, 2009, at 9:28 AM, Chuvelev, Michael wrote:
Hello,
I've found a bug in dlarfb.f recently, it can be revealed by dorgql blocked
algorithm, for instance. I suspect the ordinal tests don't catch it because too
high crosspoint is set in ilaenv.f NX=128. To catch the bug:
1) set less crosspoint in line 462 of ilaenv.f, for instance, NX=0
2) compile the testcase attached,
3) use the input data attached
You will have non-orthogonal vectors on the output.
dlarfb.f has been changed to reduce the number of reflectors needed to be
applied, but it turns out sometimes we miss the last reflector to be applied.
The newly introduced function iladlr detects last non-zero row, but in dlarfb
we don't pay attention to the fact that the elementary reflectors
v v v
v v v
v v v
1 v v
1 v
1
could be kept along with a zero diagonal:
v v v
v v v
v v v
0 v v
0 v
0
which in fact reduce the number of reflectors to be applied, that is we miss
the last one. I find the following logic appropriate in this case: substituting
line 260 in dlarfb.f

LASTV = MAX( K, ILADLR( M, K, V, LDV ) )

by the line
< LASTV = MAX( K, ILADLC( M, K, V, LDV ) )+M-K
The original LASTV initialization is wrong.
Best regards,
Michael.
--------------------------------------------------------------------
Closed Joint Stock Company Intel A/O
Registered legal address: Krylatsky Hills Business Park,
17 Krylatskaya Str., Bldg 4, Moscow 121614,
Russian Federation
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
<test_dorgql.f><q.dat><tau.dat>_______________________________________________
Lapack mailing list
Lapack@Domain.Removed<mailto:Lapack@Domain.Removed>
http://lists.eecs.utk.edu/mailman/listinfo/lapack
**********************************************
Julie Langou; Research Associate in Computer Science
Innovative Computing Laboratory;
University of Tennessee from Denver, Colorado ;-)
julie@Domain.Removed<mailto:julie@Domain.Removed>; http://www.cs.utk.edu/~julie/
--------------------------------------------------------------------
Closed Joint Stock Company Intel A/O
Registered legal address: Krylatsky Hills Business Park,
17 Krylatskaya Str., Bldg 4, Moscow 121614,
Russian Federation
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://lists.eecs.utk.edu/mailman/private/lapack/attachments/20090722/245af17f/attachment-0001.html