133 SUBROUTINE zhetrf_aa( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
144 INTEGER N, LDA, LWORK, INFO
148 COMPLEX*16 A( LDA, * ), WORK( * )
154 parameter( zero = (0.0d+0, 0.0d+0), one = (1.0d+0, 0.0d+0) )
157 LOGICAL LQUERY, UPPER
159 INTEGER NB, MJ, NJ, K1, K2, J1, J2, J3, JB
165 EXTERNAL lsame, ilaenv
171 INTRINSIC dble, dconjg, max
177 nb = ilaenv( 1,
'ZHETRF_AA', uplo, n, -1, -1, -1 )
182 upper = lsame( uplo,
'U' )
183 lquery = ( lwork.EQ.-1 )
184 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
186 ELSE IF( n.LT.0 )
THEN
188 ELSE IF( lda.LT.max( 1, n ) )
THEN
190 ELSE IF( lwork.LT.max( 1, 2*n ) .AND. .NOT.lquery )
THEN
200 CALL xerbla(
'ZHETRF_AA', -info )
202 ELSE IF( lquery )
THEN
213 a( 1, 1 ) = dble( a( 1, 1 ) )
219 IF( lwork.LT.((1+nb)*n) )
THEN
231 CALL zcopy( n, a( 1, 1 ), lda, work( 1 ), 1 )
250 jb = min( n-j1+1, nb )
256 $ a( max(1, j), j+1 ), lda,
257 $ ipiv( j+1 ), work, n, work( n*nb+1 ) )
261 DO j2 = j+2, min(n, j+jb+1)
262 ipiv( j2 ) = ipiv( j2 ) + j
263 IF( (j2.NE.ipiv(j2)) .AND. ((j1-k1).GT.2) )
THEN
264 CALL zswap( j1-k1-2, a( 1, j2 ), 1,
265 $ a( 1, ipiv(j2) ), 1 )
278 IF( j1.GT.1 .OR. jb.GT.1 )
THEN
282 alpha = dconjg( a( j, j+1 ) )
284 CALL zcopy( n-j, a( j-1, j+1 ), lda,
285 $ work( (j+1-j1+1)+jb*n ), 1 )
286 CALL zscal( n-j, alpha, work( (j+1-j1+1)+jb*n ), 1 )
309 nj = min( nb, n-j2+1 )
315 CALL zgemm(
'Conjugate transpose',
'Transpose',
317 $ -one, a( j1-k2, j3 ), lda,
318 $ work( (j3-j1+1)+k1*n ), n,
319 $ one, a( j3, j3 ), lda )
325 CALL zgemm(
'Conjugate transpose',
'Transpose',
327 $ -one, a( j1-k2, j2 ), lda,
328 $ work( (j3-j1+1)+k1*n ), n,
329 $ one, a( j2, j3 ), lda )
334 a( j, j+1 ) = dconjg( alpha )
339 CALL zcopy( n-j, a( j+1, j+1 ), lda, work( 1 ), 1 )
351 CALL zcopy( n, a( 1, 1 ), 1, work( 1 ), 1 )
370 jb = min( n-j1+1, nb )
376 $ a( j+1, max(1, j) ), lda,
377 $ ipiv( j+1 ), work, n, work( n*nb+1 ) )
381 DO j2 = j+2, min(n, j+jb+1)
382 ipiv( j2 ) = ipiv( j2 ) + j
383 IF( (j2.NE.ipiv(j2)) .AND. ((j1-k1).GT.2) )
THEN
384 CALL zswap( j1-k1-2, a( j2, 1 ), lda,
385 $ a( ipiv(j2), 1 ), lda )
398 IF( j1.GT.1 .OR. jb.GT.1 )
THEN
402 alpha = dconjg( a( j+1, j ) )
404 CALL zcopy( n-j, a( j+1, j-1 ), 1,
405 $ work( (j+1-j1+1)+jb*n ), 1 )
406 CALL zscal( n-j, alpha, work( (j+1-j1+1)+jb*n ), 1 )
429 nj = min( nb, n-j2+1 )
435 CALL zgemm(
'No transpose',
'Conjugate transpose',
437 $ -one, work( (j3-j1+1)+k1*n ), n,
438 $ a( j3, j1-k2 ), lda,
439 $ one, a( j3, j3 ), lda )
445 CALL zgemm(
'No transpose',
'Conjugate transpose',
447 $ -one, work( (j3-j1+1)+k1*n ), n,
448 $ a( j2, j1-k2 ), lda,
449 $ one, a( j3, j2 ), lda )
454 a( j+1, j ) = dconjg( alpha )
459 CALL zcopy( n-j, a( j+1, j+1 ), 1, work( 1 ), 1 )