143 SUBROUTINE zlaed0( QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS, RWORK,
151 INTEGER INFO, LDQ, LDQS, N, QSIZ
155 DOUBLE PRECISION D( * ), E( * ), RWORK( * )
156 COMPLEX*16 Q( LDQ, * ), QSTORE( LDQS, * )
165 parameter( two = 2.d+0 )
168 INTEGER CURLVL, CURPRB, CURR, I, IGIVCL, IGIVNM,
169 $ igivpt, indxq, iperm, iprmpt, iq, iqptr, iwrem,
170 $ j, k, lgn, ll, matsiz, msd2, smlsiz, smm1,
171 $ spm1, spm2, submat, subpbs, tlvls
172 DOUBLE PRECISION TEMP
182 INTRINSIC abs, dble, int, log, max
194 IF( qsiz.LT.max( 0, n ) )
THEN
196 ELSE IF( n.LT.0 )
THEN
198 ELSE IF( ldq.LT.max( 1, n ) )
THEN
200 ELSE IF( ldqs.LT.max( 1, n ) )
THEN
204 CALL xerbla(
'ZLAED0', -info )
213 smlsiz = ilaenv( 9,
'ZLAED0',
' ', 0, 0, 0, 0 )
222 IF( iwork( subpbs ).GT.smlsiz )
THEN
223 DO 20 j = subpbs, 1, -1
224 iwork( 2*j ) = ( iwork( j )+1 ) / 2
225 iwork( 2*j-1 ) = iwork( j ) / 2
232 iwork( j ) = iwork( j ) + iwork( j-1 )
240 submat = iwork( i ) + 1
242 d( smm1 ) = d( smm1 ) - abs( e( smm1 ) )
243 d( submat ) = d( submat ) - abs( e( smm1 ) )
251 temp = log( dble( n ) ) / log( two )
257 iprmpt = indxq + n + 1
258 iperm = iprmpt + n*lgn
259 iqptr = iperm + n*lgn
260 igivpt = iqptr + n + 2
261 igivcl = igivpt + n*lgn
264 iq = igivnm + 2*n*lgn
265 iwrem = iq + n**2 + 1
268 iwork( iprmpt+i ) = 1
269 iwork( igivpt+i ) = 1
282 submat = iwork( i ) + 1
283 matsiz = iwork( i+1 ) - iwork( i )
285 ll = iq - 1 + iwork( iqptr+curr )
286 CALL dsteqr(
'I', matsiz, d( submat ), e( submat ),
287 $ rwork( ll ), matsiz, rwork, info )
288 CALL zlacrm( qsiz, matsiz, q( 1, submat ), ldq, rwork( ll ),
289 $ matsiz, qstore( 1, submat ), ldqs,
291 iwork( iqptr+curr+1 ) = iwork( iqptr+curr ) + matsiz**2
294 info = submat*( n+1 ) + submat + matsiz - 1
298 DO 60 j = submat, iwork( i+1 )
311 IF( subpbs.GT.1 )
THEN
320 submat = iwork( i ) + 1
321 matsiz = iwork( i+2 ) - iwork( i )
333 CALL zlaed7( matsiz, msd2, qsiz, tlvls, curlvl, curprb,
334 $ d( submat ), qstore( 1, submat ), ldqs,
335 $ e( submat+msd2-1 ), iwork( indxq+submat ),
336 $ rwork( iq ), iwork( iqptr ), iwork( iprmpt ),
337 $ iwork( iperm ), iwork( igivpt ),
338 $ iwork( igivcl ), rwork( igivnm ),
339 $ q( 1, submat ), rwork( iwrem ),
340 $ iwork( subpbs+1 ), info )
342 info = submat*( n+1 ) + submat + matsiz - 1
345 iwork( i / 2+1 ) = iwork( i+2 )
360 CALL zcopy( qsiz, qstore( 1, j ), 1, q( 1, i ), 1 )
362 CALL dcopy( n, rwork, 1, d, 1 )
subroutine xerbla(srname, info)
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine zlacrm(m, n, a, lda, b, ldb, c, ldc, rwork)
ZLACRM multiplies a complex matrix by a square real matrix.
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 ...
subroutine dsteqr(compz, n, d, e, z, ldz, work, info)
DSTEQR