 LAPACK  3.8.0 LAPACK: Linear Algebra PACKage

## ◆ ztrexc()

 subroutine ztrexc ( character COMPQ, integer N, complex*16, dimension( ldt, * ) T, integer LDT, complex*16, dimension( ldq, * ) Q, integer LDQ, integer IFST, integer ILST, integer INFO )

ZTREXC

Purpose:
``` ZTREXC reorders the Schur factorization of a complex matrix
A = Q*T*Q**H, so that the diagonal element of T with row index IFST
is moved to row ILST.

The Schur form T is reordered by a unitary similarity transformation
Z**H*T*Z, and optionally the matrix Q of Schur vectors is updated by
postmultplying it with Z.```
Parameters
 [in] COMPQ ``` COMPQ is CHARACTER*1 = 'V': update the matrix Q of Schur vectors; = 'N': do not update Q.``` [in] N ``` N is INTEGER The order of the matrix T. N >= 0. If N == 0 arguments ILST and IFST may be any value.``` [in,out] T ``` T is COMPLEX*16 array, dimension (LDT,N) On entry, the upper triangular matrix T. On exit, the reordered upper triangular matrix.``` [in] LDT ``` LDT is INTEGER The leading dimension of the array T. LDT >= max(1,N).``` [in,out] Q ``` Q is COMPLEX*16 array, dimension (LDQ,N) On entry, if COMPQ = 'V', the matrix Q of Schur vectors. On exit, if COMPQ = 'V', Q has been postmultiplied by the unitary transformation matrix Z which reorders T. If COMPQ = 'N', Q is not referenced.``` [in] LDQ ``` LDQ is INTEGER The leading dimension of the array Q. LDQ >= 1, and if COMPQ = 'V', LDQ >= max(1,N).``` [in] IFST ` IFST is INTEGER` [in] ILST ``` ILST is INTEGER Specify the reordering of the diagonal elements of T: The element with row index IFST is moved to row ILST by a sequence of transpositions between adjacent elements. 1 <= IFST <= N; 1 <= ILST <= N.``` [out] INFO ``` INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value```
Date
December 2016

Definition at line 128 of file ztrexc.f.

128 *
129 * -- LAPACK computational routine (version 3.7.0) --
130 * -- LAPACK is a software package provided by Univ. of Tennessee, --
131 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
132 * December 2016
133 *
134 * .. Scalar Arguments ..
135  CHARACTER compq
136  INTEGER ifst, ilst, info, ldq, ldt, n
137 * ..
138 * .. Array Arguments ..
139  COMPLEX*16 q( ldq, * ), t( ldt, * )
140 * ..
141 *
142 * =====================================================================
143 *
144 * .. Local Scalars ..
145  LOGICAL wantq
146  INTEGER k, m1, m2, m3
147  DOUBLE PRECISION cs
148  COMPLEX*16 sn, t11, t22, temp
149 * ..
150 * .. External Functions ..
151  LOGICAL lsame
152  EXTERNAL lsame
153 * ..
154 * .. External Subroutines ..
155  EXTERNAL xerbla, zlartg, zrot
156 * ..
157 * .. Intrinsic Functions ..
158  INTRINSIC dconjg, max
159 * ..
160 * .. Executable Statements ..
161 *
162 * Decode and test the input parameters.
163 *
164  info = 0
165  wantq = lsame( compq, 'V' )
166  IF( .NOT.lsame( compq, 'N' ) .AND. .NOT.wantq ) THEN
167  info = -1
168  ELSE IF( n.LT.0 ) THEN
169  info = -2
170  ELSE IF( ldt.LT.max( 1, n ) ) THEN
171  info = -4
172  ELSE IF( ldq.LT.1 .OR. ( wantq .AND. ldq.LT.max( 1, n ) ) ) THEN
173  info = -6
174  ELSE IF(( ifst.LT.1 .OR. ifst.GT.n ).AND.( n.GT.0 )) THEN
175  info = -7
176  ELSE IF(( ilst.LT.1 .OR. ilst.GT.n ).AND.( n.GT.0 )) THEN
177  info = -8
178  END IF
179  IF( info.NE.0 ) THEN
180  CALL xerbla( 'ZTREXC', -info )
181  RETURN
182  END IF
183 *
184 * Quick return if possible
185 *
186  IF( n.LE.1 .OR. ifst.EQ.ilst )
187  \$ RETURN
188 *
189  IF( ifst.LT.ilst ) THEN
190 *
191 * Move the IFST-th diagonal element forward down the diagonal.
192 *
193  m1 = 0
194  m2 = -1
195  m3 = 1
196  ELSE
197 *
198 * Move the IFST-th diagonal element backward up the diagonal.
199 *
200  m1 = -1
201  m2 = 0
202  m3 = -1
203  END IF
204 *
205  DO 10 k = ifst + m1, ilst + m2, m3
206 *
207 * Interchange the k-th and (k+1)-th diagonal elements.
208 *
209  t11 = t( k, k )
210  t22 = t( k+1, k+1 )
211 *
212 * Determine the transformation to perform the interchange.
213 *
214  CALL zlartg( t( k, k+1 ), t22-t11, cs, sn, temp )
215 *
216 * Apply transformation to the matrix T.
217 *
218  IF( k+2.LE.n )
219  \$ CALL zrot( n-k-1, t( k, k+2 ), ldt, t( k+1, k+2 ), ldt, cs,
220  \$ sn )
221  CALL zrot( k-1, t( 1, k ), 1, t( 1, k+1 ), 1, cs,
222  \$ dconjg( sn ) )
223 *
224  t( k, k ) = t22
225  t( k+1, k+1 ) = t11
226 *
227  IF( wantq ) THEN
228 *
229 * Accumulate transformation in the matrix Q.
230 *
231  CALL zrot( n, q( 1, k ), 1, q( 1, k+1 ), 1, cs,
232  \$ dconjg( sn ) )
233  END IF
234 *
235  10 CONTINUE
236 *
237  RETURN
238 *
239 * End of ZTREXC
240 *
subroutine zrot(N, CX, INCX, CY, INCY, C, S)
ZROT applies a plane rotation with real cosine and complex sine to a pair of complex vectors...
Definition: zrot.f:105
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:62
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:55
subroutine zlartg(F, G, CS, SN, R)
ZLARTG generates a plane rotation with real cosine and complex sine.
Definition: zlartg.f:105
Here is the call graph for this function:
Here is the caller graph for this function: