256 SUBROUTINE dlaed7( ICOMPQ, N, QSIZ, TLVLS, CURLVL, CURPBM, D, Q,
257 $ LDQ, INDXQ, RHO, CUTPNT, QSTORE, QPTR, PRMPTR,
258 $ PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK,
266 INTEGER CURLVL, CURPBM, CUTPNT, ICOMPQ, INFO, LDQ, N,
271 INTEGER GIVCOL( 2, * ), GIVPTR( * ), INDXQ( * ),
272 $ iwork( * ), perm( * ), prmptr( * ), qptr( * )
273 DOUBLE PRECISION D( * ), GIVNUM( 2, * ), Q( ldq, * ),
274 $ qstore( * ), work( * )
280 DOUBLE PRECISION ONE, ZERO
281 parameter( one = 1.0d0, zero = 0.0d0 )
284 INTEGER COLTYP, CURR, I, IDLMDA, INDX, INDXC, INDXP,
285 $ iq2, is, iw, iz, k, ldq2, n1, n2, ptr
299 IF( icompq.LT.0 .OR. icompq.GT.1 )
THEN 301 ELSE IF( n.LT.0 )
THEN 303 ELSE IF( icompq.EQ.1 .AND. qsiz.LT.n )
THEN 305 ELSE IF( ldq.LT.max( 1, n ) )
THEN 307 ELSE IF( min( 1, n ).GT.cutpnt .OR. n.LT.cutpnt )
THEN 311 CALL xerbla(
'DLAED7', -info )
324 IF( icompq.EQ.1 )
THEN 345 DO 10 i = 1, curlvl - 1
346 ptr = ptr + 2**( tlvls-i )
349 CALL dlaeda( n, tlvls, curlvl, curpbm, prmptr, perm, givptr,
350 $ givcol, givnum, qstore, qptr, work( iz ),
351 $ work( iz+n ), info )
357 IF( curlvl.EQ.tlvls )
THEN 365 CALL dlaed8( icompq, k, n, qsiz, d, q, ldq, indxq, rho, cutpnt,
366 $ work( iz ), work( idlmda ), work( iq2 ), ldq2,
367 $ work( iw ), perm( prmptr( curr ) ), givptr( curr+1 ),
368 $ givcol( 1, givptr( curr ) ),
369 $ givnum( 1, givptr( curr ) ), iwork( indxp ),
370 $ iwork( indx ), info )
371 prmptr( curr+1 ) = prmptr( curr ) + n
372 givptr( curr+1 ) = givptr( curr+1 ) + givptr( curr )
377 CALL dlaed9( k, 1, k, n, d, work( is ), k, rho, work( idlmda ),
378 $ work( iw ), qstore( qptr( curr ) ), k, info )
381 IF( icompq.EQ.1 )
THEN 382 CALL dgemm(
'N',
'N', qsiz, k, k, one, work( iq2 ), ldq2,
383 $ qstore( qptr( curr ) ), k, zero, q, ldq )
385 qptr( curr+1 ) = qptr( curr ) + k**2
391 CALL dlamrg( n1, n2, d, 1, -1, indxq )
393 qptr( curr+1 ) = qptr( curr )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dlaed8(ICOMPQ, K, N, QSIZ, D, Q, LDQ, INDXQ, RHO, CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR, GIVCOL, GIVNUM, INDXP, INDX, INFO)
DLAED8 used by DSTEDC. Merges eigenvalues and deflates secular equation. Used when the original matri...
subroutine dlaed9(K, KSTART, KSTOP, N, D, Q, LDQ, RHO, DLAMDA, W, S, LDS, INFO)
DLAED9 used by DSTEDC. Finds the roots of the secular equation and updates the eigenvectors. Used when the original matrix is dense.
subroutine dlamrg(N1, N2, A, DTRD1, DTRD2, INDEX)
DLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single...
subroutine dlaed7(ICOMPQ, N, QSIZ, TLVLS, CURLVL, CURPBM, D, Q, LDQ, INDXQ, RHO, CUTPNT, QSTORE, QPTR, PRMPTR, PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK, INFO)
DLAED7 used by DSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a ...
subroutine dlaeda(N, TLVLS, CURLVL, CURPBM, PRMPTR, PERM, GIVPTR, GIVCOL, GIVNUM, Q, QPTR, Z, ZTEMP, INFO)
DLAEDA used by DSTEDC. Computes the Z vector determining the rank-one modification of the diagonal ma...