LAPACK  3.10.0
LAPACK: Linear Algebra PACKage

◆ spotrf()

subroutine spotrf ( character  UPLO,
integer  N,
real, dimension( lda, * )  A,
integer  LDA,
integer  INFO 
)

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

SPOTRF VARIANT: top-looking block version of the algorithm, calling Level 3 BLAS.

Purpose:

 SPOTRF computes the Cholesky factorization of a real symmetric
 positive definite matrix A.

 The factorization has the form
    A = U**T * U,  if UPLO = 'U', or
    A = L  * L**T,  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 REAL array, dimension (LDA,N)
          On entry, the symmetric 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**T*U or A = L*L**T.
[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
December 2016

Purpose:

 SPOTRF computes the Cholesky factorization of a real symmetric
 positive definite matrix A.

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

 This is the top-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 REAL array, dimension (LDA,N)
          On entry, the symmetric 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**T*U or A = L*L**T.
[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
December 2016

Definition at line 101 of file spotrf.f.

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