Hello,
let me notify you about a bug in ?ormrz.f code in LAPACK 3.1 package
lapack-3.1.0.gz available from www.netlib.org.
For instance, in dormrz.f at line 173 there's a following if-then construct:
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
LWKOPT = 1
*
* Determine the block size. NB may be at most NBMAX, where
* NBMAX is used to define the local array T.
*
NB = MIN( NBMAX, ILAENV( 1, 'DORMRQ', SIDE // TRANS, M, N,
$ K, -1 ) )
LWKOPT = NW*NB
END IF
In general case - when M, N are not 0, NB and LWKOPT are not initialized. It's
definitely ELSE statement missed here. The following code looks much better and
works properly:
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
LWKOPT = 1
ELSE
*
* Determine the block size. NB may be at most NBMAX, where
* NBMAX is used to define the local array T.
*
NB = MIN( NBMAX, ILAENV( 1, 'DORMRQ', SIDE // TRANS, M, N,
$ K, -1 ) )
LWKOPT = NW*NB
END IF
The same issue is seems to be with ?unmrz.f also, the difference is that the
further code computes NB once more, so only LWKOPT isn't determined correctly
in general case.
Best regards,
Michael.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://lists.cs.utk.edu/private/lapack/attachments/20070214/50d78562/attachment.html
|