version 1.3, 2010/08/06 15:28:37
|
version 1.13, 2015/11/26 11:44:16
|
Line 1
|
Line 1
|
|
*> \brief \b DGGBAK |
|
* |
|
* =========== DOCUMENTATION =========== |
|
* |
|
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
|
* |
|
*> \htmlonly |
|
*> Download DGGBAK + dependencies |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dggbak.f"> |
|
*> [TGZ]</a> |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dggbak.f"> |
|
*> [ZIP]</a> |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggbak.f"> |
|
*> [TXT]</a> |
|
*> \endhtmlonly |
|
* |
|
* Definition: |
|
* =========== |
|
* |
|
* SUBROUTINE DGGBAK( 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( * ), V( LDV, * ) |
|
* .. |
|
* |
|
* |
|
*> \par Purpose: |
|
* ============= |
|
*> |
|
*> \verbatim |
|
*> |
|
*> DGGBAK forms the right or left eigenvectors of a real generalized |
|
*> eigenvalue problem A*x = lambda*B*x, by backward transformation on |
|
*> the computed eigenvectors of the balanced pair of matrices output by |
|
*> DGGBAL. |
|
*> \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 DGGBAL. |
|
*> \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 DGGBAL. |
|
*> 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 DGGBAL. |
|
*> \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 DGGBAL. |
|
*> \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 DOUBLE PRECISION array, dimension (LDV,M) |
|
*> On entry, the matrix of right or left eigenvectors to be |
|
*> transformed, as returned by DTGEVC. |
|
*> 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 November 2015 |
|
* |
|
*> \ingroup doubleGBcomputational |
|
* |
|
*> \par Further Details: |
|
* ===================== |
|
*> |
|
*> \verbatim |
|
*> |
|
*> See R.C. Ward, Balancing the generalized eigenvalue problem, |
|
*> SIAM J. Sci. Stat. Comp. 2 (1981), 141-152. |
|
*> \endverbatim |
|
*> |
|
* ===================================================================== |
SUBROUTINE DGGBAK( JOB, SIDE, N, ILO, IHI, LSCALE, RSCALE, M, V, |
SUBROUTINE DGGBAK( JOB, SIDE, N, ILO, IHI, LSCALE, RSCALE, M, V, |
$ LDV, INFO ) |
$ LDV, INFO ) |
* |
* |
* -- LAPACK routine (version 3.2) -- |
* -- LAPACK computational routine (version 3.6.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 |
* November 2015 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER JOB, SIDE |
CHARACTER JOB, SIDE |
Line 14
|
Line 160
|
DOUBLE PRECISION LSCALE( * ), RSCALE( * ), V( LDV, * ) |
DOUBLE PRECISION LSCALE( * ), RSCALE( * ), V( LDV, * ) |
* .. |
* .. |
* |
* |
* Purpose |
|
* ======= |
|
* |
|
* DGGBAK forms the right or left eigenvectors of a real generalized |
|
* eigenvalue problem A*x = lambda*B*x, by backward transformation on |
|
* the computed eigenvectors of the balanced pair of matrices output by |
|
* DGGBAL. |
|
* |
|
* 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 DGGBAL. |
|
* |
|
* 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 DGGBAL. |
|
* 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 DGGBAL. |
|
* |
|
* 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 DGGBAL. |
|
* |
|
* M (input) INTEGER |
|
* The number of columns of the matrix V. M >= 0. |
|
* |
|
* V (input/output) DOUBLE PRECISION array, dimension (LDV,M) |
|
* On entry, the matrix of right or left eigenvectors to be |
|
* transformed, as returned by DTGEVC. |
|
* 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 89
|
Line 174
|
EXTERNAL DSCAL, DSWAP, XERBLA |
EXTERNAL DSCAL, DSWAP, XERBLA |
* .. |
* .. |
* .. Intrinsic Functions .. |
* .. Intrinsic Functions .. |
INTRINSIC MAX |
INTRINSIC MAX, INT |
* .. |
* .. |
* .. Executable Statements .. |
* .. Executable Statements .. |
* |
* |
Line 170
|
Line 255
|
$ 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 DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
Line 180
|
Line 265
|
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 DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
Line 194
|
Line 279
|
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 DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
Line 204
|
Line 289
|
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 DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |
CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) |