version 1.5, 2010/08/07 13:22:32
|
version 1.15, 2017/06/17 10:54:11
|
Line 1
|
Line 1
|
|
*> \brief \b ZGGBAK |
|
* |
|
* =========== DOCUMENTATION =========== |
|
* |
|
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
|
* |
|
*> \htmlonly |
|
*> Download ZGGBAK + dependencies |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zggbak.f"> |
|
*> [TGZ]</a> |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zggbak.f"> |
|
*> [ZIP]</a> |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zggbak.f"> |
|
*> [TXT]</a> |
|
*> \endhtmlonly |
|
* |
|
* Definition: |
|
* =========== |
|
* |
|
* SUBROUTINE ZGGBAK( JOB, SIDE, N, ILO, IHI, LSCALE, RSCALE, M, V, |
|
* LDV, INFO ) |
|
* |
|
* .. Scalar Arguments .. |
|
* CHARACTER JOB, SIDE |
|
* INTEGER IHI, ILO, INFO, LDV, M, N |
|
* .. |
|
* .. Array Arguments .. |
|
* DOUBLE PRECISION LSCALE( * ), RSCALE( * ) |
|
* COMPLEX*16 V( LDV, * ) |
|
* .. |
|
* |
|
* |
|
*> \par Purpose: |
|
* ============= |
|
*> |
|
*> \verbatim |
|
*> |
|
*> ZGGBAK forms the right or left eigenvectors of a complex generalized |
|
*> eigenvalue problem A*x = lambda*B*x, by backward transformation on |
|
*> the computed eigenvectors of the balanced pair of matrices output by |
|
*> ZGGBAL. |
|
*> \endverbatim |
|
* |
|
* Arguments: |
|
* ========== |
|
* |
|
*> \param[in] JOB |
|
*> \verbatim |
|
*> JOB is CHARACTER*1 |
|
*> Specifies the type of backward transformation required: |
|
*> = 'N': do nothing, return immediately; |
|
*> = 'P': do backward transformation for permutation only; |
|
*> = 'S': do backward transformation for scaling only; |
|
*> = 'B': do backward transformations for both permutation and |
|
*> scaling. |
|
*> JOB must be the same as the argument JOB supplied to ZGGBAL. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] SIDE |
|
*> \verbatim |
|
*> SIDE is CHARACTER*1 |
|
*> = 'R': V contains right eigenvectors; |
|
*> = 'L': V contains left eigenvectors. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] N |
|
*> \verbatim |
|
*> N is INTEGER |
|
*> The number of rows of the matrix V. N >= 0. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] ILO |
|
*> \verbatim |
|
*> ILO is INTEGER |
|
*> \endverbatim |
|
*> |
|
*> \param[in] IHI |
|
*> \verbatim |
|
*> IHI is INTEGER |
|
*> The integers ILO and IHI determined by ZGGBAL. |
|
*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] LSCALE |
|
*> \verbatim |
|
*> LSCALE is DOUBLE PRECISION array, dimension (N) |
|
*> Details of the permutations and/or scaling factors applied |
|
*> to the left side of A and B, as returned by ZGGBAL. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] RSCALE |
|
*> \verbatim |
|
*> RSCALE is DOUBLE PRECISION array, dimension (N) |
|
*> Details of the permutations and/or scaling factors applied |
|
*> to the right side of A and B, as returned by ZGGBAL. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] M |
|
*> \verbatim |
|
*> M is INTEGER |
|
*> The number of columns of the matrix V. M >= 0. |
|
*> \endverbatim |
|
*> |
|
*> \param[in,out] V |
|
*> \verbatim |
|
*> V is COMPLEX*16 array, dimension (LDV,M) |
|
*> On entry, the matrix of right or left eigenvectors to be |
|
*> transformed, as returned by ZTGEVC. |
|
*> On exit, V is overwritten by the transformed eigenvectors. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] LDV |
|
*> \verbatim |
|
*> LDV is INTEGER |
|
*> The leading dimension of the matrix V. LDV >= max(1,N). |
|
*> \endverbatim |
|
*> |
|
*> \param[out] INFO |
|
*> \verbatim |
|
*> INFO is INTEGER |
|
*> = 0: successful exit. |
|
*> < 0: if INFO = -i, the i-th argument had an illegal value. |
|
*> \endverbatim |
|
* |
|
* Authors: |
|
* ======== |
|
* |
|
*> \author Univ. of Tennessee |
|
*> \author Univ. of California Berkeley |
|
*> \author Univ. of Colorado Denver |
|
*> \author NAG Ltd. |
|
* |
|
*> \date December 2016 |
|
* |
|
*> \ingroup complex16GBcomputational |
|
* |
|
*> \par Further Details: |
|
* ===================== |
|
*> |
|
*> \verbatim |
|
*> |
|
*> See R.C. Ward, Balancing the generalized eigenvalue problem, |
|
*> SIAM J. Sci. Stat. Comp. 2 (1981), 141-152. |
|
*> \endverbatim |
|
*> |
|
* ===================================================================== |
SUBROUTINE ZGGBAK( JOB, SIDE, N, ILO, IHI, LSCALE, RSCALE, M, V, |
SUBROUTINE ZGGBAK( JOB, SIDE, N, ILO, IHI, LSCALE, RSCALE, M, V, |
$ LDV, INFO ) |
$ LDV, INFO ) |
* |
* |
* -- LAPACK routine (version 3.2) -- |
* -- LAPACK computational routine (version 3.7.0) -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* November 2006 |
* December 2016 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER JOB, SIDE |
CHARACTER JOB, SIDE |
Line 15
|
Line 162
|
COMPLEX*16 V( LDV, * ) |
COMPLEX*16 V( LDV, * ) |
* .. |
* .. |
* |
* |
* Purpose |
|
* ======= |
|
* |
|
* ZGGBAK forms the right or left eigenvectors of a complex generalized |
|
* eigenvalue problem A*x = lambda*B*x, by backward transformation on |
|
* the computed eigenvectors of the balanced pair of matrices output by |
|
* ZGGBAL. |
|
* |
|
* Arguments |
|
* ========= |
|
* |
|
* JOB (input) CHARACTER*1 |
|
* Specifies the type of backward transformation required: |
|
* = 'N': do nothing, return immediately; |
|
* = 'P': do backward transformation for permutation only; |
|
* = 'S': do backward transformation for scaling only; |
|
* = 'B': do backward transformations for both permutation and |
|
* scaling. |
|
* JOB must be the same as the argument JOB supplied to ZGGBAL. |
|
* |
|
* SIDE (input) CHARACTER*1 |
|
* = 'R': V contains right eigenvectors; |
|
* = 'L': V contains left eigenvectors. |
|
* |
|
* N (input) INTEGER |
|
* The number of rows of the matrix V. N >= 0. |
|
* |
|
* ILO (input) INTEGER |
|
* IHI (input) INTEGER |
|
* The integers ILO and IHI determined by ZGGBAL. |
|
* 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. |
|
* |
|
* LSCALE (input) DOUBLE PRECISION array, dimension (N) |
|
* Details of the permutations and/or scaling factors applied |
|
* to the left side of A and B, as returned by ZGGBAL. |
|
* |
|
* RSCALE (input) DOUBLE PRECISION array, dimension (N) |
|
* Details of the permutations and/or scaling factors applied |
|
* to the right side of A and B, as returned by ZGGBAL. |
|
* |
|
* M (input) INTEGER |
|
* The number of columns of the matrix V. M >= 0. |
|
* |
|
* V (input/output) COMPLEX*16 array, dimension (LDV,M) |
|
* On entry, the matrix of right or left eigenvectors to be |
|
* transformed, as returned by ZTGEVC. |
|
* On exit, V is overwritten by the transformed eigenvectors. |
|
* |
|
* LDV (input) INTEGER |
|
* The leading dimension of the matrix V. LDV >= max(1,N). |
|
* |
|
* INFO (output) INTEGER |
|
* = 0: successful exit. |
|
* < 0: if INFO = -i, the i-th argument had an illegal value. |
|
* |
|
* Further Details |
|
* =============== |
|
* |
|
* See R.C. Ward, Balancing the generalized eigenvalue problem, |
|
* SIAM J. Sci. Stat. Comp. 2 (1981), 141-152. |
|
* |
|
* ===================================================================== |
* ===================================================================== |
* |
* |
* .. Local Scalars .. |
* .. Local Scalars .. |
Line 90
|
Line 176
|
EXTERNAL XERBLA, ZDSCAL, ZSWAP |
EXTERNAL XERBLA, ZDSCAL, ZSWAP |
* .. |
* .. |
* .. Intrinsic Functions .. |
* .. Intrinsic Functions .. |
INTRINSIC MAX |
INTRINSIC MAX, INT |
* .. |
* .. |
* .. Executable Statements .. |
* .. Executable Statements .. |
* |
* |
Line 170
|
Line 256
|
IF( ILO.EQ.1 ) |
IF( ILO.EQ.1 ) |
$ GO TO 50 |
$ GO TO 50 |
DO 40 I = ILO - 1, 1, -1 |
DO 40 I = ILO - 1, 1, -1 |
K = RSCALE( I ) |
K = INT(RSCALE( I )) |
IF( K.EQ.I ) |
IF( K.EQ.I ) |
$ GO TO 40 |
$ GO TO 40 |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
Line 180
|
Line 266
|
IF( IHI.EQ.N ) |
IF( IHI.EQ.N ) |
$ GO TO 70 |
$ GO TO 70 |
DO 60 I = IHI + 1, N |
DO 60 I = IHI + 1, N |
K = RSCALE( I ) |
K = INT(RSCALE( I )) |
IF( K.EQ.I ) |
IF( K.EQ.I ) |
$ GO TO 60 |
$ GO TO 60 |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
Line 194
|
Line 280
|
IF( ILO.EQ.1 ) |
IF( ILO.EQ.1 ) |
$ GO TO 90 |
$ GO TO 90 |
DO 80 I = ILO - 1, 1, -1 |
DO 80 I = ILO - 1, 1, -1 |
K = LSCALE( I ) |
K = INT(LSCALE( I )) |
IF( K.EQ.I ) |
IF( K.EQ.I ) |
$ GO TO 80 |
$ GO TO 80 |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
Line 204
|
Line 290
|
IF( IHI.EQ.N ) |
IF( IHI.EQ.N ) |
$ GO TO 110 |
$ GO TO 110 |
DO 100 I = IHI + 1, N |
DO 100 I = IHI + 1, N |
K = LSCALE( I ) |
K = INT(LSCALE( I )) |
IF( K.EQ.I ) |
IF( K.EQ.I ) |
$ GO TO 100 |
$ GO TO 100 |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL ZSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |