138 DOUBLE PRECISION A( LDA, * ), WORK( * )
144 DOUBLE PRECISION ONE, ZERO
145 parameter( one = 1.0d+0, zero = 0.0d+0 )
150 DOUBLE PRECISION AK, AKKP1, AKP1, D, T, TEMP
154 DOUBLE PRECISION DDOT
168 upper = lsame( uplo,
'U' )
169 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
171 ELSE IF( n.LT.0 )
THEN
173 ELSE IF( lda.LT.max( 1, n ) )
THEN
177 CALL xerbla(
'DSYTRI_ROOK', -info )
192 DO 10 info = n, 1, -1
193 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.zero )
201 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.zero )
222 IF( ipiv( k ).GT.0 )
THEN
228 a( k, k ) = one / a( k, k )
233 CALL dcopy( k-1, a( 1, k ), 1, work, 1 )
234 CALL dsymv( uplo, k-1, -one, a, lda, work, 1, zero,
236 a( k, k ) = a( k, k ) - ddot( k-1, work, 1, a( 1, k ),
246 t = abs( a( k, k+1 ) )
248 akp1 = a( k+1, k+1 ) / t
249 akkp1 = a( k, k+1 ) / t
250 d = t*( ak*akp1-one )
252 a( k+1, k+1 ) = ak / d
253 a( k, k+1 ) = -akkp1 / d
258 CALL dcopy( k-1, a( 1, k ), 1, work, 1 )
259 CALL dsymv( uplo, k-1, -one, a, lda, work, 1, zero,
261 a( k, k ) = a( k, k ) - ddot( k-1, work, 1, a( 1, k ),
263 a( k, k+1 ) = a( k, k+1 ) -
264 $ ddot( k-1, a( 1, k ), 1, a( 1, k+1 ),
266 CALL dcopy( k-1, a( 1, k+1 ), 1, work, 1 )
267 CALL dsymv( uplo, k-1, -one, a, lda, work, 1, zero,
269 a( k+1, k+1 ) = a( k+1, k+1 ) -
270 $ ddot( k-1, work, 1, a( 1, k+1 ), 1 )
275 IF( kstep.EQ.1 )
THEN
283 $
CALL dswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
284 CALL dswap( k-kp-1, a( kp+1, k ), 1, a( kp, kp+1 ),
287 a( k, k ) = a( kp, kp )
298 $
CALL dswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
299 CALL dswap( k-kp-1, a( kp+1, k ), 1, a( kp, kp+1 ),
303 a( k, k ) = a( kp, kp )
306 a( k, k+1 ) = a( kp, k+1 )
314 $
CALL dswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
315 CALL dswap( k-kp-1, a( kp+1, k ), 1, a( kp, kp+1 ),
318 a( k, k ) = a( kp, kp )
342 IF( ipiv( k ).GT.0 )
THEN
348 a( k, k ) = one / a( k, k )
353 CALL dcopy( n-k, a( k+1, k ), 1, work, 1 )
354 CALL dsymv( uplo, n-k, -one, a( k+1, k+1 ), lda, work,
356 $ zero, a( k+1, k ), 1 )
357 a( k, k ) = a( k, k ) - ddot( n-k, work, 1, a( k+1,
368 t = abs( a( k, k-1 ) )
369 ak = a( k-1, k-1 ) / t
371 akkp1 = a( k, k-1 ) / t
372 d = t*( ak*akp1-one )
373 a( k-1, k-1 ) = akp1 / d
375 a( k, k-1 ) = -akkp1 / d
380 CALL dcopy( n-k, a( k+1, k ), 1, work, 1 )
381 CALL dsymv( uplo, n-k, -one, a( k+1, k+1 ), lda, work,
383 $ zero, a( k+1, k ), 1 )
384 a( k, k ) = a( k, k ) - ddot( n-k, work, 1, a( k+1,
387 a( k, k-1 ) = a( k, k-1 ) -
388 $ ddot( n-k, a( k+1, k ), 1, a( k+1,
391 CALL dcopy( n-k, a( k+1, k-1 ), 1, work, 1 )
392 CALL dsymv( uplo, n-k, -one, a( k+1, k+1 ), lda, work,
394 $ zero, a( k+1, k-1 ), 1 )
395 a( k-1, k-1 ) = a( k-1, k-1 ) -
396 $ ddot( n-k, work, 1, a( k+1, k-1 ), 1 )
401 IF( kstep.EQ.1 )
THEN
409 $
CALL dswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ),
411 CALL dswap( kp-k-1, a( k+1, k ), 1, a( kp, k+1 ),
414 a( k, k ) = a( kp, kp )
425 $
CALL dswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ),
427 CALL dswap( kp-k-1, a( k+1, k ), 1, a( kp, k+1 ),
431 a( k, k ) = a( kp, kp )
434 a( k, k-1 ) = a( kp, k-1 )
442 $
CALL dswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ),
444 CALL dswap( kp-k-1, a( k+1, k ), 1, a( kp, k+1 ),
447 a( k, k ) = a( kp, kp )