183 SUBROUTINE chetf2( UPLO, N, A, LDA, IPIV, INFO )
202 parameter( zero = 0.0e+0, one = 1.0e+0 )
204 parameter( eight = 8.0e+0, sevten = 17.0e+0 )
208 INTEGER I, IMAX, J, JMAX, K, KK, KP, KSTEP
209 REAL ABSAKK, ALPHA, COLMAX, D, D11, D22, R1, ROWMAX,
211 COMPLEX D12, D21, T, WK, WKM1, WKP1, ZDUM
214 LOGICAL LSAME, SISNAN
217 EXTERNAL lsame, icamax, slapy2, sisnan
223 INTRINSIC abs, aimag, cmplx, conjg, max, real, sqrt
229 cabs1( zdum ) = abs( real( zdum ) ) + abs( aimag( zdum ) )
236 upper = lsame( uplo,
'U' )
237 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
239 ELSE IF( n.LT.0 )
THEN
241 ELSE IF( lda.LT.max( 1, n ) )
THEN
245 CALL xerbla(
'CHETF2', -info )
251 alpha = ( one+sqrt( sevten ) ) / eight
272 absakk = abs( real( a( k, k ) ) )
279 imax = icamax( k-1, a( 1, k ), 1 )
280 colmax = cabs1( a( imax, k ) )
285 IF( (max( absakk, colmax ).EQ.zero) .OR.
286 $ sisnan(absakk) )
THEN
294 a( k, k ) = real( a( k, k ) )
296 IF( absakk.GE.alpha*colmax )
THEN
306 jmax = imax + icamax( k-imax, a( imax, imax+1 ), lda )
307 rowmax = cabs1( a( imax, jmax ) )
309 jmax = icamax( imax-1, a( 1, imax ), 1 )
310 rowmax = max( rowmax, cabs1( a( jmax, imax ) ) )
313 IF( absakk.GE.alpha*colmax*( colmax / rowmax ) )
THEN
318 ELSE IF( abs( real( a( imax, imax ) ) ).GE.alpha*rowmax )
341 CALL cswap( kp-1, a( 1, kk ), 1, a( 1, kp ), 1 )
342 DO 20 j = kp + 1, kk - 1
343 t = conjg( a( j, kk ) )
344 a( j, kk ) = conjg( a( kp, j ) )
347 a( kp, kk ) = conjg( a( kp, kk ) )
348 r1 = real( a( kk, kk ) )
349 a( kk, kk ) = real( a( kp, kp ) )
351 IF( kstep.EQ.2 )
THEN
352 a( k, k ) = real( a( k, k ) )
354 a( k-1, k ) = a( kp, k )
358 a( k, k ) = real( a( k, k ) )
360 $ a( k-1, k-1 ) = real( a( k-1, k-1 ) )
365 IF( kstep.EQ.1 )
THEN
377 r1 = one / real( a( k, k ) )
378 CALL cher( uplo, k-1, -r1, a( 1, k ), 1, a, lda )
382 CALL csscal( k-1, r1, a( 1, k ), 1 )
399 d = slapy2( real( a( k-1, k ) ),
400 $ aimag( a( k-1, k ) ) )
401 d22 = real( a( k-1, k-1 ) ) / d
402 d11 = real( a( k, k ) ) / d
403 tt = one / ( d11*d22-one )
404 d12 = a( k-1, k ) / d
407 DO 40 j = k - 2, 1, -1
408 wkm1 = d*( d11*a( j, k-1 )-conjg( d12 )*a( j, k ) )
409 wk = d*( d22*a( j, k )-d12*a( j, k-1 ) )
411 a( i, j ) = a( i, j ) - a( i, k )*conjg( wk ) -
412 $ a( i, k-1 )*conjg( wkm1 )
416 a( j, j ) = cmplx( real( a( j, j ) ), 0.0e+0 )
426 IF( kstep.EQ.1 )
THEN
457 absakk = abs( real( a( k, k ) ) )
464 imax = k + icamax( n-k, a( k+1, k ), 1 )
465 colmax = cabs1( a( imax, k ) )
470 IF( (max( absakk, colmax ).EQ.zero) .OR.
471 $ sisnan(absakk) )
THEN
479 a( k, k ) = real( a( k, k ) )
481 IF( absakk.GE.alpha*colmax )
THEN
491 jmax = k - 1 + icamax( imax-k, a( imax, k ), lda )
492 rowmax = cabs1( a( imax, jmax ) )
494 jmax = imax + icamax( n-imax, a( imax+1, imax ),
496 rowmax = max( rowmax, cabs1( a( jmax, imax ) ) )
499 IF( absakk.GE.alpha*colmax*( colmax / rowmax ) )
THEN
504 ELSE IF( abs( real( a( imax, imax ) ) ).GE.alpha*rowmax )
528 $
CALL cswap( n-kp, a( kp+1, kk ), 1, a( kp+1, kp ),
530 DO 60 j = kk + 1, kp - 1
531 t = conjg( a( j, kk ) )
532 a( j, kk ) = conjg( a( kp, j ) )
535 a( kp, kk ) = conjg( a( kp, kk ) )
536 r1 = real( a( kk, kk ) )
537 a( kk, kk ) = real( a( kp, kp ) )
539 IF( kstep.EQ.2 )
THEN
540 a( k, k ) = real( a( k, k ) )
542 a( k+1, k ) = a( kp, k )
546 a( k, k ) = real( a( k, k ) )
548 $ a( k+1, k+1 ) = real( a( k+1, k+1 ) )
553 IF( kstep.EQ.1 )
THEN
567 r1 = one / real( a( k, k ) )
568 CALL cher( uplo, n-k, -r1, a( k+1, k ), 1,
569 $ a( k+1, k+1 ), lda )
573 CALL csscal( n-k, r1, a( k+1, k ), 1 )
589 d = slapy2( real( a( k+1, k ) ),
590 $ aimag( a( k+1, k ) ) )
591 d11 = real( a( k+1, k+1 ) ) / d
592 d22 = real( a( k, k ) ) / d
593 tt = one / ( d11*d22-one )
594 d21 = a( k+1, k ) / d
598 wk = d*( d11*a( j, k )-d21*a( j, k+1 ) )
599 wkp1 = d*( d22*a( j, k+1 )-conjg( d21 )*a( j, k ) )
601 a( i, j ) = a( i, j ) - a( i, k )*conjg( wk ) -
602 $ a( i, k+1 )*conjg( wkp1 )
606 a( j, j ) = cmplx( real( a( j, j ) ), 0.0e+0 )
614 IF( kstep.EQ.1 )
THEN