133 SUBROUTINE dsytrf_aa( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
144 INTEGER N, LDA, LWORK, INFO
148 DOUBLE PRECISION A( lda, * ), WORK( * )
153 DOUBLE PRECISION ZERO, ONE
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
160 DOUBLE PRECISION ALPHA
165 EXTERNAL lsame, ilaenv
177 nb = ilaenv( 1,
'DSYTRF', 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(
'DSYTRF_AA', -info )
202 ELSE IF( lquery )
THEN 218 IF( lwork.LT.((1+nb)*n) )
THEN 230 CALL dcopy( 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 dswap( 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 dcopy( n-j, a( j-1, j+1 ), lda,
284 $ work( (j+1-j1+1)+jb*n ), 1 )
285 CALL dscal( n-j, alpha, work( (j+1-j1+1)+jb*n ), 1 )
308 nj = min( nb, n-j2+1 )
314 CALL dgemv(
'No transpose', mj, jb+1,
315 $ -one, work( j3-j1+1+k1*n ), n,
317 $ one, a( j3, j3 ), lda )
323 CALL dgemm(
'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 dcopy( n-j, a( j+1, j+1 ), lda, work( 1 ), 1 )
349 CALL dcopy( 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 dswap( 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 dcopy( n-j, a( j+1, j-1 ), 1,
403 $ work( (j+1-j1+1)+jb*n ), 1 )
404 CALL dscal( n-j, alpha, work( (j+1-j1+1)+jb*n ), 1 )
427 nj = min( nb, n-j2+1 )
433 CALL dgemv(
'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 dgemm(
'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 dcopy( n-j, a( j+1, j+1 ), 1, work( 1 ), 1 )
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine dlasyf_aa(UPLO, J1, M, NB, A, LDA, IPIV, H, LDH, WORK)
DLASYF_AA
subroutine dgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
DGEMV
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dswap(N, DX, INCX, DY, INCY)
DSWAP
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dsytrf_aa(UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
DSYTRF_AA
subroutine dscal(N, DA, DX, INCX)
DSCAL