101 SUBROUTINE dpotrf ( UPLO, N, A, LDA, INFO )
112 DOUBLE PRECISION A( LDA, * )
119 parameter( one = 1.0d+0 )
128 EXTERNAL lsame, ilaenv
141 upper = lsame( uplo,
'U' )
142 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
144 ELSE IF( n.LT.0 )
THEN
146 ELSE IF( lda.LT.
max( 1, n ) )
THEN
150 CALL xerbla(
'DPOTRF', -info )
161 nb = ilaenv( 1,
'DPOTRF', uplo, n, -1, -1, -1 )
162 IF( nb.LE.1 .OR. nb.GE.n )
THEN
166 CALL dpotf2( uplo, n, a, lda, info )
180 jb =
min( nb, n-j+1 )
182 CALL dpotf2(
'Upper', jb, a( j, j ), lda, info )
191 CALL dtrsm(
'Left',
'Upper',
'Transpose',
'Non-unit',
192 $ jb, n-j-jb+1, one, a( j, j ), lda,
193 $ a( j, j+jb ), lda )
194 CALL dsyrk(
'Upper',
'Transpose', n-j-jb+1, jb, -one,
196 $ one, a( j+jb, j+jb ), lda )
209 jb =
min( nb, n-j+1 )
211 CALL dpotf2(
'Lower', jb, a( j, j ), lda, info )
220 CALL dtrsm(
'Right',
'Lower',
'Transpose',
'Non-unit',
221 $ n-j-jb+1, jb, one, a( j, j ), lda,
222 $ a( j+jb, j ), lda )
224 CALL dsyrk( 'lower
', 'no transpose
', N-J-JB+1, JB,
225 $ -ONE, A( J+JB, J ), LDA,
226 $ ONE, A( J+JB, J+JB ), LDA )
subroutine xerbla(srname, info)
XERBLA
subroutine dpotf2(uplo, n, a, lda, info)
DPOTF2 computes the Cholesky factorization of a symmetric/Hermitian positive definite matrix (unblock...
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 dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM
subroutine dpotrf(uplo, n, a, lda, info)
DPOTRF VARIANT: right looking block version of the algorithm, calling Level 3 BLAS.