141 SUBROUTINE zlaed0( QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS, RWORK,
149 INTEGER INFO, LDQ, LDQS, N, QSIZ
153 DOUBLE PRECISION D( * ), E( * ), RWORK( * )
154 COMPLEX*16 Q( LDQ, * ), QSTORE( LDQS, * )
163 parameter( two = 2.d+0 )
166 INTEGER CURLVL, CURPRB, CURR, I, IGIVCL, IGIVNM,
167 $ igivpt, indxq, iperm, iprmpt, iq, iqptr, iwrem,
168 $ j, k, lgn, ll, matsiz, msd2, smlsiz, smm1,
169 $ spm1, spm2, submat, subpbs, tlvls
170 DOUBLE PRECISION TEMP
181 INTRINSIC abs, dble, int, log, max
193 IF( qsiz.LT.max( 0, n ) )
THEN
195 ELSE IF( n.LT.0 )
THEN
197 ELSE IF( ldq.LT.max( 1, n ) )
THEN
199 ELSE IF( ldqs.LT.max( 1, n ) )
THEN
203 CALL xerbla(
'ZLAED0', -info )
212 smlsiz = ilaenv( 9,
'ZLAED0',
' ', 0, 0, 0, 0 )
221 IF( iwork( subpbs ).GT.smlsiz )
THEN
222 DO 20 j = subpbs, 1, -1
223 iwork( 2*j ) = ( iwork( j )+1 ) / 2
224 iwork( 2*j-1 ) = iwork( j ) / 2
231 iwork( j ) = iwork( j ) + iwork( j-1 )
239 submat = iwork( i ) + 1
241 d( smm1 ) = d( smm1 ) - abs( e( smm1 ) )
242 d( submat ) = d( submat ) - abs( e( smm1 ) )
250 temp = log( dble( n ) ) / log( two )
256 iprmpt = indxq + n + 1
257 iperm = iprmpt + n*lgn
258 iqptr = iperm + n*lgn
259 igivpt = iqptr + n + 2
260 igivcl = igivpt + n*lgn
263 iq = igivnm + 2*n*lgn
264 iwrem = iq + n**2 + 1
267 iwork( iprmpt+i ) = 1
268 iwork( igivpt+i ) = 1
281 submat = iwork( i ) + 1
282 matsiz = iwork( i+1 ) - iwork( i )
284 ll = iq - 1 + iwork( iqptr+curr )
285 CALL dsteqr(
'I', matsiz, d( submat ), e( submat ),
286 $ rwork( ll ), matsiz, rwork, info )
287 CALL zlacrm( qsiz, matsiz, q( 1, submat ), ldq, rwork( ll ),
288 $ matsiz, qstore( 1, submat ), ldqs,
290 iwork( iqptr+curr+1 ) = iwork( iqptr+curr ) + matsiz**2
293 info = submat*( n+1 ) + submat + matsiz - 1
297 DO 60 j = submat, iwork( i+1 )
310 IF( subpbs.GT.1 )
THEN
319 submat = iwork( i ) + 1
320 matsiz = iwork( i+2 ) - iwork( i )
332 CALL zlaed7( matsiz, msd2, qsiz, tlvls, curlvl, curprb,
333 $ d( submat ), qstore( 1, submat ), ldqs,
334 $ e( submat+msd2-1 ), iwork( indxq+submat ),
335 $ rwork( iq ), iwork( iqptr ), iwork( iprmpt ),
336 $ iwork( iperm ), iwork( igivpt ),
337 $ iwork( igivcl ), rwork( igivnm ),
338 $ q( 1, submat ), rwork( iwrem ),
339 $ iwork( subpbs+1 ), info )
341 info = submat*( n+1 ) + submat + matsiz - 1
344 iwork( i / 2+1 ) = iwork( i+2 )
359 CALL zcopy( qsiz, qstore( 1, j ), 1, q( 1, i ), 1 )
361 CALL dcopy( n, rwork, 1, d, 1 )
subroutine zlaed0(qsiz, n, d, e, q, ldq, qstore, ldqs, rwork, iwork, info)
ZLAED0 used by ZSTEDC. Computes all eigenvalues and corresponding eigenvectors of an unreduced symmet...
subroutine zlaed7(n, cutpnt, qsiz, tlvls, curlvl, curpbm, d, q, ldq, rho, indxq, qstore, qptr, prmptr, perm, givptr, givcol, givnum, work, rwork, iwork, info)
ZLAED7 used by ZSTEDC. Computes the updated eigensystem of a diagonal matrix after modification by a ...