 LAPACK  3.9.0 LAPACK: Linear Algebra PACKage

## ◆ ssytri_3()

 subroutine ssytri_3 ( character UPLO, integer N, real, dimension( lda, * ) A, integer LDA, real, dimension( * ) E, integer, dimension( * ) IPIV, real, dimension( * ) WORK, integer LWORK, integer INFO )

SSYTRI_3

Purpose:
``` SSYTRI_3 computes the inverse of a real symmetric indefinite
matrix A using the factorization computed by SSYTRF_RK or SSYTRF_BK:

A = P*U*D*(U**T)*(P**T) or A = P*L*D*(L**T)*(P**T),

where U (or L) is unit upper (or lower) triangular matrix,
U**T (or L**T) is the transpose of U (or L), P is a permutation
matrix, P**T is the transpose of P, and D is symmetric and block
diagonal with 1-by-1 and 2-by-2 diagonal blocks.

SSYTRI_3 sets the leading dimension of the workspace  before calling
SSYTRI_3X that actually computes the inverse.  This is the blocked
version of the algorithm, calling Level 3 BLAS.```
Parameters
 [in] UPLO ``` UPLO is CHARACTER*1 Specifies whether the details of the factorization are stored as an upper or lower triangular matrix. = '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, diagonal of the block diagonal matrix D and factors U or L as computed by SSYTRF_RK and SSYTRF_BK: a) ONLY diagonal elements of the symmetric block diagonal matrix D on the diagonal of A, i.e. D(k,k) = A(k,k); (superdiagonal (or subdiagonal) elements of D should be provided on entry in array E), and b) If UPLO = 'U': factor U in the superdiagonal part of A. If UPLO = 'L': factor L in the subdiagonal part of A. On exit, if INFO = 0, the symmetric inverse of the original matrix. If UPLO = 'U': the upper triangular part of the inverse is formed and the part of A below the diagonal is not referenced; If UPLO = 'L': the lower triangular part of the inverse is formed and the part of A above the diagonal is not referenced.``` [in] LDA ``` LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N).``` [in] E ``` E is REAL array, dimension (N) On entry, contains the superdiagonal (or subdiagonal) elements of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where If UPLO = 'U': E(i) = D(i-1,i),i=2:N, E(1) not referenced; If UPLO = 'L': E(i) = D(i+1,i),i=1:N-1, E(N) not referenced. NOTE: For 1-by-1 diagonal block D(k), where 1 <= k <= N, the element E(k) is not referenced in both UPLO = 'U' or UPLO = 'L' cases.``` [in] IPIV ``` IPIV is INTEGER array, dimension (N) Details of the interchanges and the block structure of D as determined by SSYTRF_RK or SSYTRF_BK.``` [out] WORK ``` WORK is REAL array, dimension (N+NB+1)*(NB+3). On exit, if INFO = 0, WORK(1) returns the optimal LWORK.``` [in] LWORK ``` LWORK is INTEGER The length of WORK. LWORK >= (N+NB+1)*(NB+3). If LDWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.``` [out] INFO ``` INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its inverse could not be computed.```
Date
November 2017
Contributors:
```  November 2017,  Igor Kozachenko,
Computer Science Division,
University of California, Berkeley```

Definition at line 172 of file ssytri_3.f.

172 *
173 * -- LAPACK computational routine (version 3.8.0) --
174 * -- LAPACK is a software package provided by Univ. of Tennessee, --
175 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
176 * November 2017
177 *
178 * .. Scalar Arguments ..
179  CHARACTER UPLO
180  INTEGER INFO, LDA, LWORK, N
181 * ..
182 * .. Array Arguments ..
183  INTEGER IPIV( * )
184  REAL A( LDA, * ), E( * ), WORK( * )
185 * ..
186 *
187 * =====================================================================
188 *
189 * .. Local Scalars ..
190  LOGICAL UPPER, LQUERY
191  INTEGER LWKOPT, NB
192 * ..
193 * .. External Functions ..
194  LOGICAL LSAME
195  INTEGER ILAENV
196  EXTERNAL lsame, ilaenv
197 * ..
198 * .. External Subroutines ..
199  EXTERNAL ssytri_3x, xerbla
200 * ..
201 * .. Intrinsic Functions ..
202  INTRINSIC max
203 * ..
204 * .. Executable Statements ..
205 *
206 * Test the input parameters.
207 *
208  info = 0
209  upper = lsame( uplo, 'U' )
210  lquery = ( lwork.EQ.-1 )
211 *
212 * Determine the block size
213 *
214  nb = max( 1, ilaenv( 1, 'SSYTRI_3', uplo, n, -1, -1, -1 ) )
215  lwkopt = ( n+nb+1 ) * ( nb+3 )
216 *
217  IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
218  info = -1
219  ELSE IF( n.LT.0 ) THEN
220  info = -2
221  ELSE IF( lda.LT.max( 1, n ) ) THEN
222  info = -4
223  ELSE IF ( lwork .LT. lwkopt .AND. .NOT.lquery ) THEN
224  info = -8
225  END IF
226 *
227  IF( info.NE.0 ) THEN
228  CALL xerbla( 'SSYTRI_3', -info )
229  RETURN
230  ELSE IF( lquery ) THEN
231  work( 1 ) = lwkopt
232  RETURN
233  END IF
234 *
235 * Quick return if possible
236 *
237  IF( n.EQ.0 )
238  \$ RETURN
239 *
240  CALL ssytri_3x( uplo, n, a, lda, e, ipiv, work, nb, info )
241 *
242  work( 1 ) = lwkopt
243 *
244  RETURN
245 *
246 * End of SSYTRI_3
247 *
Here is the call graph for this function:
Here is the caller graph for this function:
ssytri_3x
subroutine ssytri_3x(UPLO, N, A, LDA, E, IPIV, WORK, NB, INFO)
SSYTRI_3X
Definition: ssytri_3x.f:161
xerbla
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:62
lsame
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:55
ilaenv
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV
Definition: tstiee.f:83