127 SUBROUTINE chetri_rook( UPLO, N, A, LDA, IPIV, WORK, INFO )
139 COMPLEX A( lda, * ), WORK( * )
147 parameter( one = 1.0e+0, cone = ( 1.0e+0, 0.0e+0 ),
148 $ czero = ( 0.0e+0, 0.0e+0 ) )
152 INTEGER J, K, KP, KSTEP
159 EXTERNAL lsame, cdotc
165 INTRINSIC abs, conjg, max, real
172 upper = lsame( uplo,
'U' )
173 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 175 ELSE IF( n.LT.0 )
THEN 177 ELSE IF( lda.LT.max( 1, n ) )
THEN 181 CALL xerbla(
'CHETRI_ROOK', -info )
196 DO 10 info = n, 1, -1
197 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.czero )
205 IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.czero )
226 IF( ipiv( k ).GT.0 )
THEN 232 a( k, k ) = one /
REAL( A( K, K ) )
237 CALL ccopy( k-1, a( 1, k ), 1, work, 1 )
238 CALL chemv( uplo, k-1, -cone, a, lda, work, 1, czero,
240 a( k, k ) = a( k, k ) -
REAL( CDOTC( K-1, WORK, 1, A( 1,
$ K ), 1 ) 249 t = abs( a( k, k+1 ) )
250 ak =
REAL( A( K, K ) ) / T
251 akp1 =
REAL( A( K+1, K+1 ) ) / T
252 akkp1 = a( k, k+1 ) / t
253 d = t*( ak*akp1-one )
255 a( k+1, k+1 ) = ak / d
256 a( k, k+1 ) = -akkp1 / d
261 CALL ccopy( k-1, a( 1, k ), 1, work, 1 )
262 CALL chemv( uplo, k-1, -cone, a, lda, work, 1, czero,
264 a( k, k ) = a( k, k ) -
REAL( CDOTC( K-1, WORK, 1, A( 1,
$ K ), 1 ) 267 CALL ccopy( k-1, a( 1, k+1 ), 1, work, 1 )
268 CALL chemv( uplo, k-1, -cone, a, lda, work, 1, czero,
270 a( k+1, k+1 ) = a( k+1, k+1 ) -
271 $
REAL( CDOTC( K-1, WORK, 1, A( 1, K+1 ),
$ 1 ) 276 IF( kstep.EQ.1 )
THEN 285 $
CALL cswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
287 DO 40 j = kp + 1, k - 1
288 temp = conjg( a( j, k ) )
289 a( j, k ) = conjg( a( kp, j ) )
293 a( kp, k ) = conjg( a( kp, k ) )
296 a( k, k ) = a( kp, kp )
310 $
CALL cswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
312 DO 50 j = kp + 1, k - 1
313 temp = conjg( a( j, k ) )
314 a( j, k ) = conjg( a( kp, j ) )
318 a( kp, k ) = conjg( a( kp, k ) )
321 a( k, k ) = a( kp, kp )
325 a( k, k+1 ) = a( kp, k+1 )
336 $
CALL cswap( kp-1, a( 1, k ), 1, a( 1, kp ), 1 )
338 DO 60 j = kp + 1, k - 1
339 temp = conjg( a( j, k ) )
340 a( j, k ) = conjg( a( kp, j ) )
344 a( kp, k ) = conjg( a( kp, k ) )
347 a( k, k ) = a( kp, kp )
371 IF( ipiv( k ).GT.0 )
THEN 377 a( k, k ) = one /
REAL( A( K, K ) )
382 CALL ccopy( n-k, a( k+1, k ), 1, work, 1 )
383 CALL chemv( uplo, n-k, -cone, a( k+1, k+1 ), lda, work,
384 $ 1, czero, a( k+1, k ), 1 )
385 a( k, k ) = a( k, k ) -
REAL( CDOTC( N-K, WORK, 1,
$ A( K+1, K ), 1 ) 394 t = abs( a( k, k-1 ) )
395 ak =
REAL( A( K-1, K-1 ) ) / T
396 akp1 =
REAL( A( K, K ) ) / T
397 akkp1 = a( k, k-1 ) / t
398 d = t*( ak*akp1-one )
399 a( k-1, k-1 ) = akp1 / d
401 a( k, k-1 ) = -akkp1 / d
406 CALL ccopy( n-k, a( k+1, k ), 1, work, 1 )
407 CALL chemv( uplo, n-k, -cone, a( k+1, k+1 ), lda, work,
408 $ 1, czero, a( k+1, k ), 1 )
409 a( k, k ) = a( k, k ) -
REAL( CDOTC( N-K, WORK, 1,
$ A( K+1, K ), 1 ) 413 CALL ccopy( n-k, a( k+1, k-1 ), 1, work, 1 )
414 CALL chemv( uplo, n-k, -cone, a( k+1, k+1 ), lda, work,
415 $ 1, czero, a( k+1, k-1 ), 1 )
416 a( k-1, k-1 ) = a( k-1, k-1 ) -
417 $
REAL( CDOTC( N-K, WORK, 1, A( K+1, K-1 ),
$ 1 ) 422 IF( kstep.EQ.1 )
THEN 431 $
CALL cswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ), 1 )
433 DO 90 j = k + 1, kp - 1
434 temp = conjg( a( j, k ) )
435 a( j, k ) = conjg( a( kp, j ) )
439 a( kp, k ) = conjg( a( kp, k ) )
442 a( k, k ) = a( kp, kp )
456 $
CALL cswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ), 1 )
458 DO 100 j = k + 1, kp - 1
459 temp = conjg( a( j, k ) )
460 a( j, k ) = conjg( a( kp, j ) )
464 a( kp, k ) = conjg( a( kp, k ) )
467 a( k, k ) = a( kp, kp )
471 a( k, k-1 ) = a( kp, k-1 )
482 $
CALL cswap( n-kp, a( kp+1, k ), 1, a( kp+1, kp ), 1 )
484 DO 110 j = k + 1, kp - 1
485 temp = conjg( a( j, k ) )
486 a( j, k ) = conjg( a( kp, j ) )
490 a( kp, k ) = conjg( a( kp, k ) )
493 a( k, k ) = a( kp, kp )
508 subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine chetri_rook(UPLO, N, A, LDA, IPIV, WORK, INFO)
CHETRI_ROOK computes the inverse of HE matrix using the factorization obtained with the bounded Bunch...
subroutine chemv(UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CHEMV