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', 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 )
subroutine zlahef_aa(UPLO, J1, M, NB, A, LDA, IPIV, H, LDH, WORK)
ZLAHEF_AA
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zhetrf_aa(UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
ZHETRF_AA
subroutine zscal(N, ZA, ZX, INCX)
ZSCAL