Diff for /rpl/lapack/lapack/dhgeqz.f between versions 1.12 and 1.21

version 1.12, 2012/08/22 09:48:15 version 1.21, 2023/08/07 08:38:52
Line 2 Line 2
 *  *
 *  =========== DOCUMENTATION ===========  *  =========== DOCUMENTATION ===========
 *  *
 * Online html documentation available at   * Online html documentation available at
 *            http://www.netlib.org/lapack/explore-html/   *            http://www.netlib.org/lapack/explore-html/
 *  *
 *> \htmlonly  *> \htmlonly
 *> Download DHGEQZ + dependencies   *> Download DHGEQZ + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dhgeqz.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dhgeqz.f">
 *> [TGZ]</a>   *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dhgeqz.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dhgeqz.f">
 *> [ZIP]</a>   *> [ZIP]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhgeqz.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhgeqz.f">
 *> [TXT]</a>  *> [TXT]</a>
 *> \endhtmlonly   *> \endhtmlonly
 *  *
 *  Definition:  *  Definition:
 *  ===========  *  ===========
Line 21 Line 21
 *       SUBROUTINE DHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT,  *       SUBROUTINE DHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT,
 *                          ALPHAR, ALPHAI, BETA, Q, LDQ, Z, LDZ, WORK,  *                          ALPHAR, ALPHAI, BETA, Q, LDQ, Z, LDZ, WORK,
 *                          LWORK, INFO )  *                          LWORK, INFO )
 *   *
 *       .. Scalar Arguments ..  *       .. Scalar Arguments ..
 *       CHARACTER          COMPQ, COMPZ, JOB  *       CHARACTER          COMPQ, COMPZ, JOB
 *       INTEGER            IHI, ILO, INFO, LDH, LDQ, LDT, LDZ, LWORK, N  *       INTEGER            IHI, ILO, INFO, LDH, LDQ, LDT, LDZ, LWORK, N
Line 31 Line 31
 *      $                   H( LDH, * ), Q( LDQ, * ), T( LDT, * ),  *      $                   H( LDH, * ), Q( LDQ, * ), T( LDT, * ),
 *      $                   WORK( * ), Z( LDZ, * )  *      $                   WORK( * ), Z( LDZ, * )
 *       ..  *       ..
 *    *
 *  *
 *> \par Purpose:  *> \par Purpose:
 *  =============  *  =============
Line 50 Line 50
 *>  *>
 *> If JOB='S', then the Hessenberg-triangular pair (H,T) is  *> If JOB='S', then the Hessenberg-triangular pair (H,T) is
 *> also reduced to generalized Schur form,  *> also reduced to generalized Schur form,
 *>   *>
 *>    H = Q*S*Z**T,  T = Q*P*Z**T,  *>    H = Q*S*Z**T,  T = Q*P*Z**T,
 *>   *>
 *> where Q and Z are orthogonal matrices, P is an upper triangular  *> where Q and Z are orthogonal matrices, P is an upper triangular
 *> matrix, and S is a quasi-triangular matrix with 1-by-1 and 2-by-2  *> matrix, and S is a quasi-triangular matrix with 1-by-1 and 2-by-2
 *> diagonal blocks.  *> diagonal blocks.
Line 75 Line 75
 *> generalized Schur factorization of (A,B):  *> generalized Schur factorization of (A,B):
 *>  *>
 *>    A = (Q1*Q)*S*(Z1*Z)**T,  B = (Q1*Q)*P*(Z1*Z)**T.  *>    A = (Q1*Q)*S*(Z1*Z)**T,  B = (Q1*Q)*P*(Z1*Z)**T.
 *>   *>
 *> To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently,  *> To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently,
 *> of (A,B)) are computed as a pair of values (alpha,beta), where alpha is  *> of (A,B)) are computed as a pair of values (alpha,beta), where alpha is
 *> complex and beta real.  *> complex and beta real.
Line 86 Line 86
 *> alternate form of the GNEP  *> alternate form of the GNEP
 *>    mu*A*y = B*y.  *>    mu*A*y = B*y.
 *> Real eigenvalues can be read directly from the generalized Schur  *> Real eigenvalues can be read directly from the generalized Schur
 *> form:   *> form:
 *>   alpha = S(i,i), beta = P(i,i).  *>   alpha = S(i,i), beta = P(i,i).
 *>  *>
 *> Ref: C.B. Moler & G.W. Stewart, "An Algorithm for Generalized Matrix  *> Ref: C.B. Moler & G.W. Stewart, "An Algorithm for Generalized Matrix
Line 101 Line 101
 *> \verbatim  *> \verbatim
 *>          JOB is CHARACTER*1  *>          JOB is CHARACTER*1
 *>          = 'E': Compute eigenvalues only;  *>          = 'E': Compute eigenvalues only;
 *>          = 'S': Compute eigenvalues and the Schur form.   *>          = 'S': Compute eigenvalues and the Schur form.
 *> \endverbatim  *> \endverbatim
 *>  *>
 *> \param[in] COMPQ  *> \param[in] COMPQ
Line 211 Line 211
 *> \param[in,out] Q  *> \param[in,out] Q
 *> \verbatim  *> \verbatim
 *>          Q is DOUBLE PRECISION array, dimension (LDQ, N)  *>          Q is DOUBLE PRECISION array, dimension (LDQ, N)
 *>          On entry, if COMPZ = 'V', the orthogonal matrix Q1 used in  *>          On entry, if COMPQ = 'V', the orthogonal matrix Q1 used in
 *>          the reduction of (A,B) to generalized Hessenberg form.  *>          the reduction of (A,B) to generalized Hessenberg form.
 *>          On exit, if COMPZ = 'I', the orthogonal matrix of left Schur  *>          On exit, if COMPQ = 'I', the orthogonal matrix of left Schur
 *>          vectors of (H,T), and if COMPZ = 'V', the orthogonal matrix  *>          vectors of (H,T), and if COMPQ = 'V', the orthogonal matrix
 *>          of left Schur vectors of (A,B).  *>          of left Schur vectors of (A,B).
 *>          Not referenced if COMPZ = 'N'.  *>          Not referenced if COMPQ = 'N'.
 *> \endverbatim  *> \endverbatim
 *>  *>
 *> \param[in] LDQ  *> \param[in] LDQ
Line 277 Line 277
 *  Authors:  *  Authors:
 *  ========  *  ========
 *  *
 *> \author Univ. of Tennessee   *> \author Univ. of Tennessee
 *> \author Univ. of California Berkeley   *> \author Univ. of California Berkeley
 *> \author Univ. of Colorado Denver   *> \author Univ. of Colorado Denver
 *> \author NAG Ltd.   *> \author NAG Ltd.
 *  
 *> \date April 2012  
 *  *
 *> \ingroup doubleGEcomputational  *> \ingroup doubleGEcomputational
 *  *
Line 304 Line 302
      $                   ALPHAR, ALPHAI, BETA, Q, LDQ, Z, LDZ, WORK,       $                   ALPHAR, ALPHAI, BETA, Q, LDQ, Z, LDZ, WORK,
      $                   LWORK, INFO )       $                   LWORK, INFO )
 *  *
 *  -- LAPACK computational routine (version 3.4.1) --  *  -- LAPACK computational routine --
 *  -- 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..--
 *     April 2012  
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          COMPQ, COMPZ, JOB        CHARACTER          COMPQ, COMPZ, JOB
Line 531 Line 528
 *  *
             GO TO 80              GO TO 80
          ELSE           ELSE
             IF( ABS( H( ILAST, ILAST-1 ) ).LE.ATOL ) THEN              IF( ABS( H( ILAST, ILAST-1 ) ).LE.MAX( SAFMIN, ULP*( 
        $         ABS( H( ILAST, ILAST ) ) + ABS( H( ILAST-1, ILAST-1 ) ) 
        $         ) ) ) THEN
                H( ILAST, ILAST-1 ) = ZERO                 H( ILAST, ILAST-1 ) = ZERO
                GO TO 80                 GO TO 80
             END IF              END IF
Line 551 Line 550
             IF( J.EQ.ILO ) THEN              IF( J.EQ.ILO ) THEN
                ILAZRO = .TRUE.                 ILAZRO = .TRUE.
             ELSE              ELSE
                IF( ABS( H( J, J-1 ) ).LE.ATOL ) THEN                 IF( ABS( H( J, J-1 ) ).LE.MAX( SAFMIN, ULP*( 
        $         ABS( H( J, J ) ) + ABS( H( J-1, J-1 ) ) 
        $         ) ) ) THEN
                   H( J, J-1 ) = ZERO                    H( J, J-1 ) = ZERO
                   ILAZRO = .TRUE.                    ILAZRO = .TRUE.
                ELSE                 ELSE
Line 739 Line 740
 *           Exceptional shift.  Chosen for no particularly good reason.  *           Exceptional shift.  Chosen for no particularly good reason.
 *           (Single shift only.)  *           (Single shift only.)
 *  *
             IF( ( DBLE( MAXIT )*SAFMIN )*ABS( H( ILAST-1, ILAST ) ).LT.              IF( ( DBLE( MAXIT )*SAFMIN )*ABS( H( ILAST, ILAST-1 ) ).LT.
      $          ABS( T( ILAST-1, ILAST-1 ) ) ) THEN       $          ABS( T( ILAST-1, ILAST-1 ) ) ) THEN
                ESHIFT = ESHIFT + H( ILAST, ILAST-1 ) /                 ESHIFT = H( ILAST, ILAST-1 ) /
      $                  T( ILAST-1, ILAST-1 )       $                  T( ILAST-1, ILAST-1 )
             ELSE              ELSE
                ESHIFT = ESHIFT + ONE / ( SAFMIN*DBLE( MAXIT ) )                 ESHIFT = ESHIFT + ONE / ( SAFMIN*DBLE( MAXIT ) )
Line 759 Line 760
      $                  T( ILAST-1, ILAST-1 ), LDT, SAFMIN*SAFETY, S1,       $                  T( ILAST-1, ILAST-1 ), LDT, SAFMIN*SAFETY, S1,
      $                  S2, WR, WR2, WI )       $                  S2, WR, WR2, WI )
 *  *
               IF ( ABS( (WR/S1)*T( ILAST, ILAST ) - H( ILAST, ILAST ) )
        $         .GT. ABS( (WR2/S2)*T( ILAST, ILAST )
        $         - H( ILAST, ILAST ) ) ) THEN
                  TEMP = WR
                  WR = WR2
                  WR2 = TEMP
                  TEMP = S1
                  S1 = S2
                  S2 = TEMP
               END IF
             TEMP = MAX( S1, SAFMIN*MAX( ONE, ABS( WR ), ABS( WI ) ) )              TEMP = MAX( S1, SAFMIN*MAX( ONE, ABS( WR ), ABS( WI ) ) )
             IF( WI.NE.ZERO )              IF( WI.NE.ZERO )
      $         GO TO 200       $         GO TO 200

Removed from v.1.12  
changed lines
  Added in v.1.21


CVSweb interface <joel.bertrand@systella.fr>