 LAPACK  3.8.0 LAPACK: Linear Algebra PACKage

## ◆ csytrs_aa_2stage()

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

CSYTRS_AA_2STAGE

Download CSYTRS_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]

Purpose:
``` CSYTRS_AA_2STAGE solves a system of linear equations A*X = B with a complex
symmetric matrix A using the factorization A = U*T*U**T or
A = L*T*L**T computed by CSYTRF_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*U**T; = '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 array, dimension (LDA,N) Details of factors computed by CSYTRF_AA_2STAGE.``` [in] LDA ``` LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N).``` [out] TB ``` TB is COMPLEX array, dimension (LTB) Details of factors computed by CSYTRF_AA_2STAGE.``` [in] LTB ` The size of the array TB. LTB >= 4*N.` [in] IPIV ``` IPIV is INTEGER array, dimension (N) Details of the interchanges as computed by CSYTRF_AA_2STAGE.``` [in] IPIV2 ``` IPIV2 is INTEGER array, dimension (N) Details of the interchanges as computed by CSYTRF_AA_2STAGE.``` [in,out] B ``` B is COMPLEX 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```
Date
November 2017

Definition at line 140 of file csytrs_aa_2stage.f.

140 *
141 * -- LAPACK computational routine (version 3.8.0) --
142 * -- LAPACK is a software package provided by Univ. of Tennessee, --
143 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
144 * November 2017
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 a( lda, * ), tb( * ), b( ldb, * )
155 * ..
156 *
157 * =====================================================================
158 *
159  COMPLEX one
160  parameter( one = ( 1.0e+0, 0.0e+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 cgbtrs, claswp, ctrsm, 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( 'CSYTRS_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*T*U**T.
211 *
212  IF( n.GT.nb ) THEN
213 *
214 * Pivot, P**T * B
215 *
216  CALL claswp( nrhs, b, ldb, nb+1, n, ipiv, 1 )
217 *
218 * Compute (U**T \P**T * B) -> B [ (U**T \P**T * B) ]
219 *
220  CALL ctrsm( 'L', 'U', 'T', '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**T \P**T * B) ]
226 *
227  CALL cgbtrs( '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**T \P**T * B) ) ]
232 *
233  CALL ctrsm( 'L', 'U', 'N', 'U', n-nb, nrhs, one, a(1, nb+1),
234  \$ lda, b(nb+1, 1), ldb)
235 *
236 * Pivot, P * B [ P * (U \ (T \ (U**T \P**T * B) )) ]
237 *
238  CALL claswp( 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**T.
245 *
246  IF( n.GT.nb ) THEN
247 *
248 * Pivot, P**T * B
249 *
250  CALL claswp( nrhs, b, ldb, nb+1, n, ipiv, 1 )
251 *
252 * Compute (L \P**T * B) -> B [ (L \P**T * B) ]
253 *
254  CALL ctrsm( '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 cgbtrs( 'N', n, nb, nb, nrhs, tb, ldtb, ipiv2, b, ldb,
262  \$ info)
263  IF( n.GT.nb ) THEN
264 *
265 * Compute (L**T \ B) -> B [ L**T \ (T \ (L \P**T * B) ) ]
266 *
267  CALL ctrsm( 'L', 'L', 'T', 'U', n-nb, nrhs, one, a(nb+1, 1),
268  \$ lda, b(nb+1, 1), ldb)
269 *
270 * Pivot, P * B [ P * (L**T \ (T \ (L \P**T * B) )) ]
271 *
272  CALL claswp( nrhs, b, ldb, nb+1, n, ipiv, -1 )
273 *
274  END IF
275  END IF
276 *
277  RETURN
278 *
279 * End of CSYTRS_AA_2STAGE
280 *
subroutine claswp(N, A, LDA, K1, K2, IPIV, INCX)
CLASWP performs a series of row interchanges on a general rectangular matrix.
Definition: claswp.f:117
subroutine cgbtrs(TRANS, N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB, INFO)
CGBTRS
Definition: cgbtrs.f:140
subroutine ctrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRSM
Definition: ctrsm.f:182
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:62
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:55
Here is the call graph for this function:
Here is the caller graph for this function: