Dear Jose, Thanks for the answer. I am looking for the smallest real, indeed.
I have, just now, accidentally figured out that I can get correct convergence by increasing NCV to higher values, so that's covered! I thought I had checked this before, but apparently not. It's converging well now, and rather fast (still about 8 times faster than Krylov-Schur). The issue now is that it scales rather badly: If I use 2 or more MPI processes, the time required to solve it goes up drastically. A small test case, on my Ubuntu 16.04 laptop, takes 10 seconds (blazing fast) for 1 MPI process, 25 for 2, 33 for 3, 59 for 4, etc... It is a machine with 8 cores, so i don't really understand why this is. Are there other methods that can actually maintain the time required to solve for multiple MPI process? Or, preferable, decrease it (why else would I use multiple processes if not for memory restrictions)? I will never have to do something bigger than a generalized non-Hermitian ev problem of, let's say, 5000 blocks of 200x200 complex values per block, and a band size of about 11 blocks wide (so a few GB per matrix max). Thanks so much! On Wed, Mar 29, 2017 at 9:54 AM Jose E. Roman <[email protected]> wrote: > > > El 29 mar 2017, a las 9:08, Toon Weyens <[email protected]> > escribió: > > > > I started looking for alternatives from the standard Krylov-Schur method > to solve the generalized eigenvalue problem Ax = kBx in my code. These > matrices have a block-band structure (typically 5, 7 or 9 blocks wide, with > block sizes of the order 20) of size typically 1000 blocks. This eigenvalue > problem results from the minimization of the energy of a perturbed > plasma-vacuum system in order to investigate its stability. So far, I've > not taken advantage of the Hermiticity of the problem. > > > > For "easier" problems, especially the Generalized Davidson method > converges like lightning, sometimes up to 100 times faster than > Krylov-Schur. > > > > However, for slightly more complicated problems, GD converges to the > wrong eigenpair: There is certainly an eigenpair with an eigenvalue lower > than 0 (i.e. unstable), but the solver never gets below some small, > positive value, to which it wrongly converges. > > I would need to know the settings you are using. Are you doing > smallest_real? Maybe you can try target_magnitude with harmonic extraction. > > > > > Is it possible to improve this behavior? I tried changing the > preconditioner, but it did not work. > > > > Might it be possible to use Krylov-Schur until reaching some precision, > and then switching to JD to quickly converge? > > Yes, you can do this, using EPSSetInitialSpace() in the second solve. But, > depending on the settings, this may not buy you much. > > Jose > > > > > Thanks! > > >
