256 SUBROUTINE slaed7( 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 REAL D( * ), GIVNUM( 2, * ), Q( ldq, * ),
274 $ qstore( * ), work( * )
281 parameter( one = 1.0e0, zero = 0.0e0 )
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(
'SLAED7', -info )
324 IF( icompq.EQ.1 )
THEN 345 DO 10 i = 1, curlvl - 1
346 ptr = ptr + 2**( tlvls-i )
349 CALL slaeda( 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 slaed8( 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 slaed9( 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 sgemm(
'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 slamrg( n1, n2, d, 1, -1, indxq )
393 qptr( curr+1 ) = qptr( curr )
subroutine slaed9(K, KSTART, KSTOP, N, D, Q, LDQ, RHO, DLAMDA, W, S, LDS, INFO)
SLAED9 used by SSTEDC. Finds the roots of the secular equation and updates the eigenvectors. Used when the original matrix is dense.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
subroutine slaeda(N, TLVLS, CURLVL, CURPBM, PRMPTR, PERM, GIVPTR, GIVCOL, GIVNUM, Q, QPTR, Z, ZTEMP, INFO)
SLAEDA used by SSTEDC. Computes the Z vector determining the rank-one modification of the diagonal ma...
subroutine slaed7(ICOMPQ, N, QSIZ, TLVLS, CURLVL, CURPBM, D, Q, LDQ, INDXQ, RHO, CUTPNT, QSTORE, QPTR, PRMPTR, PERM, GIVPTR, GIVCOL, GIVNUM, WORK, IWORK, INFO)
SLAED7 used by SSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a ...
subroutine slamrg(N1, N2, A, STRD1, STRD2, INDEX)
SLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single...
subroutine slaed8(ICOMPQ, K, N, QSIZ, D, Q, LDQ, INDXQ, RHO, CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR, GIVCOL, GIVNUM, INDXP, INDX, INFO)
SLAED8 used by SSTEDC. Merges eigenvalues and deflates secular equation. Used when the original matri...