Diff for /rpl/lapack/lapack/dgeev.f between versions 1.11 and 1.18

version 1.11, 2012/08/22 09:48:12 version 1.18, 2017/06/17 11:06:15
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 DGEEV + dependencies   *> Download DGEEV + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeev.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeev.f">
 *> [TGZ]</a>   *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeev.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeev.f">
 *> [ZIP]</a>   *> [ZIP]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeev.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeev.f">
 *> [TXT]</a>  *> [TXT]</a>
 *> \endhtmlonly   *> \endhtmlonly
 *  *
 *  Definition:  *  Definition:
 *  ===========  *  ===========
 *  *
 *       SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,  *       SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
 *                         LDVR, WORK, LWORK, INFO )  *                         LDVR, WORK, LWORK, INFO )
 *   *
 *       .. Scalar Arguments ..  *       .. Scalar Arguments ..
 *       CHARACTER          JOBVL, JOBVR  *       CHARACTER          JOBVL, JOBVR
 *       INTEGER            INFO, LDA, LDVL, LDVR, LWORK, N  *       INTEGER            INFO, LDA, LDVL, LDVR, LWORK, N
Line 29 Line 29
 *       DOUBLE PRECISION   A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ),  *       DOUBLE PRECISION   A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ),
 *      $                   WI( * ), WORK( * ), WR( * )  *      $                   WI( * ), WORK( * ), WR( * )
 *       ..  *       ..
 *    *
 *  *
 *> \par Purpose:  *> \par Purpose:
 *  =============  *  =============
Line 43 Line 43
 *>                  A * v(j) = lambda(j) * v(j)  *>                  A * v(j) = lambda(j) * v(j)
 *> where lambda(j) is its eigenvalue.  *> where lambda(j) is its eigenvalue.
 *> The left eigenvector u(j) of A satisfies  *> The left eigenvector u(j) of A satisfies
 *>               u(j)**T * A = lambda(j) * u(j)**T  *>               u(j)**H * A = lambda(j) * u(j)**H
 *> where u(j)**T denotes the transpose of u(j).  *> where u(j)**H denotes the conjugate-transpose of u(j).
 *>  *>
 *> The computed eigenvectors are normalized to have Euclidean norm  *> The computed eigenvectors are normalized to have Euclidean norm
 *> equal to 1 and largest component real.  *> equal to 1 and largest component real.
Line 176 Line 176
 *  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 June 2016
 *  *
 *> \date November 2011  *  @precisions fortran d -> s
 *  *
 *> \ingroup doubleGEeigen  *> \ingroup doubleGEeigen
 *  *
 *  =====================================================================  *  =====================================================================
       SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,        SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
      $                  LDVR, WORK, LWORK, INFO )       $                  LDVR, WORK, LWORK, INFO )
         implicit none
 *  *
 *  -- LAPACK driver routine (version 3.4.0) --  *  -- LAPACK driver 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 2011  *     June 2016
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          JOBVL, JOBVR        CHARACTER          JOBVL, JOBVR
Line 213 Line 216
       LOGICAL            LQUERY, SCALEA, WANTVL, WANTVR        LOGICAL            LQUERY, SCALEA, WANTVL, WANTVR
       CHARACTER          SIDE        CHARACTER          SIDE
       INTEGER            HSWORK, I, IBAL, IERR, IHI, ILO, ITAU, IWRK, K,        INTEGER            HSWORK, I, IBAL, IERR, IHI, ILO, ITAU, IWRK, K,
      $                   MAXWRK, MINWRK, NOUT       $                   LWORK_TREVC, MAXWRK, MINWRK, NOUT
       DOUBLE PRECISION   ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM,        DOUBLE PRECISION   ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM,
      $                   SN       $                   SN
 *     ..  *     ..
Line 223 Line 226
 *     ..  *     ..
 *     .. External Subroutines ..  *     .. External Subroutines ..
       EXTERNAL           DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLABAD, DLACPY,        EXTERNAL           DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLABAD, DLACPY,
      $                   DLARTG, DLASCL, DORGHR, DROT, DSCAL, DTREVC,       $                   DLARTG, DLASCL, DORGHR, DROT, DSCAL, DTREVC3,
      $                   XERBLA       $                   XERBLA
 *     ..  *     ..
 *     .. External Functions ..  *     .. External Functions ..
Line 279 Line 282
                MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1,                 MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1,
      $                       'DORGHR', ' ', N, 1, N, -1 ) )       $                       'DORGHR', ' ', N, 1, N, -1 ) )
                CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VL, LDVL,                 CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VL, LDVL,
      $                WORK, -1, INFO )       $                      WORK, -1, INFO )
                HSWORK = WORK( 1 )                 HSWORK = INT( WORK(1) )
                MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK )                 MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK )
                  CALL DTREVC3( 'L', 'B', SELECT, N, A, LDA,
        $                       VL, LDVL, VR, LDVR, N, NOUT,
        $                       WORK, -1, IERR )
                  LWORK_TREVC = INT( WORK(1) )
                  MAXWRK = MAX( MAXWRK, N + LWORK_TREVC )
                MAXWRK = MAX( MAXWRK, 4*N )                 MAXWRK = MAX( MAXWRK, 4*N )
             ELSE IF( WANTVR ) THEN              ELSE IF( WANTVR ) THEN
                MINWRK = 4*N                 MINWRK = 4*N
                MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1,                 MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1,
      $                       'DORGHR', ' ', N, 1, N, -1 ) )       $                       'DORGHR', ' ', N, 1, N, -1 ) )
                CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VR, LDVR,                 CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VR, LDVR,
      $                WORK, -1, INFO )       $                      WORK, -1, INFO )
                HSWORK = WORK( 1 )                 HSWORK = INT( WORK(1) )
                MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK )                 MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK )
                  CALL DTREVC3( 'R', 'B', SELECT, N, A, LDA,
        $                       VL, LDVL, VR, LDVR, N, NOUT,
        $                       WORK, -1, IERR )
                  LWORK_TREVC = INT( WORK(1) )
                  MAXWRK = MAX( MAXWRK, N + LWORK_TREVC )
                MAXWRK = MAX( MAXWRK, 4*N )                 MAXWRK = MAX( MAXWRK, 4*N )
             ELSE               ELSE
                MINWRK = 3*N                 MINWRK = 3*N
                CALL DHSEQR( 'E', 'N', N, 1, N, A, LDA, WR, WI, VR, LDVR,                 CALL DHSEQR( 'E', 'N', N, 1, N, A, LDA, WR, WI, VR, LDVR,
      $                WORK, -1, INFO )       $                      WORK, -1, INFO )
                HSWORK = WORK( 1 )                 HSWORK = INT( WORK(1) )
                MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK )                 MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK )
             END IF              END IF
             MAXWRK = MAX( MAXWRK, MINWRK )              MAXWRK = MAX( MAXWRK, MINWRK )
Line 418 Line 431
      $                WORK( IWRK ), LWORK-IWRK+1, INFO )       $                WORK( IWRK ), LWORK-IWRK+1, INFO )
       END IF        END IF
 *  *
 *     If INFO > 0 from DHSEQR, then quit  *     If INFO .NE. 0 from DHSEQR, then quit
 *  *
       IF( INFO.GT.0 )        IF( INFO.NE.0 )
      $   GO TO 50       $   GO TO 50
 *  *
       IF( WANTVL .OR. WANTVR ) THEN        IF( WANTVL .OR. WANTVR ) THEN
 *  *
 *        Compute left and/or right eigenvectors  *        Compute left and/or right eigenvectors
 *        (Workspace: need 4*N)  *        (Workspace: need 4*N, prefer N + N + 2*N*NB)
 *  *
          CALL DTREVC( SIDE, 'B', SELECT, N, A, LDA, VL, LDVL, VR, LDVR,           CALL DTREVC3( SIDE, 'B', SELECT, N, A, LDA, VL, LDVL, VR, LDVR,
      $                N, NOUT, WORK( IWRK ), IERR )       $                 N, NOUT, WORK( IWRK ), LWORK-IWRK+1, IERR )
       END IF        END IF
 *  *
       IF( WANTVL ) THEN        IF( WANTVL ) THEN

Removed from v.1.11  
changed lines
  Added in v.1.18


CVSweb interface <joel.bertrand@systella.fr>