143 SUBROUTINE claed0( QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS, RWORK,
151 INTEGER INFO, LDQ, LDQS, N, QSIZ
155 REAL D( * ), E( * ), RWORK( * )
156 COMPLEX Q( LDQ, * ), QSTORE( LDQS, * )
165 parameter( two = 2.e+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
182 INTRINSIC abs, int, log, max, real
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(
'CLAED0', -info )
213 smlsiz = ilaenv( 9,
'CLAED0',
' ', 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( real( 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 ssteqr(
'I', matsiz, d( submat ), e( submat ),
287 $ rwork( ll ), matsiz, rwork, info )
288 CALL clacrm( 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 claed7( 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 ccopy( qsiz, qstore( 1, j ), 1, q( 1, i ), 1 )
362 CALL scopy( n, rwork, 1, d, 1 )
subroutine xerbla(srname, info)
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine clacrm(m, n, a, lda, b, ldb, c, ldc, rwork)
CLACRM multiplies a complex matrix by a square real matrix.
subroutine claed0(qsiz, n, d, e, q, ldq, qstore, ldqs, rwork, iwork, info)
CLAED0 used by CSTEDC. Computes all eigenvalues and corresponding eigenvectors of an unreduced symmet...
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 ...
subroutine ssteqr(compz, n, d, e, z, ldz, work, info)
SSTEQR