108 SUBROUTINE dpotrf( UPLO, N, A, LDA, INFO )
120 DOUBLE PRECISION A( lda, * )
127 parameter ( one = 1.0d+0 )
136 EXTERNAL lsame, ilaenv
149 upper = lsame( uplo,
'U' )
150 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
152 ELSE IF( n.LT.0 )
THEN
154 ELSE IF( lda.LT.max( 1, n ) )
THEN
158 CALL xerbla(
'DPOTRF', -info )
169 nb = ilaenv( 1,
'DPOTRF', uplo, n, -1, -1, -1 )
170 IF( nb.LE.1 .OR. nb.GE.n )
THEN
174 CALL dpotrf2( uplo, n, a, lda, info )
188 jb = min( nb, n-j+1 )
189 CALL dsyrk(
'Upper',
'Transpose', jb, j-1, -one,
190 $ a( 1, j ), lda, one, a( j, j ), lda )
191 CALL dpotrf2(
'Upper', jb, a( j, j ), lda, info )
198 CALL dgemm(
'Transpose',
'No transpose', jb, n-j-jb+1,
199 $ j-1, -one, a( 1, j ), lda, a( 1, j+jb ),
200 $ lda, one, a( j, j+jb ), lda )
201 CALL dtrsm(
'Left',
'Upper',
'Transpose',
'Non-unit',
202 $ jb, n-j-jb+1, one, a( j, j ), lda,
203 $ a( j, j+jb ), lda )
216 jb = min( nb, n-j+1 )
217 CALL dsyrk(
'Lower',
'No transpose', jb, j-1, -one,
218 $ a( j, 1 ), lda, one, a( j, j ), lda )
219 CALL dpotrf2(
'Lower', jb, a( j, j ), lda, info )
226 CALL dgemm(
'No transpose',
'Transpose', n-j-jb+1, jb,
227 $ j-1, -one, a( j+jb, 1 ), lda, a( j, 1 ),
228 $ lda, one, a( j+jb, j ), lda )
229 CALL dtrsm(
'Right',
'Lower',
'Transpose',
'Non-unit',
230 $ n-j-jb+1, jb, one, a( j, j ), lda,
231 $ a( j+jb, j ), lda )
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dpotrf(UPLO, N, A, LDA, INFO)
DPOTRF
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
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