254 SUBROUTINE dlaed7( ICOMPQ, N, QSIZ, TLVLS, CURLVL, CURPBM, D,
256 $ LDQ, INDXQ, RHO, CUTPNT, QSTORE, QPTR, PRMPTR,
257 $ PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK,
265 INTEGER CURLVL, CURPBM, CUTPNT, ICOMPQ, INFO, LDQ, N,
270 INTEGER GIVCOL( 2, * ), GIVPTR( * ), INDXQ( * ),
271 $ iwork( * ), perm( * ), prmptr( * ), qptr( * )
272 DOUBLE PRECISION D( * ), GIVNUM( 2, * ), Q( LDQ, * ),
273 $ QSTORE( * ), WORK( * )
279 DOUBLE PRECISION ONE, ZERO
280 PARAMETER ( ONE = 1.0d0, zero = 0.0d0 )
283 INTEGER COLTYP, CURR, I, IDLMDA, INDX, INDXC, INDXP,
284 $ 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,
379 $ work( iw ), qstore( qptr( curr ) ), k, info )
382 IF( icompq.EQ.1 )
THEN
383 CALL dgemm(
'N',
'N', qsiz, k, k, one, work( iq2 ), ldq2,
384 $ qstore( qptr( curr ) ), k, zero, q, ldq )
386 qptr( curr+1 ) = qptr( curr ) + k**2
392 CALL dlamrg( n1, n2, d, 1, -1, indxq )
394 qptr( curr+1 ) = qptr( curr )
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 dlaed8(icompq, k, n, qsiz, d, q, ldq, indxq, rho, cutpnt, z, dlambda, 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, dlambda, w, s, lds, info)
DLAED9 used by DSTEDC. Finds the roots of the secular equation and updates the eigenvectors....
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...