105 RECURSIVE SUBROUTINE dpotrf2( UPLO, N, A, LDA, INFO )
116 DOUBLE PRECISION a( lda, * )
122 DOUBLE PRECISION one, zero
123 parameter( one = 1.0d+0, zero = 0.0d+0 )
127 INTEGER n1, n2, iinfo
144 upper =
lsame( uplo,
'U' )
145 IF( .NOT.upper .AND. .NOT.
lsame( uplo,
'L' ) )
THEN
147 ELSE IF( n.LT.0 )
THEN
149 ELSE IF( lda.LT.max( 1, n ) )
THEN
153 CALL xerbla(
'DPOTRF2', -info )
168 IF( a( 1, 1 ).LE.zero.OR.
disnan( a( 1, 1 ) ) )
THEN
175 a( 1, 1 ) = sqrt( a( 1, 1 ) )
185 CALL dpotrf2( uplo, n1, a( 1, 1 ), lda, iinfo )
186 IF ( iinfo.NE.0 )
THEN
197 CALL dtrsm(
'L',
'U',
'T',
'N', n1, n2, one,
198 $ a( 1, 1 ), lda, a( 1, n1+1 ), lda )
202 CALL dsyrk( uplo,
'T', n2, n1, -one, a( 1, n1+1 ), lda,
203 $ one, a( n1+1, n1+1 ), lda )
204 CALL dpotrf2( uplo, n2, a( n1+1, n1+1 ), lda, iinfo )
205 IF ( iinfo.NE.0 )
THEN
216 CALL dtrsm(
'R',
'L',
'T',
'N', n2, n1, one,
217 $ a( 1, 1 ), lda, a( n1+1, 1 ), lda )
221 CALL dsyrk( uplo,
'N', n2, n1, -one, a( n1+1, 1 ), lda,
222 $ one, a( n1+1, n1+1 ), lda )
223 CALL dpotrf2( uplo, n2, a( n1+1, n1+1 ), lda, iinfo )
224 IF ( iinfo.NE.0 )
THEN
subroutine dsyrk(uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
DSYRK
subroutine dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM