ESMF_DTREXC Subroutine

subroutine ESMF_DTREXC(COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, INFO)

\brief \b ESMF_DTREXC \htmlonly Download ESMF_DTREXC + dependencies [TGZ] [ZIP] [TXT] \endhtmlonly \par Purpose:

\verbatim

ESMF_DTREXC reorders the real Schur factorization of a real matrix A = QTQ**T, so that the diagonal block of T with row index IFST is moved to row ILST.

The real Schur form T is reordered by an orthogonal similarity transformation ZTTZ, and optionally the matrix Q of Schur vectors is updated by postmultiplying it with Z.

T must be in Schur canonical form (as returned by ESMF_DHSEQR), that is, block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diagonal block has its diagonal elements equal and its off-diagonal elements of opposite sign. \endverbatim \param[in] COMPQ \verbatim COMPQ is CHARACTER*1 = ‘V’: update the matrix Q of Schur vectors; = ‘N’: do not update Q. \endverbatim

\param[in] N \verbatim N is INTEGER The order of the matrix T. N >= 0. If N == 0 arguments ILST and IFST may be any value. \endverbatim

\param[in,out] T \verbatim T is DOUBLE PRECISION array, dimension (LDT,N) On entry, the upper quasi-triangular matrix T, in Schur Schur canonical form. On exit, the reordered upper quasi-triangular matrix, again in Schur canonical form. \endverbatim

\param[in] LDT \verbatim LDT is INTEGER The leading dimension of the array T. LDT >= max(1,N). \endverbatim

\param[in,out] Q \verbatim Q is DOUBLE PRECISION 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 orthogonal transformation matrix Z which reorders T. If COMPQ = ‘N’, Q is not referenced. \endverbatim

\param[in] LDQ \verbatim LDQ is INTEGER The leading dimension of the array Q. LDQ >= 1, and if COMPQ = ‘V’, LDQ >= max(1,N). \endverbatim

\param[in,out] IFST \verbatim IFST is INTEGER \endverbatim

\param[in,out] ILST \verbatim ILST is INTEGER

     Specify the reordering of the diagonal blocks of T.
     The block with row index IFST is moved to row ILST, by a
     sequence of transpositions between adjacent blocks.
     On exit, if IFST pointed on entry to the second row of a
     2-by-2 block, it is changed to point to the first row; ILST
     always points to the first row of the block in its final
     position (which may differ from its input value by +1 or -1).
     1 <= IFST <= N; 1 <= ILST <= N.

\endverbatim

\param[out] WORK \verbatim WORK is DOUBLE PRECISION array, dimension (N) \endverbatim

\param[out] INFO \verbatim INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value = 1: two adjacent blocks were too close to swap (the problem is very ill-conditioned); T may have been partially reordered, and ILST points to the first row of the current position of the block being moved. \endverbatim \author Univ. of Tennessee \author Univ. of California Berkeley \author Univ. of Colorado Denver \author NAG Ltd. \date December 2016 \ingroup doubleOTHERcomputational

Arguments

Type IntentOptional Attributes Name
character(len=1) :: COMPQ
integer :: N
double precision :: T(LDT,*)
integer :: LDT
double precision :: Q(LDQ,*)
integer :: LDQ
integer :: IFST
integer :: ILST
double precision :: WORK(*)
integer :: INFO