1: SUBROUTINE ZTRTI2( UPLO, DIAG, N, A, LDA, INFO )
2: *
3: * -- LAPACK routine (version 3.2) --
4: * -- LAPACK is a software package provided by Univ. of Tennessee, --
5: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
6: * November 2006
7: *
8: * .. Scalar Arguments ..
9: CHARACTER DIAG, UPLO
10: INTEGER INFO, LDA, N
11: * ..
12: * .. Array Arguments ..
13: COMPLEX*16 A( LDA, * )
14: * ..
15: *
16: * Purpose
17: * =======
18: *
19: * ZTRTI2 computes the inverse of a complex upper or lower triangular
20: * matrix.
21: *
22: * This is the Level 2 BLAS version of the algorithm.
23: *
24: * Arguments
25: * =========
26: *
27: * UPLO (input) CHARACTER*1
28: * Specifies whether the matrix A is upper or lower triangular.
29: * = 'U': Upper triangular
30: * = 'L': Lower triangular
31: *
32: * DIAG (input) CHARACTER*1
33: * Specifies whether or not the matrix A is unit triangular.
34: * = 'N': Non-unit triangular
35: * = 'U': Unit triangular
36: *
37: * N (input) INTEGER
38: * The order of the matrix A. N >= 0.
39: *
40: * A (input/output) COMPLEX*16 array, dimension (LDA,N)
41: * On entry, the triangular matrix A. If UPLO = 'U', the
42: * leading n by n upper triangular part of the array A contains
43: * the upper triangular matrix, and the strictly lower
44: * triangular part of A is not referenced. If UPLO = 'L', the
45: * leading n by n lower triangular part of the array A contains
46: * the lower triangular matrix, and the strictly upper
47: * triangular part of A is not referenced. If DIAG = 'U', the
48: * diagonal elements of A are also not referenced and are
49: * assumed to be 1.
50: *
51: * On exit, the (triangular) inverse of the original matrix, in
52: * the same storage format.
53: *
54: * LDA (input) INTEGER
55: * The leading dimension of the array A. LDA >= max(1,N).
56: *
57: * INFO (output) INTEGER
58: * = 0: successful exit
59: * < 0: if INFO = -k, the k-th argument had an illegal value
60: *
61: * =====================================================================
62: *
63: * .. Parameters ..
64: COMPLEX*16 ONE
65: PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ) )
66: * ..
67: * .. Local Scalars ..
68: LOGICAL NOUNIT, UPPER
69: INTEGER J
70: COMPLEX*16 AJJ
71: * ..
72: * .. External Functions ..
73: LOGICAL LSAME
74: EXTERNAL LSAME
75: * ..
76: * .. External Subroutines ..
77: EXTERNAL XERBLA, ZSCAL, ZTRMV
78: * ..
79: * .. Intrinsic Functions ..
80: INTRINSIC MAX
81: * ..
82: * .. Executable Statements ..
83: *
84: * Test the input parameters.
85: *
86: INFO = 0
87: UPPER = LSAME( UPLO, 'U' )
88: NOUNIT = LSAME( DIAG, 'N' )
89: IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
90: INFO = -1
91: ELSE IF( .NOT.NOUNIT .AND. .NOT.LSAME( DIAG, 'U' ) ) THEN
92: INFO = -2
93: ELSE IF( N.LT.0 ) THEN
94: INFO = -3
95: ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
96: INFO = -5
97: END IF
98: IF( INFO.NE.0 ) THEN
99: CALL XERBLA( 'ZTRTI2', -INFO )
100: RETURN
101: END IF
102: *
103: IF( UPPER ) THEN
104: *
105: * Compute inverse of upper triangular matrix.
106: *
107: DO 10 J = 1, N
108: IF( NOUNIT ) THEN
109: A( J, J ) = ONE / A( J, J )
110: AJJ = -A( J, J )
111: ELSE
112: AJJ = -ONE
113: END IF
114: *
115: * Compute elements 1:j-1 of j-th column.
116: *
117: CALL ZTRMV( 'Upper', 'No transpose', DIAG, J-1, A, LDA,
118: $ A( 1, J ), 1 )
119: CALL ZSCAL( J-1, AJJ, A( 1, J ), 1 )
120: 10 CONTINUE
121: ELSE
122: *
123: * Compute inverse of lower triangular matrix.
124: *
125: DO 20 J = N, 1, -1
126: IF( NOUNIT ) THEN
127: A( J, J ) = ONE / A( J, J )
128: AJJ = -A( J, J )
129: ELSE
130: AJJ = -ONE
131: END IF
132: IF( J.LT.N ) THEN
133: *
134: * Compute elements j+1:n of j-th column.
135: *
136: CALL ZTRMV( 'Lower', 'No transpose', DIAG, N-J,
137: $ A( J+1, J+1 ), LDA, A( J+1, J ), 1 )
138: CALL ZSCAL( N-J, AJJ, A( J+1, J ), 1 )
139: END IF
140: 20 CONTINUE
141: END IF
142: *
143: RETURN
144: *
145: * End of ZTRTI2
146: *
147: END
CVSweb interface <joel.bertrand@systella.fr>