LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
zhetrs_aa_2stage.f
Go to the documentation of this file.
1*> \brief \b ZHETRS_AA_2STAGE
2*
3* @generated from SRC/dsytrs_aa_2stage.f, fortran d -> c, Mon Oct 30 11:59:02 2017
4*
5* =========== DOCUMENTATION ===========
6*
7* Online html documentation available at
8* http://www.netlib.org/lapack/explore-html/
9*
10*> \htmlonly
11*> Download ZHETRS_AA_2STAGE + dependencies
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zhetrs_aa_2stage.f">
13*> [TGZ]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zhetrs_aa_2stage.f">
15*> [ZIP]</a>
16*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrs_aa_2stage.f">
17*> [TXT]</a>
18*> \endhtmlonly
19*
20* Definition:
21* ===========
22*
23* SUBROUTINE ZHETRS_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB, IPIV,
24* IPIV2, B, LDB, INFO )
25*
26* .. Scalar Arguments ..
27* CHARACTER UPLO
28* INTEGER N, NRHS, LDA, LTB, LDB, INFO
29* ..
30* .. Array Arguments ..
31* INTEGER IPIV( * ), IPIV2( * )
32* COMPLEX*16 A( LDA, * ), TB( * ), B( LDB, * )
33* ..
34*
35*> \par Purpose:
36* =============
37*>
38*> \verbatim
39*>
40*> ZHETRS_AA_2STAGE solves a system of linear equations A*X = B with a
41*> hermitian matrix A using the factorization A = U**H*T*U or
42*> A = L*T*L**H computed by ZHETRF_AA_2STAGE.
43*> \endverbatim
44*
45* Arguments:
46* ==========
47*
48*> \param[in] UPLO
49*> \verbatim
50*> UPLO is CHARACTER*1
51*> Specifies whether the details of the factorization are stored
52*> as an upper or lower triangular matrix.
53*> = 'U': Upper triangular, form is A = U**H*T*U;
54*> = 'L': Lower triangular, form is A = L*T*L**H.
55*> \endverbatim
56*>
57*> \param[in] N
58*> \verbatim
59*> N is INTEGER
60*> The order of the matrix A. N >= 0.
61*> \endverbatim
62*>
63*> \param[in] NRHS
64*> \verbatim
65*> NRHS is INTEGER
66*> The number of right hand sides, i.e., the number of columns
67*> of the matrix B. NRHS >= 0.
68*> \endverbatim
69*>
70*> \param[in] A
71*> \verbatim
72*> A is COMPLEX*16 array, dimension (LDA,N)
73*> Details of factors computed by ZHETRF_AA_2STAGE.
74*> \endverbatim
75*>
76*> \param[in] LDA
77*> \verbatim
78*> LDA is INTEGER
79*> The leading dimension of the array A. LDA >= max(1,N).
80*> \endverbatim
81*>
82*> \param[out] TB
83*> \verbatim
84*> TB is COMPLEX*16 array, dimension (LTB)
85*> Details of factors computed by ZHETRF_AA_2STAGE.
86*> \endverbatim
87*>
88*> \param[in] LTB
89*> \verbatim
90*> LTB is INTEGER
91*> The size of the array TB. LTB >= 4*N.
92*> \endverbatim
93*>
94*> \param[in] IPIV
95*> \verbatim
96*> IPIV is INTEGER array, dimension (N)
97*> Details of the interchanges as computed by
98*> ZHETRF_AA_2STAGE.
99*> \endverbatim
100*>
101*> \param[in] IPIV2
102*> \verbatim
103*> IPIV2 is INTEGER array, dimension (N)
104*> Details of the interchanges as computed by
105*> ZHETRF_AA_2STAGE.
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, 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*> \endverbatim
127*
128* Authors:
129* ========
130*
131*> \author Univ. of Tennessee
132*> \author Univ. of California Berkeley
133*> \author Univ. of Colorado Denver
134*> \author NAG Ltd.
135*
136*> \ingroup hetrs_aa_2stage
137*
138* =====================================================================
139 SUBROUTINE zhetrs_aa_2stage( UPLO, N, NRHS, A, LDA, TB, LTB,
140 $ IPIV, IPIV2, B, LDB, INFO )
141*
142* -- LAPACK computational routine --
143* -- LAPACK is a software package provided by Univ. of Tennessee, --
144* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
145*
146 IMPLICIT NONE
147*
148* .. Scalar Arguments ..
149 CHARACTER UPLO
150 INTEGER N, NRHS, LDA, LTB, LDB, INFO
151* ..
152* .. Array Arguments ..
153 INTEGER IPIV( * ), IPIV2( * )
154 COMPLEX*16 A( LDA, * ), TB( * ), B( LDB, * )
155* ..
156*
157* =====================================================================
158*
159 COMPLEX*16 ONE
160 parameter( one = ( 1.0d+0, 0.0d+0 ) )
161* ..
162* .. Local Scalars ..
163 INTEGER LDTB, NB
164 LOGICAL UPPER
165* ..
166* .. External Functions ..
167 LOGICAL LSAME
168 EXTERNAL lsame
169* ..
170* .. External Subroutines ..
171 EXTERNAL zgbtrs, zlaswp, ztrsm, xerbla
172* ..
173* .. Intrinsic Functions ..
174 INTRINSIC max
175* ..
176* .. Executable Statements ..
177*
178 info = 0
179 upper = lsame( uplo, 'U' )
180 IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
181 info = -1
182 ELSE IF( n.LT.0 ) THEN
183 info = -2
184 ELSE IF( nrhs.LT.0 ) THEN
185 info = -3
186 ELSE IF( lda.LT.max( 1, n ) ) THEN
187 info = -5
188 ELSE IF( ltb.LT.( 4*n ) ) THEN
189 info = -7
190 ELSE IF( ldb.LT.max( 1, n ) ) THEN
191 info = -11
192 END IF
193 IF( info.NE.0 ) THEN
194 CALL xerbla( 'ZHETRS_AA_2STAGE', -info )
195 RETURN
196 END IF
197*
198* Quick return if possible
199*
200 IF( n.EQ.0 .OR. nrhs.EQ.0 )
201 $ RETURN
202*
203* Read NB and compute LDTB
204*
205 nb = int( tb( 1 ) )
206 ldtb = ltb/n
207*
208 IF( upper ) THEN
209*
210* Solve A*X = B, where A = U**H*T*U.
211*
212 IF( n.GT.nb ) THEN
213*
214* Pivot, P**T * B -> B
215*
216 CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, 1 )
217*
218* Compute (U**H \ B) -> B [ (U**H \P**T * B) ]
219*
220 CALL ztrsm( 'L', 'U', 'C', 'U', n-nb, nrhs, one, a(1, nb+1),
221 $ lda, b(nb+1, 1), ldb)
222*
223 END IF
224*
225* Compute T \ B -> B [ T \ (U**H \P**T * B) ]
226*
227 CALL zgbtrs( 'N', n, nb, nb, nrhs, tb, ldtb, ipiv2, b, ldb,
228 $ info)
229 IF( n.GT.nb ) THEN
230*
231* Compute (U \ B) -> B [ U \ (T \ (U**H \P**T * B) ) ]
232*
233 CALL ztrsm( 'L', 'U', 'N', 'U', n-nb, nrhs, one, a(1, nb+1),
234 $ lda, b(nb+1, 1), ldb)
235*
236* Pivot, P * B -> B [ P * (U \ (T \ (U**H \P**T * B) )) ]
237*
238 CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, -1 )
239*
240 END IF
241*
242 ELSE
243*
244* Solve A*X = B, where A = L*T*L**H.
245*
246 IF( n.GT.nb ) THEN
247*
248* Pivot, P**T * B -> B
249*
250 CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, 1 )
251*
252* Compute (L \ B) -> B [ (L \P**T * B) ]
253*
254 CALL ztrsm( 'L', 'L', 'N', 'U', n-nb, nrhs, one, a(nb+1, 1),
255 $ lda, b(nb+1, 1), ldb)
256*
257 END IF
258*
259* Compute T \ B -> B [ T \ (L \P**T * B) ]
260*
261 CALL zgbtrs( 'N', n, nb, nb, nrhs, tb, ldtb, ipiv2, b, ldb,
262 $ info)
263 IF( n.GT.nb ) THEN
264*
265* Compute (L**H \ B) -> B [ L**H \ (T \ (L \P**T * B) ) ]
266*
267 CALL ztrsm( 'L', 'L', 'C', 'U', n-nb, nrhs, one, a(nb+1, 1),
268 $ lda, b(nb+1, 1), ldb)
269*
270* Pivot, P * B -> B [ P * (L**H \ (T \ (L \P**T * B) )) ]
271*
272 CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, -1 )
273*
274 END IF
275 END IF
276*
277 RETURN
278*
279* End of ZHETRS_AA_2STAGE
280*
281 END
subroutine xerbla(srname, info)
Definition cblat2.f:3285
subroutine zgbtrs(trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info)
ZGBTRS
Definition zgbtrs.f:138
subroutine zhetrs_aa_2stage(uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, info)
ZHETRS_AA_2STAGE
subroutine zlaswp(n, a, lda, k1, k2, ipiv, incx)
ZLASWP performs a series of row interchanges on a general rectangular matrix.
Definition zlaswp.f:115
subroutine ztrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRSM
Definition ztrsm.f:180