LAPACK  3.6.1
LAPACK: Linear Algebra PACKage
subroutine zpotrf ( character  UPLO,
integer  N,
complex*16, dimension( lda, * )  A,
integer  LDA,
integer  INFO 
)

ZPOTRF VARIANT: right looking block version of the algorithm, calling Level 3 BLAS.

Purpose:

 ZPOTRF computes the Cholesky factorization of a real Hermitian
 positive definite matrix A.

 The factorization has the form
    A = U**H * U,  if UPLO = 'U', or
    A = L  * L**H,  if UPLO = 'L',
 where U is an upper triangular matrix and L is lower triangular.

 This is the right looking block version of the algorithm, calling Level 3 BLAS.
Parameters
[in]UPLO
          UPLO is CHARACTER*1
          = 'U':  Upper triangle of A is stored;
          = 'L':  Lower triangle of A is stored.
[in]N
          N is INTEGER
          The order of the matrix A.  N >= 0.
[in,out]A
          A is COMPLEX*16 array, dimension (LDA,N)
          On entry, the Hermitian matrix A.  If UPLO = 'U', the leading
          N-by-N upper triangular part of A contains the upper
          triangular part of the matrix A, and the strictly lower
          triangular part of A is not referenced.  If UPLO = 'L', the
          leading N-by-N lower triangular part of A contains the lower
          triangular part of the matrix A, and the strictly upper
          triangular part of A is not referenced.
          On exit, if INFO = 0, the factor U or L from the Cholesky
          factorization A = U**H*U or A = L*L**H.
[in]LDA
          LDA is INTEGER
          The leading dimension of the array A.  LDA >= max(1,N).
[out]INFO
          INFO is INTEGER
          = 0:  successful exit
          < 0:  if INFO = -i, the i-th argument had an illegal value
          > 0:  if INFO = i, the leading minor of order i is not
                positive definite, and the factorization could not be
                completed.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Date
November 2011

Definition at line 102 of file zpotrf.f.

102 *
103 * -- LAPACK computational routine (version 3.1) --
104 * -- LAPACK is a software package provided by Univ. of Tennessee, --
105 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
106 * November 2011
107 *
108 * .. Scalar Arguments ..
109  CHARACTER uplo
110  INTEGER info, lda, n
111 * ..
112 * .. Array Arguments ..
113  COMPLEX*16 a( lda, * )
114 * ..
115 *
116 * =====================================================================
117 *
118 * .. Parameters ..
119  DOUBLE PRECISION one
120  COMPLEX*16 cone
121  parameter ( one = 1.0d+0, cone = ( 1.0d+0, 0.0d+0 ) )
122 * ..
123 * .. Local Scalars ..
124  LOGICAL upper
125  INTEGER j, jb, nb
126 * ..
127 * .. External Functions ..
128  LOGICAL lsame
129  INTEGER ilaenv
130  EXTERNAL lsame, ilaenv
131 * ..
132 * .. External Subroutines ..
133  EXTERNAL zgemm, zpotf2, zherk, ztrsm, xerbla
134 * ..
135 * .. Intrinsic Functions ..
136  INTRINSIC max, min
137 * ..
138 * .. Executable Statements ..
139 *
140 * Test the input parameters.
141 *
142  info = 0
143  upper = lsame( uplo, 'U' )
144  IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
145  info = -1
146  ELSE IF( n.LT.0 ) THEN
147  info = -2
148  ELSE IF( lda.LT.max( 1, n ) ) THEN
149  info = -4
150  END IF
151  IF( info.NE.0 ) THEN
152  CALL xerbla( 'ZPOTRF', -info )
153  RETURN
154  END IF
155 *
156 * Quick return if possible
157 *
158  IF( n.EQ.0 )
159  $ RETURN
160 *
161 * Determine the block size for this environment.
162 *
163  nb = ilaenv( 1, 'ZPOTRF', uplo, n, -1, -1, -1 )
164  IF( nb.LE.1 .OR. nb.GE.n ) THEN
165 *
166 * Use unblocked code.
167 *
168  CALL zpotf2( uplo, n, a, lda, info )
169  ELSE
170 *
171 * Use blocked code.
172 *
173  IF( upper ) THEN
174 *
175 * Compute the Cholesky factorization A = U'*U.
176 *
177  DO 10 j = 1, n, nb
178 *
179 * Update and factorize the current diagonal block and test
180 * for non-positive-definiteness.
181 *
182  jb = min( nb, n-j+1 )
183 
184  CALL zpotf2( 'Upper', jb, a( j, j ), lda, info )
185 
186  IF( info.NE.0 )
187  $ GO TO 30
188 
189  IF( j+jb.LE.n ) THEN
190 *
191 * Updating the trailing submatrix.
192 *
193  CALL ztrsm( 'Left', 'Upper', 'Conjugate Transpose',
194  $ 'Non-unit', jb, n-j-jb+1, cone, a( j, j ),
195  $ lda, a( j, j+jb ), lda )
196  CALL zherk( 'Upper', 'Conjugate transpose', n-j-jb+1,
197  $ jb, -one, a( j, j+jb ), lda,
198  $ one, a( j+jb, j+jb ), lda )
199  END IF
200  10 CONTINUE
201 *
202  ELSE
203 *
204 * Compute the Cholesky factorization A = L*L'.
205 *
206  DO 20 j = 1, n, nb
207 *
208 * Update and factorize the current diagonal block and test
209 * for non-positive-definiteness.
210 *
211  jb = min( nb, n-j+1 )
212 
213  CALL zpotf2( 'Lower', jb, a( j, j ), lda, info )
214 
215  IF( info.NE.0 )
216  $ GO TO 30
217 
218  IF( j+jb.LE.n ) THEN
219 *
220 * Updating the trailing submatrix.
221 *
222  CALL ztrsm( 'Right', 'Lower', 'Conjugate Transpose',
223  $ 'Non-unit', n-j-jb+1, jb, cone, a( j, j ),
224  $ lda, a( j+jb, j ), lda )
225 
226  CALL zherk( 'Lower', 'No Transpose', n-j-jb+1, jb,
227  $ -one, a( j+jb, j ), lda,
228  $ one, a( j+jb, j+jb ), lda )
229  END IF
230  20 CONTINUE
231  END IF
232  END IF
233  GO TO 40
234 *
235  30 CONTINUE
236  info = info + j - 1
237 *
238  40 CONTINUE
239  RETURN
240 *
241 * End of ZPOTRF
242 *
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
Definition: zgemm.f:189
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:62
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
Definition: tstiee.f:83
subroutine zherk(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)
ZHERK
Definition: zherk.f:175
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM
Definition: ztrsm.f:182
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:55
subroutine zpotf2(UPLO, N, A, LDA, INFO)
ZPOTF2 computes the Cholesky factorization of a symmetric/Hermitian positive definite matrix (unblock...
Definition: zpotf2.f:111

Here is the call graph for this function:

Here is the caller graph for this function: