105 RECURSIVE SUBROUTINE cpotrf2( UPLO, N, A, LDA, INFO )
123 parameter( one = 1.0e+0, zero = 0.0e+0 )
125 parameter( cone = (1.0e+0, 0.0e+0) )
129 INTEGER N1, N2, IINFO
133 LOGICAL LSAME, SISNAN
134 EXTERNAL lsame, sisnan
140 INTRINSIC max,
REAL, SQRT
147 upper = lsame( uplo,
'U' )
148 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 150 ELSE IF( n.LT.0 )
THEN 152 ELSE IF( lda.LT.max( 1, n ) )
THEN 156 CALL xerbla(
'CPOTRF2', -info )
171 ajj =
REAL( A( 1, 1 ) )
172 IF( ajj.LE.zero.OR.sisnan( ajj ) )
THEN 179 a( 1, 1 ) = sqrt( ajj )
189 CALL cpotrf2( uplo, n1, a( 1, 1 ), lda, iinfo )
190 IF ( iinfo.NE.0 )
THEN 201 CALL ctrsm(
'L',
'U',
'C',
'N', n1, n2, cone,
202 $ a( 1, 1 ), lda, a( 1, n1+1 ), lda )
206 CALL cherk( uplo,
'C', n2, n1, -one, a( 1, n1+1 ), lda,
207 $ one, a( n1+1, n1+1 ), lda )
209 CALL cpotrf2( uplo, n2, a( n1+1, n1+1 ), lda, iinfo )
211 IF ( iinfo.NE.0 )
THEN 222 CALL ctrsm(
'R',
'L',
'C',
'N', n2, n1, cone,
223 $ a( 1, 1 ), lda, a( n1+1, 1 ), lda )
227 CALL cherk( uplo,
'N', n2, n1, -one, a( n1+1, 1 ), lda,
228 $ one, a( n1+1, n1+1 ), lda )
230 CALL cpotrf2( uplo, n2, a( n1+1, n1+1 ), lda, iinfo )
232 IF ( iinfo.NE.0 )
THEN subroutine cherk(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)
CHERK
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ctrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRSM
recursive subroutine cpotrf2(UPLO, N, A, LDA, INFO)
CPOTRF2