PLASMA  2.4.5
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
spotri.f
Go to the documentation of this file.
1  SUBROUTINE spotri( UPLO, N, A, LDA, INFO )
2 *
3 * -- LAPACK routine (version 3.2) --
4 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
5 * November 2006
6 *
7 * .. Scalar Arguments ..
8  CHARACTER uplo
9  INTEGER info, lda, n
10 * ..
11 * .. Array Arguments ..
12  REAL a( lda, * )
13 * ..
14 *
15 * Purpose
16 * =======
17 *
18 * SPOTRI computes the inverse of a real symmetric positive definite
19 * matrix A using the Cholesky factorization A = U**T*U or A = L*L**T
20 * computed by SPOTRF.
21 *
22 * Arguments
23 * =========
24 *
25 * UPLO (input) CHARACTER*1
26 * = 'U': Upper triangle of A is stored;
27 * = 'L': Lower triangle of A is stored.
28 *
29 * N (input) INTEGER
30 * The order of the matrix A. N >= 0.
31 *
32 * A (input/output) REAL array, dimension (LDA,N)
33 * On entry, the triangular factor U or L from the Cholesky
34 * factorization A = U**T*U or A = L*L**T, as computed by
35 * SPOTRF.
36 * On exit, the upper or lower triangle of the (symmetric)
37 * inverse of A, overwriting the input factor U or L.
38 *
39 * LDA (input) INTEGER
40 * The leading dimension of the array A. LDA >= max(1,N).
41 *
42 * INFO (output) INTEGER
43 * = 0: successful exit
44 * < 0: if INFO = -i, the i-th argument had an illegal value
45 * > 0: if INFO = i, the (i,i) element of the factor U or L is
46 * zero, and the inverse could not be computed.
47 *
48 * =====================================================================
49 *
50 * .. External Functions ..
51  LOGICAL lsame
52  EXTERNAL lsame
53 * ..
54 * .. External Subroutines ..
55  EXTERNAL slauum, strtri, xerbla
56 * ..
57 * .. Intrinsic Functions ..
58  INTRINSIC max
59 * ..
60 * .. Executable Statements ..
61 *
62 * Test the input parameters.
63 *
64  info = 0
65  IF( .NOT.lsame( uplo, 'U' ) .AND. .NOT.lsame( uplo, 'L' ) ) THEN
66  info = -1
67  ELSE IF( n.LT.0 ) THEN
68  info = -2
69  ELSE IF( lda.LT.max( 1, n ) ) THEN
70  info = -4
71  END IF
72  IF( info.NE.0 ) THEN
73  CALL xerbla( 'SPOTRI', -info )
74  return
75  END IF
76 *
77 * Quick return if possible
78 *
79  IF( n.EQ.0 )
80  $ return
81 *
82 * Invert the triangular Cholesky factor U or L.
83 *
84  CALL strtri( uplo, 'Non-unit', n, a, lda, info )
85  IF( info.GT.0 )
86  $ return
87 *
88 * Form inv(U)*inv(U)' or inv(L)'*inv(L).
89 *
90  CALL slauum( uplo, n, a, lda, info )
91 *
92  return
93 *
94 * End of SPOTRI
95 *
96  END