--- rpl/lapack/lapack/dggbak.f 2010/08/13 21:03:46 1.6 +++ rpl/lapack/lapack/dggbak.f 2023/08/07 08:38:50 1.18 @@ -1,10 +1,153 @@ +*> \brief \b DGGBAK +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DGGBAK + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \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. +* +*> \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, $ LDV, INFO ) * -* -- LAPACK routine (version 3.2) -- +* -- LAPACK computational routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* November 2006 * * .. Scalar Arguments .. CHARACTER JOB, SIDE @@ -14,67 +157,6 @@ 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 .. @@ -89,7 +171,7 @@ EXTERNAL DSCAL, DSWAP, XERBLA * .. * .. Intrinsic Functions .. - INTRINSIC MAX + INTRINSIC MAX, INT * .. * .. Executable Statements .. * @@ -170,7 +252,7 @@ $ GO TO 50 * DO 40 I = ILO - 1, 1, -1 - K = RSCALE( I ) + K = INT(RSCALE( I )) IF( K.EQ.I ) $ GO TO 40 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) @@ -180,7 +262,7 @@ IF( IHI.EQ.N ) $ GO TO 70 DO 60 I = IHI + 1, N - K = RSCALE( I ) + K = INT(RSCALE( I )) IF( K.EQ.I ) $ GO TO 60 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) @@ -194,7 +276,7 @@ IF( ILO.EQ.1 ) $ GO TO 90 DO 80 I = ILO - 1, 1, -1 - K = LSCALE( I ) + K = INT(LSCALE( I )) IF( K.EQ.I ) $ GO TO 80 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) @@ -204,7 +286,7 @@ IF( IHI.EQ.N ) $ GO TO 110 DO 100 I = IHI + 1, N - K = LSCALE( I ) + K = INT(LSCALE( I )) IF( K.EQ.I ) $ GO TO 100 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV )