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)
XERBLA
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dsyrk(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)
DSYRK
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dpotrf(UPLO, N, A, LDA, INFO)
DPOTRF
recursive subroutine dpotrf2(UPLO, N, A, LDA, INFO)
DPOTRF2