133 SUBROUTINE zsytrf_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, one = 1.0d+0 )
157 LOGICAL LQUERY, UPPER
159 INTEGER NB, MJ, NJ, K1, K2, J1, J2, J3, JB
165 EXTERNAL lsame, ilaenv
177 nb = ilaenv( 1,
'ZSYTRF', 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(
'ZSYTRF_AA', -info )
202 ELSE IF( lquery )
THEN 218 IF( lwork.LT.((1+nb)*n) )
THEN 230 CALL zcopy( n, a( 1, 1 ), lda, work( 1 ), 1 )
249 jb = min( n-j1+1, nb )
255 $ a( max(1, j), j+1 ), lda,
256 $ ipiv( j+1 ), work, n, work( n*nb+1 ) )
260 DO j2 = j+2, min(n, j+jb+1)
261 ipiv( j2 ) = ipiv( j2 ) + j
262 IF( (j2.NE.ipiv(j2)) .AND. ((j1-k1).GT.2) )
THEN 263 CALL zswap( j1-k1-2, a( 1, j2 ), 1,
264 $ a( 1, ipiv(j2) ), 1 )
277 IF( j1.GT.1 .OR. jb.GT.1 )
THEN 283 CALL zcopy( n-j, a( j-1, j+1 ), lda,
284 $ work( (j+1-j1+1)+jb*n ), 1 )
285 CALL zscal( n-j, alpha, work( (j+1-j1+1)+jb*n ), 1 )
308 nj = min( nb, n-j2+1 )
314 CALL zgemv(
'No transpose', mj, jb+1,
315 $ -one, work( j3-j1+1+k1*n ), n,
317 $ one, a( j3, j3 ), lda )
323 CALL zgemm(
'Transpose',
'Transpose',
325 $ -one, a( j1-k2, j2 ), lda,
326 $ work( j3-j1+1+k1*n ), n,
327 $ one, a( j2, j3 ), lda )
337 CALL zcopy( n-j, a( j+1, j+1 ), lda, work( 1 ), 1 )
349 CALL zcopy( n, a( 1, 1 ), 1, work( 1 ), 1 )
368 jb = min( n-j1+1, nb )
374 $ a( j+1, max(1, j) ), lda,
375 $ ipiv( j+1 ), work, n, work( n*nb+1 ) )
379 DO j2 = j+2, min(n, j+jb+1)
380 ipiv( j2 ) = ipiv( j2 ) + j
381 IF( (j2.NE.ipiv(j2)) .AND. ((j1-k1).GT.2) )
THEN 382 CALL zswap( j1-k1-2, a( j2, 1 ), lda,
383 $ a( ipiv(j2), 1 ), lda )
396 IF( j1.GT.1 .OR. jb.GT.1 )
THEN 402 CALL zcopy( n-j, a( j+1, j-1 ), 1,
403 $ work( (j+1-j1+1)+jb*n ), 1 )
404 CALL zscal( n-j, alpha, work( (j+1-j1+1)+jb*n ), 1 )
427 nj = min( nb, n-j2+1 )
433 CALL zgemv(
'No transpose', mj, jb+1,
434 $ -one, work( j3-j1+1+k1*n ), n,
435 $ a( j3, j1-k2 ), lda,
436 $ one, a( j3, j3 ), 1 )
442 CALL zgemm(
'No transpose',
'Transpose',
444 $ -one, work( j3-j1+1+k1*n ), n,
445 $ a( j2, j1-k2 ), lda,
446 $ one, a( j3, j2 ), lda )
456 CALL zcopy( n-j, a( j+1, j+1 ), 1, work( 1 ), 1 )
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zsytrf_aa(UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
ZSYTRF_AA
subroutine zgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZGEMV
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 zlasyf_aa(UPLO, J1, M, NB, A, LDA, IPIV, H, LDH, WORK)
ZLASYF_AA
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zscal(N, ZA, ZX, INCX)
ZSCAL