148 SUBROUTINE dlasd0( N, SQRE, D, E, U, LDU, VT, LDVT, SMLSIZ, IWORK,
156 INTEGER INFO, LDU, LDVT, N, SMLSIZ, SQRE
160 DOUBLE PRECISION D( * ), E( * ), U( LDU, * ), VT( LDVT, * ),
169 $
nl, nlf, nlp1, nlvl, nr, nrf, nrp1, sqrei
170 DOUBLE PRECISION ALPHA, BETA
183 ELSE IF( ( sqre.LT.0 ) .OR. ( sqre.GT.1 ) )
THEN
191 ELSE IF( ldvt.LT.m )
THEN
193 ELSE IF( smlsiz.LT.3 )
THEN
197 CALL xerbla(
'DLASD0', -info )
203 IF( n.LE.smlsiz )
THEN
204 CALL dlasdq(
'U', sqre, n, m, n, 0, d, e, vt, ldvt, u, ldu, u
217 $ iwork( ndimr ), smlsiz )
233 ic = iwork( inode+i1 )
234 nl = iwork( ndiml+i1 )
241 CALL dlasdq(
'U', sqrei,
nl, nlp1,
nl, ncc, d( nlf ), e( nlf ),
242 $ vt( nlf, nlf ), ldvt, u( nlf, nlf ), ldu,
243 $ u( nlf, nlf ), ldu, work, info )
247 itemp = idxq + nlf - 2
257 CALL dlasdq(
'U', sqrei, nr, nrp1, nr, ncc, d( nrf ), e( nrf ),
258 $ vt( nrf, nrf ), ldvt, u( nrf, nrf ), ldu,
259 $ u( nrf, nrf ), ldu, work, info )
265 iwork( itemp+j-1 ) = j
271 DO 50 lvl = nlvl, 1, -1
285 ic = iwork( inode+im1 )
286 nl = iwork( ndiml+im1 )
287 nr = iwork( ndimr+im1 )
289 IF( ( sqre.EQ.0 ) .AND. ( i.EQ.ll ) )
THEN
294 idxqc = idxq + nlf - 1
297 CALL dlasd1(
nl, nr, sqrei, d( nlf ), alpha, beta,
298 $ u( nlf, nlf ), ldu, vt( nlf, nlf ), ldvt,
299 $ iwork( idxqc ), iwork( iwk ), work, info )
subroutine dlasd1(nl, nr, sqre, d, alpha, beta, u, ldu, vt, ldvt, idxq, iwork, work, info)
DLASD1 computes the SVD of an upper bidiagonal matrix B of the specified size. Used by sbdsdc.
subroutine dlasd0(n, sqre, d, e, u, ldu, vt, ldvt, smlsiz, iwork, work, info)
DLASD0 computes the singular values of a real upper bidiagonal n-by-m matrix B with diagonal d and of...
subroutine dlasdq(uplo, sqre, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work, info)
DLASDQ computes the SVD of a real bidiagonal matrix with diagonal d and off-diagonal e....
subroutine dlasdt(n, lvl, nd, inode, ndiml, ndimr, msub)
DLASDT creates a tree of subproblems for bidiagonal divide and conquer. Used by sbdsdc.