## DBDSQR question

Post here if you want to report a bug to the LAPACK team

### DBDSQR question

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.
zotkevich

Posts: 13
Joined: Tue Dec 21, 2010 2:41 am
Location: Intel Co.