141 SUBROUTINE cpstf2( UPLO, N, A, LDA, PIV, RANK, TOL, WORK, INFO )
149 INTEGER INFO, LDA, N, RANK
162 parameter( one = 1.0e+0, zero = 0.0e+0 )
164 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
168 REAL AJJ, SSTOP, STEMP
169 INTEGER I, ITEMP, J, PVT
174 LOGICAL LSAME, SISNAN
175 EXTERNAL slamch, lsame, sisnan
181 INTRINSIC conjg, max,
REAL, SQRT
188 upper = lsame( uplo,
'U' )
189 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 191 ELSE IF( n.LT.0 )
THEN 193 ELSE IF( lda.LT.max( 1, n ) )
THEN 197 CALL xerbla(
'CPSTF2', -info )
215 work( i ) =
REAL( A( I, I ) )
217 pvt = maxloc( work( 1:n ), 1 )
218 ajj =
REAL ( A( PVT, PVT ) )
219 IF( ajj.LE.zero.OR.sisnan( ajj ) )
THEN 227 IF( tol.LT.zero )
THEN 228 sstop = n * slamch(
'Epsilon' ) * ajj
252 work( i ) = work( i ) +
253 $
REAL( CONJG( A( J-1, I ) )*
256 work( n+i ) =
REAL( A( I, I ) ) - WORK( i )
261 itemp = maxloc( work( (n+j):(2*n) ), 1 )
264 IF( ajj.LE.sstop.OR.sisnan( ajj ) )
THEN 274 a( pvt, pvt ) = a( j, j )
275 CALL cswap( j-1, a( 1, j ), 1, a( 1, pvt ), 1 )
277 $
CALL cswap( n-pvt, a( j, pvt+1 ), lda,
278 $ a( pvt, pvt+1 ), lda )
279 DO 140 i = j + 1, pvt - 1
280 ctemp = conjg( a( j, i ) )
281 a( j, i ) = conjg( a( i, pvt ) )
284 a( j, pvt ) = conjg( a( j, pvt ) )
289 work( j ) = work( pvt )
292 piv( pvt ) = piv( j )
302 CALL clacgv( j-1, a( 1, j ), 1 )
303 CALL cgemv(
'Trans', j-1, n-j, -cone, a( 1, j+1 ), lda,
304 $ a( 1, j ), 1, cone, a( j, j+1 ), lda )
305 CALL clacgv( j-1, a( 1, j ), 1 )
306 CALL csscal( n-j, one / ajj, a( j, j+1 ), lda )
324 work( i ) = work( i ) +
325 $
REAL( CONJG( A( I, J-1 ) )*
328 work( n+i ) =
REAL( A( I, I ) ) - WORK( i )
333 itemp = maxloc( work( (n+j):(2*n) ), 1 )
336 IF( ajj.LE.sstop.OR.sisnan( ajj ) )
THEN 346 a( pvt, pvt ) = a( j, j )
347 CALL cswap( j-1, a( j, 1 ), lda, a( pvt, 1 ), lda )
349 $
CALL cswap( n-pvt, a( pvt+1, j ), 1, a( pvt+1, pvt ),
351 DO 170 i = j + 1, pvt - 1
352 ctemp = conjg( a( i, j ) )
353 a( i, j ) = conjg( a( pvt, i ) )
356 a( pvt, j ) = conjg( a( pvt, j ) )
361 work( j ) = work( pvt )
364 piv( pvt ) = piv( j )
374 CALL clacgv( j-1, a( j, 1 ), lda )
375 CALL cgemv(
'No Trans', n-j, j-1, -cone, a( j+1, 1 ),
376 $ lda, a( j, 1 ), lda, cone, a( j+1, j ), 1 )
377 CALL clacgv( j-1, a( j, 1 ), lda )
378 CALL csscal( n-j, one / ajj, a( j+1, j ), 1 )
subroutine cgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CGEMV
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine csscal(N, SA, CX, INCX)
CSSCAL
subroutine cpstf2(UPLO, N, A, LDA, PIV, RANK, TOL, WORK, INFO)
CPSTF2 computes the Cholesky factorization with complete pivoting of complex Hermitian positive semid...
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine clacgv(N, X, INCX)
CLACGV conjugates a complex vector.