 LAPACK  3.8.0 LAPACK: Linear Algebra PACKage

## ◆ csytri_3()

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

CSYTRI_3

Download CSYTRI_3 + dependencies [TGZ] [ZIP] [TXT]

Purpose:
``` CSYTRI_3 computes the inverse of a complex symmetric indefinite
matrix A using the factorization computed by CSYTRF_RK or CSYTRF_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.

CSYTRI_3 sets the leading dimension of the workspace  before calling
CSYTRI_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 COMPLEX array, dimension (LDA,N) On entry, diagonal of the block diagonal matrix D and factors U or L as computed by CSYTRF_RK and CSYTRF_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 COMPLEX 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 CSYTRF_RK or CSYTRF_BK.``` [out] WORK ``` WORK is COMPLEX 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 csytri_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  COMPLEX 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 csytri_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, 'CSYTRI_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( 'CSYTRI_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 csytri_3x( uplo, n, a, lda, e, ipiv, work, nb, info )
241 *
242  work( 1 ) = lwkopt
243 *
244  RETURN
245 *
246 * End of CSYTRI_3
247 *
subroutine csytri_3x(UPLO, N, A, LDA, E, IPIV, WORK, NB, INFO)
CSYTRI_3X
Definition: csytri_3x.f:161
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV
Definition: tstiee.f:83
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:62
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:55
Here is the call graph for this function:
Here is the caller graph for this function: