changeset 24231:6bd7d2eb6434

Display the right number/order of Ritz estimates in eigs when OPTS.disp = 2. * eigs-base.cc: Display the right number/order of Ritz estimates in eigs when OPTS.disp = 2.
author Marco Caliari <marco.caliari@univr.it>
date Thu, 06 Apr 2017 13:30:47 +0200
parents 0350da83c049
children e0bcd17ac070
files liboctave/numeric/eigs-base.cc
diffstat 1 files changed, 102 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/numeric/eigs-base.cc	Mon Apr 03 11:17:07 2017 +0200
+++ b/liboctave/numeric/eigs-base.cc	Thu Apr 06 13:30:47 2017 +0200
@@ -780,8 +780,17 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -1030,7 +1039,6 @@
          k, tol, presid, p, v, n, iparam,
          ipntr, workd, workl, lwork, tmp_info
          F77_CHAR_ARG_LEN(1) F77_CHAR_ARG_LEN(2));
-
       info = tmp_info;
 
       if (f77_exception_encountered)
@@ -1044,8 +1052,17 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -1320,8 +1337,17 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -1601,8 +1627,18 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  os << "    " << workl[iptr(5)+k] << "\n";
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k - 1; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -1902,8 +1938,18 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  os << "    " << workl[iptr(5)+k] << "\n";
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k - 1; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -2220,8 +2266,18 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  os << "    " << workl[iptr(5)+k] << "\n";
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k - 1; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -2536,8 +2592,17 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -2808,8 +2873,17 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its
@@ -3099,8 +3173,17 @@
               os << "Iteration " << iter - 1 <<
                  ": a few Ritz values of the " << p << "-by-" <<
                  p << " matrix\n";
-              for (int i = 0 ; i < k; i++)
-                os << "    " << workl[iptr(5)+i-1] << "\n";
+              if (ido == 99) // convergence
+                {
+                  for (F77_INT i = 0; i < k; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
+              else
+                {
+                  // the wanted Ritz estimates are at the end
+                  for (F77_INT i = p - k; i < p; i++)
+                    os << "    " << workl[iptr(5)+i-1] << "\n";
+                }
             }
 
           // This is a kludge, as ARPACK doesn't give its