SUBROUTINE ZTGSEN( IJOB, WANTQ, WANTZ, SELECT, N, A, LDA, B, LDB, * ALPHA, BETA, Q, LDQ, Z, LDZ, M, PL, PR, DIF, WORK, LWORK, IWORK, * LIWORK, INFO) DOUBLE COMPLEX A(LDA,*), B(LDB,*), ALPHA(*), BETA(*), Q(LDQ,*), Z(LDZ,*), WORK(*) INTEGER IJOB, N, LDA, LDB, LDQ, LDZ, M, LWORK, LIWORK, INFO INTEGER IWORK(*) LOGICAL WANTQ, WANTZ LOGICAL SELECT(*) DOUBLE PRECISION PL, PR DOUBLE PRECISION DIF(*) SUBROUTINE ZTGSEN_64( IJOB, WANTQ, WANTZ, SELECT, N, A, LDA, B, LDB, * ALPHA, BETA, Q, LDQ, Z, LDZ, M, PL, PR, DIF, WORK, LWORK, IWORK, * LIWORK, INFO) DOUBLE COMPLEX A(LDA,*), B(LDB,*), ALPHA(*), BETA(*), Q(LDQ,*), Z(LDZ,*), WORK(*) INTEGER*8 IJOB, N, LDA, LDB, LDQ, LDZ, M, LWORK, LIWORK, INFO INTEGER*8 IWORK(*) LOGICAL*8 WANTQ, WANTZ LOGICAL*8 SELECT(*) DOUBLE PRECISION PL, PR DOUBLE PRECISION DIF(*)
SUBROUTINE TGSEN( IJOB, WANTQ, WANTZ, SELECT, N, A, [LDA], B, [LDB], * ALPHA, BETA, Q, [LDQ], Z, [LDZ], M, PL, PR, DIF, [WORK], [LWORK], * [IWORK], [LIWORK], [INFO]) COMPLEX(8), DIMENSION(:) :: ALPHA, BETA, WORK COMPLEX(8), DIMENSION(:,:) :: A, B, Q, Z INTEGER :: IJOB, N, LDA, LDB, LDQ, LDZ, M, LWORK, LIWORK, INFO INTEGER, DIMENSION(:) :: IWORK LOGICAL :: WANTQ, WANTZ LOGICAL, DIMENSION(:) :: SELECT REAL(8) :: PL, PR REAL(8), DIMENSION(:) :: DIF SUBROUTINE TGSEN_64( IJOB, WANTQ, WANTZ, SELECT, N, A, [LDA], B, * [LDB], ALPHA, BETA, Q, [LDQ], Z, [LDZ], M, PL, PR, DIF, [WORK], * [LWORK], [IWORK], [LIWORK], [INFO]) COMPLEX(8), DIMENSION(:) :: ALPHA, BETA, WORK COMPLEX(8), DIMENSION(:,:) :: A, B, Q, Z INTEGER(8) :: IJOB, N, LDA, LDB, LDQ, LDZ, M, LWORK, LIWORK, INFO INTEGER(8), DIMENSION(:) :: IWORK LOGICAL(8) :: WANTQ, WANTZ LOGICAL(8), DIMENSION(:) :: SELECT REAL(8) :: PL, PR REAL(8), DIMENSION(:) :: DIF
void ztgsen(int ijob, logical wantq, logical wantz, logical *select, int n, doublecomplex *a, int lda, doublecomplex *b, int ldb, doublecomplex *alpha, doublecomplex *beta, doublecomplex *q, int ldq, doublecomplex *z, int ldz, int *m, double *pl, double *pr, double *dif, int *info);
void ztgsen_64(long ijob, logical wantq, logical wantz, logical *select, long n, doublecomplex *a, long lda, doublecomplex *b, long ldb, doublecomplex *alpha, doublecomplex *beta, doublecomplex *q, long ldq, doublecomplex *z, long ldz, long *m, double *pl, double *pr, double *dif, long *info);
ZTGSEN also computes the generalized eigenvalues
w(j)= ALPHA(j) / BETA(j)
of the reordered matrix pair (A, B).
Optionally, the routine computes estimates of reciprocal condition numbers for eigenvalues and eigenspaces. These are Difu[(A11,B11), (A22,B22)] and Difl[(A11,B11), (A22,B22)], i.e. the separation(s) between the matrix pairs (A11, B11) and (A22,B22) that correspond to the selected cluster and the eigenvalues outside the cluster, resp., and norms of ``projections'' onto left and right eigenspaces w.r.t. the selected cluster in the (1,1)-block.
.FALSE.: do not update Q.
.FALSE.: do not update Z.
0 < PL, PR <= 1. If M = 0 or M = N, PL = PR = 1. If IJOB = 0, 2, or 3 PL, PR are not referenced.
If IJOB = 2 or 4, DIF(1:2) are F-norm-based upper bounds on
Difu and Difl. If IJOB = 3 or 5, DIF(1:2) are 1-norm-based estimates of Difu and Difl, computed using reversed communication with CLACON. If M = 0 or N, DIF(1:2) = F-norm([A, B]). If IJOB = 0 or 1, DIF is not referenced.
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
If LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the IWORK array, returns this value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA.