Thank you for your reply and your explanations, I'll try it with a
higher ksp tolerance. I chose this low value, because in the SLEPc
manual it is mentioned that the Davidson solvers often work better
with lower tolerances than with higher tolerances.
Is there also a way to improve convergence for the gd solver? As
far as I know it doesn't use a ksp , so the only way I can think
of to improve convergence would be using a higher quality
preconditioner, right?
Kind regards,
Michael
Jose E. Roman writes:
El 6 ago 2018, a las 14:44, Michael Werner
<[email protected]> escribió:
Michael Werner writes:
Hello, I want to use a Davidson-type solver (probably jd) to
find the eigenvalues with the smallest real part, but so far
I'm strugglung to get them to converge. So I was hoping to get
some advice on the various options available for those
solvers.
For my test case, I know the smallest eigenvalue is
-0.04+0.71i (calculated with shift-and-invert and lu
preconditioner). However, when I try to use jd or gd, the
eigensolver never converges. After a few iterations, the
"first unconverged value" is more or less as expected, but it
fluctuates around the correct value, and the residual never
drops below 1e-2. The best results so far were achieved with
the following set of commandline options:
-st_type precond -st_pc_type asm -st_sub_pc_type ilu
-st_sub_pc_factor_levels 2 -st_ksp_max_it 15 -st_ksp_rtol 1e-2
-eps_type jd -eps_tol 1e-4 -eps_monitor -eps_nev 5 -eps_target
-0.08 -eps_target_real -eps_harmonic_largest
I also tried using more ksp iterations or different
st_sub_pc_factor_levels. I also tried using eps_smallest_real
instead of a target value, without any success. So far, I
noticed that the extraction type had the largest
influence. Only for eps_harmonic_largest could I observe any
eigenvalues with negative real part, for all the other
extraction types I only got eigenvalues with positive real
parts.
I also had a look at the available options for the Davidson
solvers, but I couldn't find a good explanation for
Sorry, I didn't mean to send it already. What I wanted to say:
I also had a look at the available options for the Davidson
solvers, but I couldn't find a good explanation for many of the
additional options. Is there any recommendation to chose
-eps_mpd or -eps_jd_minv? And can -eps_jd_plusk be used for
GNHEP-type problems? I already had a look at the paper of
E. Romero and J. E. Roman concerning the implementation of the
Davidson-type solvers in SLEPc, but it didn't answer all my
questions.
Kind regards,
Michael
You may need to enforce more accuracy on the KSP. Try replacing
-st_ksp_max_it 15 -st_ksp_rtol 1e-2
by
-st_ksp_rtol 1e-5
Normally, you don't need to set the -eps_mpd parameter, except
if many eigenvalues (nev) are requested. The parameter jd_minv
controls how the restart is done, keeping more or less
information from previous restarts - it may affect convergece,
but not too much. And yes, jd_plusk can be used for GNHEP
problems.
Jose