115 SUBROUTINE zsytri( UPLO, N, A, LDA, IPIV, WORK, INFO )
128 COMPLEX*16 A( lda, * ), WORK( * )
135 parameter ( one = ( 1.0d+0, 0.0d+0 ),
136 $ zero = ( 0.0d+0, 0.0d+0 ) )
141 COMPLEX*16 AK, AKKP1, AKP1, D, T, TEMP
146 EXTERNAL lsame, zdotu
159 upper = lsame( uplo,
'U' )
160 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
162 ELSE IF( n.LT.0 )
THEN
164 ELSE IF( lda.LT.max( 1, n ) )
THEN
168 CALL xerbla(
'ZSYTRI', -info )
183 DO 10 info = n, 1, -1
184 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.zero )
192 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.zero )
213 IF( ipiv( k ).GT.0 )
THEN
219 a( k, k ) = one / a( k, k )
224 CALL zcopy( k-1, a( 1, k ), 1, work, 1 )
225 CALL zsymv( uplo, k-1, -one, a, lda, work, 1, zero,
227 a( k, k ) = a( k, k ) - zdotu( k-1, work, 1, a( 1, k ),
239 akp1 = a( k+1, k+1 ) / t
240 akkp1 = a( k, k+1 ) / t
241 d = t*( ak*akp1-one )
243 a( k+1, k+1 ) = ak / d
244 a( k, k+1 ) = -akkp1 / d
249 CALL zcopy( k-1, a( 1, k ), 1, work, 1 )
250 CALL zsymv( uplo, k-1, -one, a, lda, work, 1, zero,
252 a( k, k ) = a( k, k ) - zdotu( k-1, work, 1, a( 1, k ),
254 a( k, k+1 ) = a( k, k+1 ) -
255 $ zdotu( k-1, a( 1, k ), 1, a( 1, k+1 ), 1 )
256 CALL zcopy( k-1, a( 1, k+1 ), 1, work, 1 )
257 CALL zsymv( uplo, k-1, -one, a, lda, work, 1, zero,
259 a( k+1, k+1 ) = a( k+1, k+1 ) -
260 $ zdotu( k-1, work, 1, a( 1, k+1 ), 1 )
265 kp = abs( ipiv( k ) )
271 CALL zswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
272 CALL zswap( k-kp-1, a( kp+1, k ), 1, a( kp, kp+1 ), lda )
274 a( k, k ) = a( kp, kp )
276 IF( kstep.EQ.2 )
THEN
278 a( k, k+1 ) = a( kp, k+1 )
302 IF( ipiv( k ).GT.0 )
THEN
308 a( k, k ) = one / a( k, k )
313 CALL zcopy( n-k, a( k+1, k ), 1, work, 1 )
314 CALL zsymv( uplo, n-k, -one, a( k+1, k+1 ), lda, work, 1,
315 $ zero, a( k+1, k ), 1 )
316 a( k, k ) = a( k, k ) - zdotu( n-k, work, 1, a( k+1, k ),
327 ak = a( k-1, k-1 ) / t
329 akkp1 = a( k, k-1 ) / t
330 d = t*( ak*akp1-one )
331 a( k-1, k-1 ) = akp1 / d
333 a( k, k-1 ) = -akkp1 / d
338 CALL zcopy( n-k, a( k+1, k ), 1, work, 1 )
339 CALL zsymv( uplo, n-k, -one, a( k+1, k+1 ), lda, work, 1,
340 $ zero, a( k+1, k ), 1 )
341 a( k, k ) = a( k, k ) - zdotu( n-k, work, 1, a( k+1, k ),
343 a( k, k-1 ) = a( k, k-1 ) -
344 $ zdotu( n-k, a( k+1, k ), 1, a( k+1, k-1 ),
346 CALL zcopy( n-k, a( k+1, k-1 ), 1, work, 1 )
347 CALL zsymv( uplo, n-k, -one, a( k+1, k+1 ), lda, work, 1,
348 $ zero, a( k+1, k-1 ), 1 )
349 a( k-1, k-1 ) = a( k-1, k-1 ) -
350 $ zdotu( n-k, work, 1, a( k+1, k-1 ), 1 )
355 kp = abs( ipiv( k ) )
362 $
CALL zswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ), 1 )
363 CALL zswap( kp-k-1, a( k+1, k ), 1, a( kp, k+1 ), lda )
365 a( k, k ) = a( kp, kp )
367 IF( kstep.EQ.2 )
THEN
369 a( k, k-1 ) = a( kp, k-1 )
subroutine zsytri(UPLO, N, A, LDA, IPIV, WORK, INFO)
ZSYTRI
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zsymv(UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZSYMV computes a matrix-vector product for a complex symmetric matrix.