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
130 LOGICAL LSAME, DISNAN
131 EXTERNAL lsame, disnan
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 xerbla(SRNAME, INFO)
XERBLA
recursive subroutine dpotrf2(UPLO, N, A, LDA, INFO)
DPOTRF2
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM