104 SUBROUTINE dpotrf( UPLO, N, A, LDA, INFO )
115 DOUBLE PRECISION A( LDA, * )
122 parameter( one = 1.0d+0 )
131 EXTERNAL lsame, ilaenv
145 upper = lsame( uplo,
'U' )
146 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
148 ELSE IF( n.LT.0 )
THEN
150 ELSE IF( lda.LT.max( 1, n ) )
THEN
154 CALL xerbla(
'DPOTRF', -info )
165 nb = ilaenv( 1,
'DPOTRF', uplo, n, -1, -1, -1 )
166 IF( nb.LE.1 .OR. nb.GE.n )
THEN
170 CALL dpotrf2( uplo, n, a, lda, info )
184 jb = min( nb, n-j+1 )
185 CALL dsyrk(
'Upper',
'Transpose', jb, j-1, -one,
186 $ a( 1, j ), lda, one, a( j, j ), lda )
187 CALL dpotrf2(
'Upper', jb, a( j, j ), lda, info )
194 CALL dgemm(
'Transpose',
'No transpose', jb,
196 $ j-1, -one, a( 1, j ), lda, a( 1, j+jb ),
197 $ lda, one, a( j, j+jb ), lda )
198 CALL dtrsm(
'Left',
'Upper',
'Transpose',
200 $ jb, n-j-jb+1, one, a( j, j ), lda,
201 $ a( j, j+jb ), lda )
214 jb = min( nb, n-j+1 )
215 CALL dsyrk(
'Lower',
'No transpose', jb, j-1, -one,
216 $ a( j, 1 ), lda, one, a( j, j ), lda )
217 CALL dpotrf2(
'Lower', jb, a( j, j ), lda, info )
224 CALL dgemm(
'No transpose',
'Transpose', n-j-jb+1,
226 $ j-1, -one, a( j+jb, 1 ), lda, a( j, 1 ),
227 $ lda, one, a( j+jb, j ), lda )
228 CALL dtrsm(
'Right',
'Lower',
'Transpose',
230 $ n-j-jb+1, jb, one, a( j, j ), lda,
231 $ a( j+jb, j ), lda )
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 dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM