octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Unbundling ARPACK (for reals this time)


From: John W. Eaton
Subject: Re: Unbundling ARPACK (for reals this time)
Date: Thu, 1 Dec 2011 05:17:33 -0500

On  1-Dec-2011, Sylvestre Ledru wrote:

| Hello John,
| 
| Le jeudi 01 décembre 2011 à 04:45 -0500, John W. Eaton a écrit :
| > On 30-Nov-2011, Jordi Gutiérrez Hermoso wrote:
| > 
| > | Octave people: can we unbundle ARPACK now?
| > 
| > I will be happy to do that once there is a release of the "new" ARPACK
| > that includes the bug fixes we have made for Octave and the new
| > version is packaged for Debian.
| I will be happy to apply any patches from Octave (and/or give access to
| the git repository. FYI, Jordi has access to it).

The differences between the arpack-ng/SRC directory and Octave's
arpack/src directory are attached below in diffs-0.  The important
changes are the ones related to nconv.  The changesets for
Octave that introduced most of these changes are attached below in
diffs-1 and diffs-2.  The diffs-2 changes are not necessary but avoid
some compiler warnings.

jwe

diff -wur arpack-ng/SRC/dnaupd.f 
/home/jwe/src/octave/libcruft/arpack/src/dnaupd.f
--- arpack-ng/SRC/dnaupd.f      2011-12-01 05:08:58.586148007 -0500
+++ /home/jwe/src/octave/libcruft/arpack/src/dnaupd.f   2011-08-09 
13:26:28.000000000 -0400
@@ -110,7 +110,7 @@
 c          'LI' -> want the NEV eigenvalues of largest imaginary part.
 c          'SI' -> want the NEV eigenvalues of smallest imaginary part.
 c
-c  NEV     Integer.  (INPUT/OUTPUT)
+c  NEV     Integer.  (INPUT)
 c          Number of eigenvalues of OP to be computed. 0 < NEV < N-1.
 c
 c  TOL     Double precision  scalar.  (INPUT)
@@ -427,7 +427,7 @@
 c     | Array Arguments |
 c     %-----------------%
 c
-      integer    iparam(11), ipntr(*)
+      integer    iparam(11), ipntr(14)
       Double precision
      &           resid(n), v(ldv,ncv), workd(3*n), workl(lworkl)
 c
diff -wur arpack-ng/SRC/dneupd.f 
/home/jwe/src/octave/libcruft/arpack/src/dneupd.f
--- arpack-ng/SRC/dneupd.f      2011-12-01 05:08:58.586148007 -0500
+++ /home/jwe/src/octave/libcruft/arpack/src/dneupd.f   2011-08-09 
13:26:28.000000000 -0400
@@ -353,7 +353,7 @@
      &           mode  , msglvl, outncv, ritzr   ,
      &           ritzi , wri   , wrr   , irr     ,
      &           iri   , ibd   , ishift, numcnv  ,
-     &           np    , jj 
+     &           np    , jj    , nconv2
       logical    reord
       Double precision 
      &           conds  , rnorm, sep  , temp,
@@ -661,16 +661,21 @@
      &                   workl(iuptri), ldh          , 
      &                   workl(invsub), ldq          , 
      &                   workl(iheigr), workl(iheigi), 
-     &                   nconv        , conds        ,
+     &                   nconv2       , conds        ,
      &                   sep          , workl(ihbds) , 
      &                   ncv          , iwork        ,
      &                   1            , ierr)
 c
+            if (nconv2 .lt. nconv) then
+               nconv = nconv2
+            end if
+
             if (ierr .eq. 1) then
                info = 1
                go to 9000
             end if
 c
+
             if (msglvl .gt. 2) then
                 call dvout (logfil, ncv, workl(iheigr), ndigit,
      &           '_neupd: Real part of the eigenvalues of H--reordered')
diff -wur arpack-ng/SRC/dseupd.f 
/home/jwe/src/octave/libcruft/arpack/src/dseupd.f
--- arpack-ng/SRC/dseupd.f      2011-12-01 05:08:58.586148007 -0500
+++ /home/jwe/src/octave/libcruft/arpack/src/dseupd.f   2011-08-09 
13:26:28.000000000 -0400
@@ -609,9 +609,9 @@
 c
             if (leftptr .lt. rghtptr) go to 20
 c
- 30      end if
+         end if
 c
-         if (msglvl .gt. 2) then
+ 30      if (msglvl .gt. 2) then
              call dvout  (logfil, ncv, workl(ihd), ndigit,
      &       '_seupd: The eigenvalues of H--reordered')
          end if
Only in arpack-ng/SRC: Makefile.am
Only in arpack-ng/SRC: Makefile.in
diff -wur arpack-ng/SRC/sseupd.f 
/home/jwe/src/octave/libcruft/arpack/src/sseupd.f
--- arpack-ng/SRC/sseupd.f      2011-12-01 05:08:58.590147868 -0500
+++ /home/jwe/src/octave/libcruft/arpack/src/sseupd.f   2011-08-09 
13:26:28.000000000 -0400
@@ -609,9 +609,9 @@
 c
             if (leftptr .lt. rghtptr) go to 20
 c
- 30      end if
+         end if
 c
-         if (msglvl .gt. 2) then
+ 30      if (msglvl .gt. 2) then
              call svout (logfil, ncv, workl(ihd), ndigit,
      &       '_seupd: The eigenvalues of H--reordered')
          end if
diff -wur arpack-ng/SRC/zneupd.f 
/home/jwe/src/octave/libcruft/arpack/src/zneupd.f
--- arpack-ng/SRC/zneupd.f      2011-12-01 05:08:58.590147868 -0500
+++ /home/jwe/src/octave/libcruft/arpack/src/zneupd.f   2011-08-09 
13:26:28.000000000 -0400
@@ -301,7 +301,7 @@
      &           invsub, iuptri, iwev  , j    , ldh   , ldq   ,
      &           mode  , msglvl, ritz  , wr   , k     , irz   ,
      &           ibd   , outncv, iq    , np   , numcnv, jj    ,
-     &           ishift
+     &           ishift, nconv2
       Complex*16 
      &           rnorm, temp, vl(1)
       Double precision 
@@ -592,9 +592,13 @@
             call ztrsen ('None'       , 'V'          , select      ,
      &                   ncv          , workl(iuptri), ldh         ,
      &                   workl(invsub), ldq          , workl(iheig),
-     &                   nconv        , conds        , sep         , 
+     &                   nconv2       , conds        , sep         , 
      &                   workev       , ncv          , ierr)
 c
+            if (nconv2 .lt. nconv) then
+               nconv = nconv2
+            end if
+
             if (ierr .eq. 1) then
                info = 1
                go to 9000
# HG changeset patch
# User David Bateman <address@hidden>
# Date 1296241534 18000
# Branch release-3-4-x
# Node ID 3d38b4916cbf8a9652ddc14870c8fe59e6cc909c
# Parent  e4ed10d59f188196a6db991cbceab122f4b87d06
avoid memory overrun in ARPACK

diff --git a/libcruft/ChangeLog b/libcruft/ChangeLog
--- a/libcruft/ChangeLog
+++ b/libcruft/ChangeLog
@@ -1,3 +1,11 @@
+2011-01-28  David Bateman  <address@hidden>
+
+       * arpack/src/cneupd.f (cneupd): Restore value of nconv if ctrsen
+       returns a smaller value.
+       * arpack/src/dneupd.f (dneupd): Likewise, for dtrsen.
+       * arpack/src/sneupd.f (sneupd): Likewise, for strsen.
+       * arpack/src/zneupd.f (zneupd): Likewise, for ztrsen.
+
 2011-01-28  John W. Eaton  <address@hidden>
 
        * arpack/util/second.f (ARSCND): Declare ETIME INTRINSIC, not EXTERNAL.
diff --git a/libcruft/arpack/src/cneupd.f b/libcruft/arpack/src/cneupd.f
--- a/libcruft/arpack/src/cneupd.f
+++ b/libcruft/arpack/src/cneupd.f
@@ -301,7 +301,7 @@
      &           invsub, iuptri, iwev  , j    , ldh   , ldq   ,
      &           mode  , msglvl, ritz  , wr   , k     , irz   ,
      &           ibd   , outncv, iq    , np   , numcnv, jj    ,
-     &           ishift
+     &           ishift, nconv2
       Complex 
      &           rnorm, temp, vl(1)
       Real 
@@ -592,9 +592,13 @@
             call ctrsen('None'       , 'V'          , select      ,
      &                   ncv          , workl(iuptri), ldh         ,
      &                   workl(invsub), ldq          , workl(iheig),
-     &                   nconv        , conds        , sep         , 
+     &                   nconv2       , conds        , sep         , 
      &                   workev       , ncv          , ierr)
 c
+            if (nconv2 .lt. nconv) then
+               nconv = nconv2
+            end if
+
             if (ierr .eq. 1) then
                info = 1
                go to 9000
diff --git a/libcruft/arpack/src/dneupd.f b/libcruft/arpack/src/dneupd.f
--- a/libcruft/arpack/src/dneupd.f
+++ b/libcruft/arpack/src/dneupd.f
@@ -353,7 +353,7 @@
      &           mode  , msglvl, outncv, ritzr   ,
      &           ritzi , wri   , wrr   , irr     ,
      &           iri   , ibd   , ishift, numcnv  ,
-     &           np    , jj 
+     &           np    , jj    , nconv2
       logical    reord
       Double precision 
      &           conds  , rnorm, sep  , temp,
@@ -661,16 +661,21 @@
      &                   workl(iuptri), ldh          , 
      &                   workl(invsub), ldq          , 
      &                   workl(iheigr), workl(iheigi), 
-     &                   nconv        , conds        ,
+     &                   nconv2       , conds        ,
      &                   sep          , workl(ihbds) , 
      &                   ncv          , iwork        ,
      &                   1            , ierr)
 c
+            if (nconv2 .lt. nconv) then
+               nconv = nconv2
+            end if
+
             if (ierr .eq. 1) then
                info = 1
                go to 9000
             end if
 c
+
             if (msglvl .gt. 2) then
                 call dvout (logfil, ncv, workl(iheigr), ndigit,
      &           '_neupd: Real part of the eigenvalues of H--reordered')
diff --git a/libcruft/arpack/src/sneupd.f b/libcruft/arpack/src/sneupd.f
--- a/libcruft/arpack/src/sneupd.f
+++ b/libcruft/arpack/src/sneupd.f
@@ -353,7 +353,7 @@
      &           mode  , msglvl, outncv, ritzr   ,
      &           ritzi , wri   , wrr   , irr     ,
      &           iri   , ibd   , ishift, numcnv  ,
-     &           np    , jj 
+     &           np    , jj    , nconv2
       logical    reord
       Real 
      &           conds  , rnorm, sep  , temp,
@@ -661,11 +661,15 @@
      &                   workl(iuptri), ldh          , 
      &                   workl(invsub), ldq          , 
      &                   workl(iheigr), workl(iheigi), 
-     &                   nconv        , conds        ,
+     &                   nconv2       , conds        ,
      &                   sep          , workl(ihbds) , 
      &                   ncv          , iwork        ,
      &                   1            , ierr)
 c
+            if (nconv2 .lt. nconv) then
+               nconv = nconv2
+            end if
+
             if (ierr .eq. 1) then
                info = 1
                go to 9000
diff --git a/libcruft/arpack/src/zneupd.f b/libcruft/arpack/src/zneupd.f
--- a/libcruft/arpack/src/zneupd.f
+++ b/libcruft/arpack/src/zneupd.f
@@ -301,7 +301,7 @@
      &           invsub, iuptri, iwev  , j    , ldh   , ldq   ,
      &           mode  , msglvl, ritz  , wr   , k     , irz   ,
      &           ibd   , outncv, iq    , np   , numcnv, jj    ,
-     &           ishift
+     &           ishift, nconv2
       Complex*16 
      &           rnorm, temp, vl(1)
       Double precision 
@@ -592,9 +592,13 @@
             call ztrsen ('None'       , 'V'          , select      ,
      &                   ncv          , workl(iuptri), ldh         ,
      &                   workl(invsub), ldq          , workl(iheig),
-     &                   nconv        , conds        , sep         , 
+     &                   nconv2       , conds        , sep         , 
      &                   workev       , ncv          , ierr)
 c
+            if (nconv2 .lt. nconv) then
+               nconv = nconv2
+            end if
+
             if (ierr .eq. 1) then
                info = 1
                go to 9000
# HG changeset patch
# User Rik <address@hidden>
# Date 1296510103 18000
# Branch release-3-4-x
# Node ID a85d14454adc9585963dbbe300943bf0f0b48bfb
# Parent  27bab6a53ec724dde810ce022393184ade973edf
Fix warning about GOTO reference in arpack code

diff --git a/libcruft/ChangeLog b/libcruft/ChangeLog
--- a/libcruft/ChangeLog
+++ b/libcruft/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-31  Rik  <address@hidden>
+
+       * arpack/src/dseupd.f, arpack/src/sseupd.f: Change GOTO target
+       to eliminate warning about landing on end if.
+
 2011-01-31  John W. Eaton  <address@hidden>
 
        * arpack/module.mk (EXTRA_DIST): Include arpack/module.mk in the
diff --git a/libcruft/arpack/src/dseupd.f b/libcruft/arpack/src/dseupd.f
--- a/libcruft/arpack/src/dseupd.f
+++ b/libcruft/arpack/src/dseupd.f
@@ -609,9 +609,9 @@
 c
             if (leftptr .lt. rghtptr) go to 20
 c
- 30      end if
+         end if
 c
-         if (msglvl .gt. 2) then
+ 30      if (msglvl .gt. 2) then
              call dvout  (logfil, ncv, workl(ihd), ndigit,
      &       '_seupd: The eigenvalues of H--reordered')
          end if
diff --git a/libcruft/arpack/src/sseupd.f b/libcruft/arpack/src/sseupd.f
--- a/libcruft/arpack/src/sseupd.f
+++ b/libcruft/arpack/src/sseupd.f
@@ -609,9 +609,9 @@
 c
             if (leftptr .lt. rghtptr) go to 20
 c
- 30      end if
+         end if
 c
-         if (msglvl .gt. 2) then
+ 30      if (msglvl .gt. 2) then
              call svout (logfil, ncv, workl(ihd), ndigit,
      &       '_seupd: The eigenvalues of H--reordered')
          end if

reply via email to

[Prev in Thread] Current Thread [Next in Thread]