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 xerbla(srname, info)
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
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 slaed8(icompq, k, n, qsiz, d, q, ldq, indxq, rho, cutpnt, z, dlambda, 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...
subroutine slaed9(k, kstart, kstop, n, d, q, ldq, rho, dlambda, w, s, lds, info)
SLAED9 used by SSTEDC. Finds the roots of the secular equation and updates the eigenvectors....
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...