Dear LAPACK:
The introductory comments to DLASQ2 state that if INFO = 2, the algorithm
failed because the current block of Z was not diagonalized after 30*N
iterations (in inner while loop). The inner while loop is only executed if
NBIG > 0. NBIG = 30 * (N0 -I0 + 1) so the inner while loop is only executed if
I0 <= N0. In order for the inner while loop not to fail I0 must become greater
than N0 causing a GO TO 150 to be executed. Inside the inner while loop the
call to DLASQ3 only uses I0 and N0 as input arguments leaving them unchanged.
In the IF (PP .EQ. 0 .AND. N0 - I0 .GE. 3) clause, SPLT can only be set to I0
- 1 or I4/4. I4 has a maximum value of 4*(N0-3), so the statement I0 = SPLT +1
either leaves I0 unchanged or increases it up to a maximum value of N0 - 2. In
summary, the inner while loop is entered by values of I0 <= N0, but the
execution of the inner while loop can only increase I0 up to a maximum of N0 -
2, so the statement IF (I0 .GT. N0) GO TO 150 needed to prevent an inner loop
failure will never be executed. Therefore, the inner while loop always fails.
Sincerely,
William Gandler
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://lists.eecs.utk.edu/mailman/private/lapack/attachments/20091016/02c4a029/attachment.html
|