106 SUBROUTINE dpotrf( UPLO, N, A, LDA, INFO )
117 DOUBLE PRECISION A( LDA, * )
124 parameter( one = 1.0d+0 )
133 EXTERNAL lsame, ilaenv
146 upper = lsame( uplo,
'U' )
147 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
149 ELSE IF( n.LT.0 )
THEN
151 ELSE IF( lda.LT.max( 1, n ) )
THEN
155 CALL xerbla(
'DPOTRF', -info )
166 nb = ilaenv( 1,
'DPOTRF', uplo, n, -1, -1, -1 )
167 IF( nb.LE.1 .OR. nb.GE.n )
THEN
171 CALL dpotrf2( uplo, n, a, lda, info )
185 jb = min( nb, n-j+1 )
186 CALL dsyrk(
'Upper',
'Transpose', jb, j-1, -one,
187 $ a( 1, j ), lda, one, a( j, j ), lda )
188 CALL dpotrf2(
'Upper', jb, a( j, j ), lda, info )
195 CALL dgemm(
'Transpose',
'No transpose', jb, n-j-jb+1,
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',
'Non-unit',
199 $ jb, n-j-jb+1, one, a( j, j ), lda,
200 $ a( j, j+jb ), lda )
213 jb = min( nb, n-j+1 )
214 CALL dsyrk(
'Lower',
'No transpose', jb, j-1, -one,
215 $ a( j, 1 ), lda, one, a( j, j ), lda )
216 CALL dpotrf2(
'Lower', jb, a( j, j ), lda, info )
223 CALL dgemm(
'No transpose',
'Transpose', n-j-jb+1, jb,
224 $ j-1, -one, a( j+jb, 1 ), lda, a( j, 1 ),
225 $ lda, one, a( j+jb, j ), lda )
226 CALL dtrsm(
'Right',
'Lower',
'Transpose',
'Non-unit',
227 $ n-j-jb+1, jb, one, a( j, j ), lda,
228 $ a( j+jb, j ), lda )
subroutine xerbla(srname, info)
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
recursive subroutine dpotrf2(uplo, n, a, lda, info)
DPOTRF2
subroutine dpotrf(uplo, n, a, lda, info)
DPOTRF
subroutine dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM