154      SUBROUTINE ssptrf( UPLO, N, AP, IPIV, INFO )
 
  173      parameter( zero = 0.0e+0, one = 1.0e+0 )
 
  175      parameter( eight = 8.0e+0, sevten = 17.0e+0 )
 
  179      INTEGER            I, IMAX, J, JMAX, K, KC, KK, KNC, KP, KPC,
 
  181      REAL               ABSAKK, ALPHA, COLMAX, D11, D12, D21, D22, R1,
 
  182     $                   ROWMAX, T, WK, WKM1, WKP1
 
  187      EXTERNAL           lsame, isamax
 
  193      INTRINSIC          abs, max, sqrt
 
  200      upper = lsame( uplo, 
'U' )
 
  201      IF( .NOT.upper .AND. .NOT.lsame( uplo, 
'L' ) ) 
THEN 
  203      ELSE IF( n.LT.0 ) 
THEN 
  207         CALL xerbla( 
'SSPTRF', -info )
 
  213      alpha = ( one+sqrt( sevten ) ) / eight
 
  223         kc = ( n-1 )*n / 2 + 1
 
  236         absakk = abs( ap( kc+k-1 ) )
 
  242            imax = isamax( k-1, ap( kc ), 1 )
 
  243            colmax = abs( ap( kc+imax-1 ) )
 
  248         IF( max( absakk, colmax ).EQ.zero ) 
THEN 
  256            IF( absakk.GE.alpha*colmax ) 
THEN 
  265               kx = imax*( imax+1 ) / 2 + imax
 
  266               DO 20 j = imax + 1, k
 
  267                  IF( abs( ap( kx ) ).GT.rowmax ) 
THEN 
  268                     rowmax = abs( ap( kx ) )
 
  273               kpc = ( imax-1 )*imax / 2 + 1
 
  275                  jmax = isamax( imax-1, ap( kpc ), 1 )
 
  276                  rowmax = max( rowmax, abs( ap( kpc+jmax-1 ) ) )
 
  279               IF( absakk.GE.alpha*colmax*( colmax / rowmax ) ) 
THEN 
  284               ELSE IF( abs( ap( kpc+imax-1 ) ).GE.alpha*rowmax ) 
THEN 
  308               CALL sswap( kp-1, ap( knc ), 1, ap( kpc ), 1 )
 
  310               DO 30 j = kp + 1, kk - 1
 
  313                  ap( knc+j-1 ) = ap( kx )
 
  317               ap( knc+kk-1 ) = ap( kpc+kp-1 )
 
  319               IF( kstep.EQ.2 ) 
THEN 
  321                  ap( kc+k-2 ) = ap( kc+kp-1 )
 
  328            IF( kstep.EQ.1 ) 
THEN 
  340               r1 = one / ap( kc+k-1 )
 
  341               CALL sspr( uplo, k-1, -r1, ap( kc ), 1, ap )
 
  345               CALL sscal( k-1, r1, ap( kc ), 1 )
 
  362                  d12 = ap( k-1+( k-1 )*k / 2 )
 
  363                  d22 = ap( k-1+( k-2 )*( k-1 ) / 2 ) / d12
 
  364                  d11 = ap( k+( k-1 )*k / 2 ) / d12
 
  365                  t = one / ( d11*d22-one )
 
  368                  DO 50 j = k - 2, 1, -1
 
  369                     wkm1 = d12*( d11*ap( j+( k-2 )*( k-1 ) / 2 )-
 
  370     $                      ap( j+( k-1 )*k / 2 ) )
 
  371                     wk = d12*( d22*ap( j+( k-1 )*k / 2 )-
 
  372     $                    ap( j+( k-2 )*( k-1 ) / 2 ) )
 
  374                        ap( i+( j-1 )*j / 2 ) = ap( i+( j-1 )*j / 2 ) -
 
  375     $                     ap( i+( k-1 )*k / 2 )*wk -
 
  376     $                     ap( i+( k-2 )*( k-1 ) / 2 )*wkm1
 
  378                     ap( j+( k-1 )*k / 2 ) = wk
 
  379                     ap( j+( k-2 )*( k-1 ) / 2 ) = wkm1
 
  389         IF( kstep.EQ.1 ) 
THEN 
  424         absakk = abs( ap( kc ) )
 
  430            imax = k + isamax( n-k, ap( kc+1 ), 1 )
 
  431            colmax = abs( ap( kc+imax-k ) )
 
  436         IF( max( absakk, colmax ).EQ.zero ) 
THEN 
  444            IF( absakk.GE.alpha*colmax ) 
THEN 
  456               DO 70 j = k, imax - 1
 
  457                  IF( abs( ap( kx ) ).GT.rowmax ) 
THEN 
  458                     rowmax = abs( ap( kx ) )
 
  463               kpc = npp - ( n-imax+1 )*( n-imax+2 ) / 2 + 1
 
  465                  jmax = imax + isamax( n-imax, ap( kpc+1 ), 1 )
 
  466                  rowmax = max( rowmax, abs( ap( kpc+jmax-imax ) ) )
 
  469               IF( absakk.GE.alpha*colmax*( colmax / rowmax ) ) 
THEN 
  474               ELSE IF( abs( ap( kpc ) ).GE.alpha*rowmax ) 
THEN 
  492     $         knc = knc + n - k + 1
 
  499     $            
CALL sswap( n-kp, ap( knc+kp-kk+1 ), 1,
 
  503               DO 80 j = kk + 1, kp - 1
 
  506                  ap( knc+j-kk ) = ap( kx )
 
  510               ap( knc ) = ap( kpc )
 
  512               IF( kstep.EQ.2 ) 
THEN 
  514                  ap( kc+1 ) = ap( kc+kp-k )
 
  521            IF( kstep.EQ.1 ) 
THEN 
  536                  CALL sspr( uplo, n-k, -r1, ap( kc+1 ), 1,
 
  541                  CALL sscal( n-k, r1, ap( kc+1 ), 1 )
 
  562                  d21 = ap( k+1+( k-1 )*( 2*n-k ) / 2 )
 
  563                  d11 = ap( k+1+k*( 2*n-k-1 ) / 2 ) / d21
 
  564                  d22 = ap( k+( k-1 )*( 2*n-k ) / 2 ) / d21
 
  565                  t = one / ( d11*d22-one )
 
  569                     wk = d21*( d11*ap( j+( k-1 )*( 2*n-k ) / 2 )-
 
  570     $                    ap( j+k*( 2*n-k-1 ) / 2 ) )
 
  571                     wkp1 = d21*( d22*ap( j+k*( 2*n-k-1 ) / 2 )-
 
  572     $                      ap( j+( k-1 )*( 2*n-k ) / 2 ) )
 
  575                        ap( i+( j-1 )*( 2*n-j ) / 2 ) = ap( i+( j-1 )*
 
  576     $                     ( 2*n-j ) / 2 ) - ap( i+( k-1 )*( 2*n-k ) /
 
  577     $                     2 )*wk - ap( i+k*( 2*n-k-1 ) / 2 )*wkp1
 
  580                     ap( j+( k-1 )*( 2*n-k ) / 2 ) = wk
 
  581                     ap( j+k*( 2*n-k-1 ) / 2 ) = wkp1
 
  590         IF( kstep.EQ.1 ) 
THEN