140 COMPLEX*16 A( LDA, * ), WORK( * )
146 COMPLEX*16 CONE, CZERO
147 parameter( cone = ( 1.0d+0, 0.0d+0 ),
148 $ czero = ( 0.0d+0, 0.0d+0 ) )
153 COMPLEX*16 AK, AKKP1, AKP1, D, T, TEMP
158 EXTERNAL lsame, zdotu
171 upper = lsame( uplo,
'U' )
172 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
174 ELSE IF( n.LT.0 )
THEN
176 ELSE IF( lda.LT.max( 1, n ) )
THEN
180 CALL xerbla(
'ZSYTRI_ROOK', -info )
195 DO 10 info = n, 1, -1
196 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.czero )
204 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.czero )
225 IF( ipiv( k ).GT.0 )
THEN
231 a( k, k ) = cone / a( k, k )
236 CALL zcopy( k-1, a( 1, k ), 1, work, 1 )
237 CALL zsymv( uplo, k-1, -cone, a, lda, work, 1, czero,
239 a( k, k ) = a( k, k ) - zdotu( k-1, work, 1, a( 1, k ),
251 akp1 = a( k+1, k+1 ) / t
252 akkp1 = a( k, k+1 ) / t
253 d = t*( ak*akp1-cone )
255 a( k+1, k+1 ) = ak / d
256 a( k, k+1 ) = -akkp1 / d
261 CALL zcopy( k-1, a( 1, k ), 1, work, 1 )
262 CALL zsymv( uplo, k-1, -cone, a, lda, work, 1, czero,
264 a( k, k ) = a( k, k ) - zdotu( k-1, work, 1, a( 1, k ),
266 a( k, k+1 ) = a( k, k+1 ) -
267 $ zdotu( k-1, a( 1, k ), 1, a( 1, k+1 ), 1 )
268 CALL zcopy( k-1, a( 1, k+1 ), 1, work, 1 )
269 CALL zsymv( uplo, k-1, -cone, a, lda, work, 1, czero,
271 a( k+1, k+1 ) = a( k+1, k+1 ) -
272 $ zdotu( k-1, work, 1, a( 1, k+1 ), 1 )
277 IF( kstep.EQ.1 )
THEN
285 $
CALL zswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
286 CALL zswap( k-kp-1, a( kp+1, k ), 1, a( kp, kp+1 ), lda )
288 a( k, k ) = a( kp, kp )
299 $
CALL zswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
300 CALL zswap( k-kp-1, a( kp+1, k ), 1, a( kp, kp+1 ), lda )
303 a( k, k ) = a( kp, kp )
306 a( k, k+1 ) = a( kp, k+1 )
314 $
CALL zswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
315 CALL zswap( k-kp-1, a( kp+1, k ), 1, a( kp, kp+1 ), lda )
317 a( k, k ) = a( kp, kp )
341 IF( ipiv( k ).GT.0 )
THEN
347 a( k, k ) = cone / a( k, k )
352 CALL zcopy( n-k, a( k+1, k ), 1, work, 1 )
353 CALL zsymv( uplo, n-k,-cone, a( k+1, k+1 ), lda, work, 1,
354 $ czero, a( k+1, k ), 1 )
355 a( k, k ) = a( k, k ) - zdotu( n-k, work, 1, a( k+1, k ),
366 ak = a( k-1, k-1 ) / t
368 akkp1 = a( k, k-1 ) / t
369 d = t*( ak*akp1-cone )
370 a( k-1, k-1 ) = akp1 / d
372 a( k, k-1 ) = -akkp1 / d
377 CALL zcopy( n-k, a( k+1, k ), 1, work, 1 )
378 CALL zsymv( uplo, n-k,-cone, a( k+1, k+1 ), lda, work, 1,
379 $ czero, a( k+1, k ), 1 )
380 a( k, k ) = a( k, k ) - zdotu( n-k, work, 1, a( k+1, k ),
382 a( k, k-1 ) = a( k, k-1 ) -
383 $ zdotu( n-k, a( k+1, k ), 1, a( k+1, k-1 ),
385 CALL zcopy( n-k, a( k+1, k-1 ), 1, work, 1 )
386 CALL zsymv( uplo, n-k,-cone, a( k+1, k+1 ), lda, work, 1,
387 $ czero, a( k+1, k-1 ), 1 )
388 a( k-1, k-1 ) = a( k-1, k-1 ) -
389 $ zdotu( n-k, work, 1, a( k+1, k-1 ), 1 )
394 IF( kstep.EQ.1 )
THEN
402 $
CALL zswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ), 1 )
403 CALL zswap( kp-k-1, a( k+1, k ), 1, a( kp, k+1 ), lda )
405 a( k, k ) = a( kp, kp )
416 $
CALL zswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ), 1 )
417 CALL zswap( kp-k-1, a( k+1, k ), 1, a( kp, k+1 ), lda )
420 a( k, k ) = a( kp, kp )
423 a( k, k-1 ) = a( kp, k-1 )
431 $
CALL zswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ), 1 )
432 CALL zswap( kp-k-1, a( k+1, k ), 1, a( kp, k+1 ), lda )
434 a( k, k ) = a( kp, kp )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zsymv(UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZSYMV computes a matrix-vector product for a complex symmetric matrix.
subroutine zsytri_rook(UPLO, N, A, LDA, IPIV, WORK, INFO)
ZSYTRI_ROOK