158 SUBROUTINE chptrf( UPLO, N, AP, IPIV, INFO )
177 parameter( zero = 0.0e+0, one = 1.0e+0 )
179 parameter( eight = 8.0e+0, sevten = 17.0e+0 )
183 INTEGER I, IMAX, J, JMAX, K, KC, KK, KNC, KP, KPC,
185 REAL ABSAKK, ALPHA, COLMAX, D, D11, D22, R1, ROWMAX,
187 COMPLEX , D21, , WK, WKM1, WKP1, ZDUM
193 EXTERNAL lsame, icamax, slapy2
199 INTRINSIC abs, aimag,
cmplx, conjg,
max, real, sqrt
205 cabs1( zdum ) = abs( real( zdum ) ) + abs( aimag( zdum ) )
212 upper = lsame( uplo,
'U' )
213 IF( .NOT.upper .AND. .NOT.lsame( uplo, 'l
' ) ) THEN
215.LT.
ELSE IF( N0 ) THEN
219 CALL XERBLA( 'chptrf', -INFO )
225 ALPHA = ( ONE+SQRT( SEVTEN ) ) / EIGHT
235 KC = ( N-1 )*N / 2 + 1
248 ABSAKK = ABS( REAL( AP( KC+K-1 ) ) )
254 IMAX = ICAMAX( K-1, AP( KC ), 1 )
255 COLMAX = CABS1( AP( KC+IMAX-1 ) )
260.EQ.
IF( MAX( ABSAKK, COLMAX )ZERO ) THEN
267 AP( KC+K-1 ) = REAL( AP( KC+K-1 ) )
269.GE.
IF( ABSAKKALPHA*COLMAX ) THEN
281 KX = IMAX*( IMAX+1 ) / 2 + IMAX
282 DO 20 J = IMAX + 1, K
283.GT.
IF( CABS1( AP( KX ) )ROWMAX ) THEN
284 ROWMAX = CABS1( AP( KX ) )
289 KPC = ( IMAX-1 )*IMAX / 2 + 1
291 JMAX = ICAMAX( IMAX-1, AP( KPC ), 1 )
292 ROWMAX = MAX( ROWMAX, CABS1( AP( KPC+JMAX-1 ) ) )
295.GE.
IF( ABSAKKALPHA*COLMAX*( COLMAX / ROWMAX ) ) THEN
300.GE.
ELSE IF( ABS( REAL( AP( KPC+IMAX-1 ) ) )ALPHA*
325 CALL CSWAP( KP-1, AP( KNC ), 1, AP( KPC ), 1 )
327 DO 30 J = KP + 1, KK - 1
329 T = CONJG( AP( KNC+J-1 ) )
330 AP( KNC+J-1 ) = CONJG( AP( KX ) )
333 AP( KX+KK-1 ) = CONJG( AP( KX+KK-1 ) )
334 R1 = REAL( AP( KNC+KK-1 ) )
335 AP( KNC+KK-1 ) = REAL( AP( KPC+KP-1 ) )
337.EQ.
IF( KSTEP2 ) THEN
338 AP( KC+K-1 ) = REAL( AP( KC+K-1 ) )
340 AP( KC+K-2 ) = AP( KC+KP-1 )
344 AP( KC+K-1 ) = REAL( AP( KC+K-1 ) )
346 $ AP( KC-1 ) = REAL( AP( KC-1 ) )
351.EQ.
IF( KSTEP1 ) THEN
363 R1 = ONE / REAL( AP( KC+K-1 ) )
364 CALL CHPR( UPLO, K-1, -R1, AP( KC ), 1, AP )
368 CALL CSSCAL( K-1, R1, AP( KC ), 1 )
385 D = SLAPY2( REAL( AP( K-1+( K-1 )*K / 2 ) ),
386 $ AIMAG( AP( K-1+( K-1 )*K / 2 ) ) )
387 D22 = REAL( AP( K-1+( K-2 )*( K-1 ) / 2 ) ) / D
388 D11 = REAL( AP( K+( K-1 )*K / 2 ) ) / D
389 TT = ONE / ( D11*D22-ONE )
390 D12 = AP( K-1+( K-1 )*K / 2 ) / D
393 DO 50 J = K - 2, 1, -1
394 WKM1 = D*( D11*AP( J+( K-2 )*( K-1 ) / 2 )-
395 $ CONJG( D12 )*AP( J+( K-1 )*K / 2 ) )
396 WK = D*( D22*AP( J+( K-1 )*K / 2 )-D12*
397 $ AP( J+( K-2 )*( K-1 ) / 2 ) )
399 AP( I+( J-1 )*J / 2 ) = AP( I+( J-1 )*J / 2 ) -
400 $ AP( I+( K-1 )*K / 2 )*CONJG( WK ) -
401 $ AP( I+( K-2 )*( K-1 ) / 2 )*CONJG( WKM1 )
403 AP( J+( K-1 )*K / 2 ) = WK
404 AP( J+( K-2 )*( K-1 ) / 2 ) = WKM1
405 AP( J+( J-1 )*J / 2 ) = CMPLX( REAL( AP( J+( J-1 )*
406 $ J / 2 ) ), 0.0E+0 )
416.EQ.
IF( KSTEP1 ) THEN
451 ABSAKK = ABS( REAL( AP( KC ) ) )
457 IMAX = K + ICAMAX( N-K, AP( KC+1 ), 1 )
458 COLMAX = CABS1( AP( KC+IMAX-K ) )
463.EQ.
IF( MAX( ABSAKK, COLMAX )ZERO ) THEN
470 AP( KC ) = REAL( AP( KC ) )
472.GE.
IF( ABSAKKALPHA*COLMAX ) THEN
484 DO 70 J = K, IMAX - 1
485.GT.
IF( CABS1( AP( KX ) )ROWMAX ) THEN
486 ROWMAX = CABS1( AP( KX ) )
491 KPC = NPP - ( N-IMAX+1 )*( N-IMAX+2 ) / 2 + 1
493 JMAX = IMAX + ICAMAX( N-IMAX, AP( KPC+1 ), 1 )
494 ROWMAX = MAX( ROWMAX, CABS1( AP( KPC+JMAX-IMAX ) ) )
497.GE.
IF( ABSAKKALPHA*COLMAX*( COLMAX / ROWMAX ) ) THEN
502.GE.
ELSE IF( ABS( REAL( AP( KPC ) ) )ALPHA*ROWMAX ) THEN
520 $ KNC = KNC + N - K + 1
527 $ CALL CSWAP( N-KP, AP( KNC+KP-KK+1 ), 1, AP( KPC+1 ),
530 DO 80 J = KK + 1, KP - 1
532 T = CONJG( AP( KNC+J-KK ) )
533 AP( KNC+J-KK ) = CONJG( AP( KX ) )
536 AP( KNC+KP-KK ) = CONJG( AP( KNC+KP-KK ) )
537 R1 = REAL( AP( KNC ) )
538 AP( KNC ) = REAL( AP( KPC ) )
540.EQ.
IF( KSTEP2 ) THEN
541 AP( KC ) = REAL( AP( KC ) )
543 AP( KC+1 ) = AP( KC+KP-K )
547 AP( KC ) = REAL( AP( KC ) )
549 $ AP( KNC ) = REAL( AP( KNC ) )
554.EQ.
IF( KSTEP1 ) THEN
568 R1 = ONE / REAL( AP( KC ) )
569 CALL CHPR( UPLO, N-K, -R1, AP( KC+1 ), 1,
574 CALL CSSCAL( N-K, R1, AP( KC+1 ), 1 )
595 D = SLAPY2( REAL( AP( K+1+( K-1 )*( 2*N-K ) / 2 ) ),
596 $ AIMAG( AP( K+1+( K-1 )*( 2*N-K ) / 2 ) ) )
597 D11 = REAL( AP( K+1+K*( 2*N-K-1 ) / 2 ) ) / D
598 D22 = REAL( AP( K+( K-1 )*( 2*N-K ) / 2 ) ) / D
599 TT = ONE / ( D11*D22-ONE )
600 D21 = AP( K+1+( K-1 )*( 2*N-K ) / 2 ) / D
604 WK = D*( D11*AP( J+( K-1 )*( 2*N-K ) / 2 )-D21*
605 $ AP( J+K*( 2*N-K-1 ) / 2 ) )
606 WKP1 = D*( D22*AP( J+K*( 2*N-K-1 ) / 2 )-
607 $ CONJG( D21 )*AP( J+( K-1 )*( 2*N-K ) / 2 ) )
609 AP( I+( J-1 )*( 2*N-J ) / 2 ) = AP( I+( J-1 )*
610 $ ( 2*N-J ) / 2 ) - AP( I+( K-1 )*( 2*N-K ) /
611 $ 2 )*CONJG( WK ) - AP( I+K*( 2*N-K-1 ) / 2 )*
614 AP( J+( K-1 )*( 2*N-K ) / 2 ) = WK
615 AP( J+K*( 2*N-K-1 ) / 2 ) = WKP1
616 AP( J+( J-1 )*( 2*N-J ) / 2 )
617 $ = CMPLX( REAL( AP( J+( J-1 )*( 2*N-J ) / 2 ) ),
626.EQ.
IF( KSTEP1 ) THEN
subroutine chpr(uplo, n, alpha, x, incx, ap)
CHPR