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,
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 ),