140 SUBROUTINE spstf2( UPLO, N, A, LDA, PIV, RANK, TOL, WORK, INFO )
148 INTEGER INFO, LDA, N, RANK
152 REAL A( LDA, * ), WORK( 2*N )
160 parameter( one = 1.0e+0, zero = 0.0e+0 )
163 REAL AJJ, SSTOP, STEMP
164 INTEGER I, ITEMP, J, PVT
169 LOGICAL LSAME, SISNAN
170 EXTERNAL slamch, lsame, sisnan
176 INTRINSIC max, sqrt, maxloc
183 upper = lsame( uplo,
'U' )
184 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
186 ELSE IF( n.LT.0 )
THEN
188 ELSE IF( lda.LT.
max( 1, n ) )
THEN
192 CALL xerbla(
'SPSTF2', -info )
212 IF( a( i, i ).GT.ajj )
THEN
217 IF( ajj.LE.zero.OR.sisnan( ajj ) )
THEN
225 IF( tol.LT.zero )
THEN
226 sstop = n * slamch( 'epsilon
' ) * AJJ
250 WORK( I ) = WORK( I ) + A( J-1, I )**2
252 WORK( N+I ) = A( I, I ) - WORK( I )
257 ITEMP = MAXLOC( WORK( (N+J):(2*N) ), 1 )
260.LE..OR.
IF( AJJSSTOPSISNAN( AJJ ) ) THEN
270 A( PVT, PVT ) = A( J, J )
271 CALL SSWAP( J-1, A( 1, J ), 1, A( 1, PVT ), 1 )
273 $ CALL SSWAP( N-PVT, A( J, PVT+1 ), LDA,
274 $ A( PVT, PVT+1 ), LDA )
275 CALL SSWAP( PVT-J-1, A( J, J+1 ), LDA, A( J+1, PVT ), 1 )
280 WORK( J ) = WORK( PVT )
283 PIV( PVT ) = PIV( J )
293 CALL SGEMV( 'trans
', J-1, N-J, -ONE, A( 1, J+1 ), LDA,
294 $ A( 1, J ), 1, ONE, A( J, J+1 ), LDA )
295 CALL SSCAL( N-J, ONE / AJJ, A( J, J+1 ), LDA )
313 WORK( I ) = WORK( I ) + A( I, J-1 )**2
315 WORK( N+I ) = A( I, I ) - WORK( I )
320 ITEMP = MAXLOC( WORK( (N+J):(2*N) ), 1 )
323.LE..OR.
IF( AJJSSTOPSISNAN( AJJ ) ) THEN
333 A( PVT, PVT ) = A( J, J )
334 CALL SSWAP( J-1, A( J, 1 ), LDA, A( PVT, 1 ), LDA )
336 $ CALL SSWAP( N-PVT, A( PVT+1, J ), 1, A( PVT+1, PVT ),
338 CALL SSWAP( PVT-J-1, A( J+1, J ), 1, A( PVT, J+1 ), LDA )
343 WORK( J ) = WORK( PVT )
346 PIV( PVT ) = PIV( J )
356 CALL SGEMV( 'no trans
', N-J, J-1, -ONE, A( J+1, 1 ), LDA,
357 $ A( J, 1 ), LDA, ONE, A( J+1, J ), 1 )
358 CALL SSCAL( N-J, ONE / AJJ, A( J+1, J ), 1 )
subroutine xerbla(srname, info)
XERBLA
subroutine spstf2(uplo, n, a, lda, piv, rank, tol, work, info)
SPSTF2 computes the Cholesky factorization with complete pivoting of a real symmetric positive semide...
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine sswap(n, sx, incx, sy, incy)
SSWAP
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV