245 SUBROUTINE claed7( N, CUTPNT, QSIZ, TLVLS, CURLVL, CURPBM, D, Q,
246 $ LDQ, RHO, INDXQ, QSTORE, QPTR, PRMPTR, PERM,
247 $ GIVPTR, GIVCOL, GIVNUM, WORK, RWORK, IWORK,
255 INTEGER CURLVL, CURPBM, CUTPNT, INFO, LDQ, N, QSIZ,
260 INTEGER GIVCOL( 2, * ), GIVPTR( * ), INDXQ( * ),
261 $ iwork( * ), perm( * ), prmptr( * ), qptr( * )
262 REAL D( * ), GIVNUM( 2, * ), QSTORE( * ), RWORK( * )
263 COMPLEX Q( ldq, * ), WORK( * )
269 INTEGER COLTYP, CURR, I, IDLMDA, INDX,
270 $ indxc, indxp, iq, iw, iz, k, n1, n2, ptr
289 ELSE IF( min( 1, n ).GT.cutpnt .OR. n.LT.cutpnt )
THEN 291 ELSE IF( qsiz.LT.n )
THEN 293 ELSE IF( ldq.LT.max( 1, n ) )
THEN 297 CALL xerbla(
'CLAED7', -info )
324 DO 10 i = 1, curlvl - 1
325 ptr = ptr + 2**( tlvls-i )
328 CALL slaeda( n, tlvls, curlvl, curpbm, prmptr, perm, givptr,
329 $ givcol, givnum, qstore, qptr, rwork( iz ),
330 $ rwork( iz+n ), info )
336 IF( curlvl.EQ.tlvls )
THEN 344 CALL claed8( k, n, qsiz, q, ldq, d, rho, cutpnt, rwork( iz ),
345 $ rwork( idlmda ), work, qsiz, rwork( iw ),
346 $ iwork( indxp ), iwork( indx ), indxq,
347 $ perm( prmptr( curr ) ), givptr( curr+1 ),
348 $ givcol( 1, givptr( curr ) ),
349 $ givnum( 1, givptr( curr ) ), info )
350 prmptr( curr+1 ) = prmptr( curr ) + n
351 givptr( curr+1 ) = givptr( curr+1 ) + givptr( curr )
356 CALL slaed9( k, 1, k, n, d, rwork( iq ), k, rho,
357 $ rwork( idlmda ), rwork( iw ),
358 $ qstore( qptr( curr ) ), k, info )
359 CALL clacrm( qsiz, k, work, qsiz, qstore( qptr( curr ) ), k, q,
361 qptr( curr+1 ) = qptr( curr ) + k**2
370 CALL slamrg( n1, n2, d, 1, -1, indxq )
372 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 claed8(K, N, QSIZ, Q, LDQ, D, RHO, CUTPNT, Z, DLAMDA, Q2, LDQ2, W, INDXP, INDX, INDXQ, PERM, GIVPTR, GIVCOL, GIVNUM, INFO)
CLAED8 used by CSTEDC. Merges eigenvalues and deflates secular equation. Used when the original matri...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine clacrm(M, N, A, LDA, B, LDB, C, LDC, RWORK)
CLACRM multiplies a complex matrix by a square real matrix.
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 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 claed7(N, CUTPNT, QSIZ, TLVLS, CURLVL, CURPBM, D, Q, LDQ, RHO, INDXQ, QSTORE, QPTR, PRMPTR, PERM, GIVPTR, GIVCOL, GIVNUM, WORK, RWORK, IWORK, INFO)
CLAED7 used by CSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a ...