LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
ztrtrs.f
Go to the documentation of this file.
1*> \brief \b ZTRTRS
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> Download ZTRTRS + dependencies
9*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ztrtrs.f">
10*> [TGZ]</a>
11*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ztrtrs.f">
12*> [ZIP]</a>
13*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ztrtrs.f">
14*> [TXT]</a>
15*
16* Definition:
17* ===========
18*
19* SUBROUTINE ZTRTRS( UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB,
20* INFO )
21*
22* .. Scalar Arguments ..
23* CHARACTER DIAG, TRANS, UPLO
24* INTEGER INFO, LDA, LDB, N, NRHS
25* ..
26* .. Array Arguments ..
27* COMPLEX*16 A( LDA, * ), B( LDB, * )
28* ..
29*
30*
31*> \par Purpose:
32* =============
33*>
34*> \verbatim
35*>
36*> ZTRTRS solves a triangular system of the form
37*>
38*> A * X = B, A**T * X = B, or A**H * X = B,
39*>
40*> where A is a triangular matrix of order N, and B is an N-by-NRHS matrix.
41*>
42*> This subroutine verifies that A is nonsingular, but callers should note that only exact
43*> singularity is detected. It is conceivable for one or more diagonal elements of A to be
44*> subnormally tiny numbers without this subroutine signalling an error.
45*>
46*> If a possible loss of numerical precision due to near-singular matrices is a concern, the
47*> caller should verify that A is nonsingular within some tolerance before calling this subroutine.
48*> \endverbatim
49*
50* Arguments:
51* ==========
52*
53*> \param[in] UPLO
54*> \verbatim
55*> UPLO is CHARACTER*1
56*> = 'U': A is upper triangular;
57*> = 'L': A is lower triangular.
58*> \endverbatim
59*>
60*> \param[in] TRANS
61*> \verbatim
62*> TRANS is CHARACTER*1
63*> Specifies the form of the system of equations:
64*> = 'N': A * X = B (No transpose)
65*> = 'T': A**T * X = B (Transpose)
66*> = 'C': A**H * X = B (Conjugate transpose)
67*> \endverbatim
68*>
69*> \param[in] DIAG
70*> \verbatim
71*> DIAG is CHARACTER*1
72*> = 'N': A is non-unit triangular;
73*> = 'U': A is unit triangular.
74*> \endverbatim
75*>
76*> \param[in] N
77*> \verbatim
78*> N is INTEGER
79*> The order of the matrix A. N >= 0.
80*> \endverbatim
81*>
82*> \param[in] NRHS
83*> \verbatim
84*> NRHS is INTEGER
85*> The number of right hand sides, i.e., the number of columns
86*> of the matrix B. NRHS >= 0.
87*> \endverbatim
88*>
89*> \param[in] A
90*> \verbatim
91*> A is COMPLEX*16 array, dimension (LDA,N)
92*> The triangular matrix A. If UPLO = 'U', the leading N-by-N
93*> upper triangular part of the array A contains the upper
94*> triangular matrix, and the strictly lower triangular part of
95*> A is not referenced. If UPLO = 'L', the leading N-by-N lower
96*> triangular part of the array A contains the lower triangular
97*> matrix, and the strictly upper triangular part of A is not
98*> referenced. If DIAG = 'U', the diagonal elements of A are
99*> also not referenced and are assumed to be 1.
100*> \endverbatim
101*>
102*> \param[in] LDA
103*> \verbatim
104*> LDA is INTEGER
105*> The leading dimension of the array A. LDA >= max(1,N).
106*> \endverbatim
107*>
108*> \param[in,out] B
109*> \verbatim
110*> B is COMPLEX*16 array, dimension (LDB,NRHS)
111*> On entry, the right hand side matrix B.
112*> On exit, if INFO = 0, the solution matrix X.
113*> \endverbatim
114*>
115*> \param[in] LDB
116*> \verbatim
117*> LDB is INTEGER
118*> The leading dimension of the array B. LDB >= max(1,N).
119*> \endverbatim
120*>
121*> \param[out] INFO
122*> \verbatim
123*> INFO is INTEGER
124*> = 0: successful exit
125*> < 0: if INFO = -i, the i-th argument had an illegal value
126*> > 0: if INFO = i, the i-th diagonal element of A is exactly zero,
127*> indicating that the matrix is singular and the solutions
128*> X have not been computed.
129*> \endverbatim
130*
131* Authors:
132* ========
133*
134*> \author Univ. of Tennessee
135*> \author Univ. of California Berkeley
136*> \author Univ. of Colorado Denver
137*> \author NAG Ltd.
138*
139*> \ingroup trtrs
140*
141* =====================================================================
142 SUBROUTINE ztrtrs( UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB,
143 $ INFO )
144*
145* -- LAPACK computational routine --
146* -- LAPACK is a software package provided by Univ. of Tennessee, --
147* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
148*
149* .. Scalar Arguments ..
150 CHARACTER DIAG, TRANS, UPLO
151 INTEGER INFO, LDA, LDB, N, NRHS
152* ..
153* .. Array Arguments ..
154 COMPLEX*16 A( LDA, * ), B( LDB, * )
155* ..
156*
157* =====================================================================
158*
159* .. Parameters ..
160 COMPLEX*16 ZERO, ONE
161 parameter( zero = ( 0.0d+0, 0.0d+0 ),
162 $ one = ( 1.0d+0, 0.0d+0 ) )
163* ..
164* .. Local Scalars ..
165 LOGICAL NOUNIT
166* ..
167* .. External Functions ..
168 LOGICAL LSAME
169 EXTERNAL lsame
170* ..
171* .. External Subroutines ..
172 EXTERNAL xerbla, ztrsm
173* ..
174* .. Intrinsic Functions ..
175 INTRINSIC max
176* ..
177* .. Executable Statements ..
178*
179* Test the input parameters.
180*
181 info = 0
182 nounit = lsame( diag, 'N' )
183 IF( .NOT.lsame( uplo, 'U' ) .AND.
184 $ .NOT.lsame( uplo, 'L' ) ) THEN
185 info = -1
186 ELSE IF( .NOT.lsame( trans, 'N' ) .AND. .NOT.
187 $ lsame( trans, 'T' ) .AND.
188 $ .NOT.lsame( trans, 'C' ) ) THEN
189 info = -2
190 ELSE IF( .NOT.nounit .AND. .NOT.lsame( diag, 'U' ) ) THEN
191 info = -3
192 ELSE IF( n.LT.0 ) THEN
193 info = -4
194 ELSE IF( nrhs.LT.0 ) THEN
195 info = -5
196 ELSE IF( lda.LT.max( 1, n ) ) THEN
197 info = -7
198 ELSE IF( ldb.LT.max( 1, n ) ) THEN
199 info = -9
200 END IF
201 IF( info.NE.0 ) THEN
202 CALL xerbla( 'ZTRTRS', -info )
203 RETURN
204 END IF
205*
206* Quick return if possible
207*
208 IF( n.EQ.0 )
209 $ RETURN
210*
211* Check for singularity.
212*
213 IF( nounit ) THEN
214 DO 10 info = 1, n
215 IF( a( info, info ).EQ.zero )
216 $ RETURN
217 10 CONTINUE
218 END IF
219 info = 0
220*
221* Solve A * x = b, A**T * x = b, or A**H * x = b.
222*
223 CALL ztrsm( 'Left', uplo, trans, diag, n, nrhs, one, a, lda, b,
224 $ ldb )
225*
226 RETURN
227*
228* End of ZTRTRS
229*
230 END
subroutine xerbla(srname, info)
Definition cblat2.f:3285
subroutine ztrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRSM
Definition ztrsm.f:180
subroutine ztrtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, info)
ZTRTRS
Definition ztrtrs.f:144