 LAPACK  3.10.1 LAPACK: Linear Algebra PACKage

## ◆ zsytrs_aa_2stage()

 subroutine zsytrs_aa_2stage ( character UPLO, integer N, integer NRHS, complex*16, dimension( lda, * ) A, integer LDA, complex*16, dimension( * ) TB, integer LTB, integer, dimension( * ) IPIV, integer, dimension( * ) IPIV2, complex*16, dimension( ldb, * ) B, integer LDB, integer INFO )

ZSYTRS_AA_2STAGE

Purpose:
``` ZSYTRS_AA_2STAGE solves a system of linear equations A*X = B with a complex
symmetric matrix A using the factorization A = U**T*T*U or
A = L*T*L**T computed by ZSYTRF_AA_2STAGE.```
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 triangular, form is A = U**T*T*U; = 'L': Lower triangular, form is A = L*T*L**T.``` [in] N ``` N is INTEGER The order of the matrix A. N >= 0.``` [in] NRHS ``` NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrix B. NRHS >= 0.``` [in] A ``` A is COMPLEX*16 array, dimension (LDA,N) Details of factors computed by ZSYTRF_AA_2STAGE.``` [in] LDA ``` LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N).``` [out] TB ``` TB is COMPLEX*16 array, dimension (LTB) Details of factors computed by ZSYTRF_AA_2STAGE.``` [in] LTB ``` LTB is INTEGER The size of the array TB. LTB >= 4*N.``` [in] IPIV ``` IPIV is INTEGER array, dimension (N) Details of the interchanges as computed by ZSYTRF_AA_2STAGE.``` [in] IPIV2 ``` IPIV2 is INTEGER array, dimension (N) Details of the interchanges as computed by ZSYTRF_AA_2STAGE.``` [in,out] B ``` B is COMPLEX*16 array, dimension (LDB,NRHS) On entry, the right hand side matrix B. On exit, the solution matrix X.``` [in] LDB ``` LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N).``` [out] INFO ``` INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value```

Definition at line 137 of file zsytrs_aa_2stage.f.

139 *
140 * -- LAPACK computational routine --
141 * -- LAPACK is a software package provided by Univ. of Tennessee, --
142 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
143 *
144  IMPLICIT NONE
145 *
146 * .. Scalar Arguments ..
147  CHARACTER UPLO
148  INTEGER N, NRHS, LDA, LTB, LDB, INFO
149 * ..
150 * .. Array Arguments ..
151  INTEGER IPIV( * ), IPIV2( * )
152  COMPLEX*16 A( LDA, * ), TB( * ), B( LDB, * )
153 * ..
154 *
155 * =====================================================================
156 *
157  COMPLEX*16 ONE
158  parameter( one = ( 1.0e+0, 0.0e+0 ) )
159 * ..
160 * .. Local Scalars ..
161  INTEGER LDTB, NB
162  LOGICAL UPPER
163 * ..
164 * .. External Functions ..
165  LOGICAL LSAME
166  EXTERNAL lsame
167 * ..
168 * .. External Subroutines ..
169  EXTERNAL zgbtrs, zlaswp, ztrsm, xerbla
170 * ..
171 * .. Intrinsic Functions ..
172  INTRINSIC max
173 * ..
174 * .. Executable Statements ..
175 *
176  info = 0
177  upper = lsame( uplo, 'U' )
178  IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
179  info = -1
180  ELSE IF( n.LT.0 ) THEN
181  info = -2
182  ELSE IF( nrhs.LT.0 ) THEN
183  info = -3
184  ELSE IF( lda.LT.max( 1, n ) ) THEN
185  info = -5
186  ELSE IF( ltb.LT.( 4*n ) ) THEN
187  info = -7
188  ELSE IF( ldb.LT.max( 1, n ) ) THEN
189  info = -11
190  END IF
191  IF( info.NE.0 ) THEN
192  CALL xerbla( 'ZSYTRS_AA_2STAGE', -info )
193  RETURN
194  END IF
195 *
196 * Quick return if possible
197 *
198  IF( n.EQ.0 .OR. nrhs.EQ.0 )
199  \$ RETURN
200 *
201 * Read NB and compute LDTB
202 *
203  nb = int( tb( 1 ) )
204  ldtb = ltb/n
205 *
206  IF( upper ) THEN
207 *
208 * Solve A*X = B, where A = U**T*T*U.
209 *
210  IF( n.GT.nb ) THEN
211 *
212 * Pivot, P**T * B -> B
213 *
214  CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, 1 )
215 *
216 * Compute (U**T \ B) -> B [ (U**T \P**T * B) ]
217 *
218  CALL ztrsm( 'L', 'U', 'T', 'U', n-nb, nrhs, one, a(1, nb+1),
219  \$ lda, b(nb+1, 1), ldb)
220 *
221  END IF
222 *
223 * Compute T \ B -> B [ T \ (U**T \P**T * B) ]
224 *
225  CALL zgbtrs( 'N', n, nb, nb, nrhs, tb, ldtb, ipiv2, b, ldb,
226  \$ info)
227  IF( n.GT.nb ) THEN
228 *
229 * Compute (U \ B) -> B [ U \ (T \ (U**T \P**T * B) ) ]
230 *
231  CALL ztrsm( 'L', 'U', 'N', 'U', n-nb, nrhs, one, a(1, nb+1),
232  \$ lda, b(nb+1, 1), ldb)
233 *
234 * Pivot, P * B -> B [ P * (U \ (T \ (U**T \P**T * B) )) ]
235 *
236  CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, -1 )
237 *
238  END IF
239 *
240  ELSE
241 *
242 * Solve A*X = B, where A = L*T*L**T.
243 *
244  IF( n.GT.nb ) THEN
245 *
246 * Pivot, P**T * B -> B
247 *
248  CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, 1 )
249 *
250 * Compute (L \ B) -> B [ (L \P**T * B) ]
251 *
252  CALL ztrsm( 'L', 'L', 'N', 'U', n-nb, nrhs, one, a(nb+1, 1),
253  \$ lda, b(nb+1, 1), ldb)
254 *
255  END IF
256 *
257 * Compute T \ B -> B [ T \ (L \P**T * B) ]
258 *
259  CALL zgbtrs( 'N', n, nb, nb, nrhs, tb, ldtb, ipiv2, b, ldb,
260  \$ info)
261  IF( n.GT.nb ) THEN
262 *
263 * Compute (L**T \ B) -> B [ L**T \ (T \ (L \P**T * B) ) ]
264 *
265  CALL ztrsm( 'L', 'L', 'T', 'U', n-nb, nrhs, one, a(nb+1, 1),
266  \$ lda, b(nb+1, 1), ldb)
267 *
268 * Pivot, P * B -> B [ P * (L**T \ (T \ (L \P**T * B) )) ]
269 *
270  CALL zlaswp( nrhs, b, ldb, nb+1, n, ipiv, -1 )
271 *
272  END IF
273  END IF
274 *
275  RETURN
276 *
277 * End of ZSYTRS_AA_2STAGE
278 *
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:60
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM
Definition: ztrsm.f:180
subroutine zgbtrs(TRANS, N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB, INFO)
ZGBTRS
Definition: zgbtrs.f:138
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
Here is the call graph for this function:
Here is the caller graph for this function: