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)
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
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...
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...