Hi,

I have a question regarding INFO description in DBDSQR. Now it is following:

*> INFO is INTEGER

*> = 0: successful exit

*> < 0: If INFO = -i, the i-th argument had an illegal value

*> > 0:

*> if NCVT = NRU = NCC = 0,

*> = 1, a split was marked by a positive value in E

*> = 2, current block of Z not diagonalized after 30*N

*> iterations (in inner while loop)

*> = 3, termination criterion of outer while loop not met

*> (program created more than N unreduced blocks)

*> else NCVT = NRU = NCC = 0,

*> the algorithm did not converge; D and E contain the

*> elements of a bidiagonal matrix which is orthogonally

*> similar to the input matrix B; if INFO = i, i

*> elements of E have not converged to zero.

Looks strange a bit. Digging deeper one can find: for NCVT = NRU = NCC = 0 DBDSQR calls DLASQ1 with following description of info:

*> INFO is INTEGER

*> = 0: successful exit

*> < 0: if INFO = -i, the i-th argument had an illegal value

*> > 0: the algorithm failed

*> = 1, a split was marked by a positive value in E

*> = 2, current block of Z not diagonalized after 100*N

*> iterations (in inner while loop) On exit D and E

*> represent a matrix with the same singular values

*> which the calling subroutine could use to finish the

*> computation, or even feed back into DLASQ1

*> = 3, termination criterion of outer while loop not met

*> (program created more than N unreduced blocks)

If INFO from DLASQ1 is equal to 2 DBDSQR tries to finish with another algorithm. In this case and in the case when at least one of NCVT, NRU, NCC .NE.0 we have INFO = i, i elements of E have not converged to zero. For instance for NCVT = NRU = NCC = 0 INFO from DBDSQR can be equal to 1 for two cases:

1. In DLASQ1 algorithm failed (a split was marked by a positive value in E).

2. In DBDSQR DLASQ1 returned 2 and then the algorithm did not converge (1 element of E have not converged to zero).

And it looks like description of INFO should looks like following for the current version of code:

*> INFO is INTEGER

*> = 0: successful exit

*> < 0: If INFO = -i, the i-th argument had an illegal value

*> > 0:

*> if NCVT = NRU = NCC = 0,

*> = 1, a split was marked by a positive value in E, or

*> the algorithm did not converge; D and E contain the

*> elements of a bidiagonal matrix which is orthogonally

*> similar to the input matrix B; 1 element of E have not

*> converged to zero.

*> = 2, current block of Z not diagonalized after 30*N

*> iterations (in inner while loop)

*> = 3, termination criterion of outer while loop not met

*> (program created more than N unreduced blocks) or

*> the algorithm did not converge; D and E contain the

*> elements of a bidiagonal matrix which is orthogonally

*> similar to the input matrix B; 3 elements of E have not

*> converged to zero.

*> else

*> the algorithm did not converge; D and E contain the

*> elements of a bidiagonal matrix which is orthogonally

*> similar to the input matrix B; if INFO = i, i

*> elements of E have not converged to zero.