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, * ),
167 INTEGER I, I1, IC, IDXQ, IDXQC, IM1, INODE, ITEMP, IWK,
168 $ j, lf, ll, lvl, m, ncc, nd, ndb1, ndiml, ndimr,
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,
216 CALL dlasdt( n, nlvl, nd, iwork( inode ), iwork( ndiml ),
217 $ iwork( ndimr ), smlsiz )
233 ic = iwork( inode+i1 )
234 nl = iwork( ndiml+i1 )
236 nr = iwork( ndimr+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 xerbla(SRNAME, INFO)
XERBLA
subroutine dlasdt(N, LVL, ND, INODE, NDIML, NDIMR, MSUB)
DLASDT creates a tree of subproblems for bidiagonal divide and conquer. Used by sbdsdc.
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 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 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...