193 SUBROUTINE zhetrd( UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO )
202 INTEGER INFO, LDA, LWORK, N
205 DOUBLE PRECISION D( * ), E( * )
206 COMPLEX*16 A( lda, * ), TAU( * ), WORK( * )
213 parameter ( one = 1.0d+0 )
215 parameter ( cone = ( 1.0d+0, 0.0d+0 ) )
218 LOGICAL LQUERY, UPPER
219 INTEGER I, IINFO, IWS, J, KK, LDWORK, LWKOPT, NB,
231 EXTERNAL lsame, ilaenv
238 upper = lsame( uplo,
'U' )
239 lquery = ( lwork.EQ.-1 )
240 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
242 ELSE IF( n.LT.0 )
THEN
244 ELSE IF( lda.LT.max( 1, n ) )
THEN
246 ELSE IF( lwork.LT.1 .AND. .NOT.lquery )
THEN
254 nb = ilaenv( 1,
'ZHETRD', uplo, n, -1, -1, -1 )
260 CALL xerbla(
'ZHETRD', -info )
262 ELSE IF( lquery )
THEN
275 IF( nb.GT.1 .AND. nb.LT.n )
THEN
280 nx = max( nb, ilaenv( 3,
'ZHETRD', uplo, n, -1, -1, -1 ) )
287 IF( lwork.LT.iws )
THEN
293 nb = max( lwork / ldwork, 1 )
294 nbmin = ilaenv( 2,
'ZHETRD', uplo, n, -1, -1, -1 )
310 kk = n - ( ( n-nx+nb-1 ) / nb )*nb
311 DO 20 i = n - nb + 1, kk + 1, -nb
317 CALL zlatrd( uplo, i+nb-1, nb, a, lda, e, tau, work,
323 CALL zher2k( uplo,
'No transpose', i-1, nb, -cone,
324 $ a( 1, i ), lda, work, ldwork, one, a, lda )
329 DO 10 j = i, i + nb - 1
330 a( j-1, j ) = e( j-1 )
337 CALL zhetd2( uplo, kk, a, lda, d, e, tau, iinfo )
342 DO 40 i = 1, n - nx, nb
348 CALL zlatrd( uplo, n-i+1, nb, a( i, i ), lda, e( i ),
349 $ tau( i ), work, ldwork )
354 CALL zher2k( uplo,
'No transpose', n-i-nb+1, nb, -cone,
355 $ a( i+nb, i ), lda, work( nb+1 ), ldwork, one,
356 $ a( i+nb, i+nb ), lda )
361 DO 30 j = i, i + nb - 1
369 CALL zhetd2( uplo, n-i+1, a( i, i ), lda, d( i ), e( i ),
subroutine zhetrd(UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO)
ZHETRD
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zlatrd(UPLO, N, NB, A, LDA, E, TAU, W, LDW)
ZLATRD reduces the first nb rows and columns of a symmetric/Hermitian matrix A to real tridiagonal fo...
subroutine zhetd2(UPLO, N, A, LDA, D, E, TAU, INFO)
ZHETD2 reduces a Hermitian matrix to real symmetric tridiagonal form by an unitary similarity transfo...
subroutine zher2k(UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZHER2K