189 SUBROUTINE chetrd( UPLO, N, A, LDA, D, E, TAU, WORK, LWORK,
198 INTEGER INFO, LDA, LWORK, N
202 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
209 parameter( one = 1.0e+0 )
211 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
214 LOGICAL LQUERY, UPPER
215 INTEGER I, IINFO, IWS, J, KK, LDWORK, LWKOPT, NB,
228 EXTERNAL lsame, ilaenv, sroundup_lwork
235 upper = lsame( uplo,
'U' )
236 lquery = ( lwork.EQ.-1 )
237 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
239 ELSE IF( n.LT.0 )
THEN
241 ELSE IF( lda.LT.max( 1, n ) )
THEN
243 ELSE IF( lwork.LT.1 .AND. .NOT.lquery )
THEN
251 nb = ilaenv( 1,
'CHETRD', uplo, n, -1, -1, -1 )
252 lwkopt = max( 1, n*nb )
253 work( 1 ) = sroundup_lwork(lwkopt)
257 CALL xerbla(
'CHETRD', -info )
259 ELSE IF( lquery )
THEN
272 IF( nb.GT.1 .AND. nb.LT.n )
THEN
277 nx = max( nb, ilaenv( 3,
'CHETRD', uplo, n, -1, -1, -1 ) )
284 IF( lwork.LT.iws )
THEN
290 nb = max( lwork / ldwork, 1 )
291 nbmin = ilaenv( 2,
'CHETRD', uplo, n, -1, -1, -1 )
307 kk = n - ( ( n-nx+nb-1 ) / nb )*nb
308 DO 20 i = n - nb + 1, kk + 1, -nb
314 CALL clatrd( uplo, i+nb-1, nb, a, lda, e, tau, work,
320 CALL cher2k( uplo,
'No transpose', i-1, nb, -cone,
321 $ a( 1, i ), lda, work, ldwork, one, a, lda )
326 DO 10 j = i, i + nb - 1
327 a( j-1, j ) = e( j-1 )
328 d( j ) = real( a( j, j ) )
334 CALL chetd2( uplo, kk, a, lda, d, e, tau, iinfo )
339 DO 40 i = 1, n - nx, nb
345 CALL clatrd( uplo, n-i+1, nb, a( i, i ), lda, e( i ),
346 $ tau( i ), work, ldwork )
351 CALL cher2k( uplo,
'No transpose', n-i-nb+1, nb, -cone,
352 $ a( i+nb, i ), lda, work( nb+1 ), ldwork, one,
353 $ a( i+nb, i+nb ), lda )
358 DO 30 j = i, i + nb - 1
360 d( j ) = real( a( j, j ) )
366 CALL chetd2( uplo, n-i+1, a( i, i ), lda, d( i ), e( i ),
370 work( 1 ) = sroundup_lwork(lwkopt)
subroutine cher2k(uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CHER2K
subroutine chetd2(uplo, n, a, lda, d, e, tau, info)
CHETD2 reduces a Hermitian matrix to real symmetric tridiagonal form by an unitary similarity transfo...
subroutine clatrd(uplo, n, nb, a, lda, e, tau, w, ldw)
CLATRD reduces the first nb rows and columns of a symmetric/Hermitian matrix A to real tridiagonal fo...