190 SUBROUTINE csytf2( UPLO, N, A, LDA, IPIV, INFO )
209 parameter( zero = 0.0e+0, one = 1.0e+0 )
211 parameter( eight = 8.0e+0, sevten = 17.0e+0 )
213 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
217 INTEGER I, IMAX, J, JMAX, K, KK, KP, KSTEP
218 REAL ABSAKK, ALPHA, COLMAX, ROWMAX
219 COMPLEX D11, D12, D21, D22, R1, T, WK, WKM1, WKP1, Z
222 LOGICAL LSAME, SISNAN
224 EXTERNAL lsame, icamax, sisnan
230 INTRINSIC abs, aimag, max,
REAL, SQRT
236 cabs1( z ) = abs(
REAL( Z ) ) + abs( AIMAG( z ) )
243 upper = lsame( uplo,
'U' )
244 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 246 ELSE IF( n.LT.0 )
THEN 248 ELSE IF( lda.LT.max( 1, n ) )
THEN 252 CALL xerbla(
'CSYTF2', -info )
258 alpha = ( one+sqrt( sevten ) ) / eight
279 absakk = cabs1( a( k, k ) )
286 imax = icamax( k-1, a( 1, k ), 1 )
287 colmax = cabs1( a( imax, k ) )
292 IF( max( absakk, colmax ).EQ.zero .OR. sisnan(absakk) )
THEN 301 IF( absakk.GE.alpha*colmax )
THEN 311 jmax = imax + icamax( k-imax, a( imax, imax+1 ), lda )
312 rowmax = cabs1( a( imax, jmax ) )
314 jmax = icamax( imax-1, a( 1, imax ), 1 )
315 rowmax = max( rowmax, cabs1( a( jmax, imax ) ) )
318 IF( absakk.GE.alpha*colmax*( colmax / rowmax ) )
THEN 323 ELSE IF( cabs1( a( imax, imax ) ).GE.alpha*rowmax )
THEN 345 CALL cswap( kp-1, a( 1, kk ), 1, a( 1, kp ), 1 )
346 CALL cswap( kk-kp-1, a( kp+1, kk ), 1, a( kp, kp+1 ),
349 a( kk, kk ) = a( kp, kp )
351 IF( kstep.EQ.2 )
THEN 353 a( k-1, k ) = a( kp, k )
360 IF( kstep.EQ.1 )
THEN 372 r1 = cone / a( k, k )
373 CALL csyr( uplo, k-1, -r1, a( 1, k ), 1, a, lda )
377 CALL cscal( k-1, r1, a( 1, k ), 1 )
395 d22 = a( k-1, k-1 ) / d12
396 d11 = a( k, k ) / d12
397 t = cone / ( d11*d22-cone )
400 DO 30 j = k - 2, 1, -1
401 wkm1 = d12*( d11*a( j, k-1 )-a( j, k ) )
402 wk = d12*( d22*a( j, k )-a( j, k-1 ) )
404 a( i, j ) = a( i, j ) - a( i, k )*wk -
418 IF( kstep.EQ.1 )
THEN 449 absakk = cabs1( a( k, k ) )
456 imax = k + icamax( n-k, a( k+1, k ), 1 )
457 colmax = cabs1( a( imax, k ) )
462 IF( max( absakk, colmax ).EQ.zero .OR. sisnan(absakk) )
THEN 471 IF( absakk.GE.alpha*colmax )
THEN 481 jmax = k - 1 + icamax( imax-k, a( imax, k ), lda )
482 rowmax = cabs1( a( imax, jmax ) )
484 jmax = imax + icamax( n-imax, a( imax+1, imax ), 1 )
485 rowmax = max( rowmax, cabs1( a( jmax, imax ) ) )
488 IF( absakk.GE.alpha*colmax*( colmax / rowmax ) )
THEN 493 ELSE IF( cabs1( a( imax, imax ) ).GE.alpha*rowmax )
THEN 516 $
CALL cswap( n-kp, a( kp+1, kk ), 1, a( kp+1, kp ), 1 )
517 CALL cswap( kp-kk-1, a( kk+1, kk ), 1, a( kp, kk+1 ),
520 a( kk, kk ) = a( kp, kp )
522 IF( kstep.EQ.2 )
THEN 524 a( k+1, k ) = a( kp, k )
531 IF( kstep.EQ.1 )
THEN 545 r1 = cone / a( k, k )
546 CALL csyr( uplo, n-k, -r1, a( k+1, k ), 1,
547 $ a( k+1, k+1 ), lda )
551 CALL cscal( n-k, r1, a( k+1, k ), 1 )
568 d11 = a( k+1, k+1 ) / d21
569 d22 = a( k, k ) / d21
570 t = cone / ( d11*d22-cone )
574 wk = d21*( d11*a( j, k )-a( j, k+1 ) )
575 wkp1 = d21*( d22*a( j, k+1 )-a( j, k ) )
577 a( i, j ) = a( i, j ) - a( i, k )*wk -
589 IF( kstep.EQ.1 )
THEN subroutine csytf2(UPLO, N, A, LDA, IPIV, INFO)
CSYTF2 computes the factorization of a real symmetric indefinite matrix, using the diagonal pivoting ...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cscal(N, CA, CX, INCX)
CSCAL
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine csyr(UPLO, N, ALPHA, X, INCX, A, LDA)
CSYR performs the symmetric rank-1 update of a complex symmetric matrix.