<div dir="auto"><div>Thank you very much for these suggestions! We are currently using version 3.12, so I'll try to update to the latest version and try your suggestions. Let me get back to you, thanks!<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jul 1, 2021, 4:45 AM Jose E. Roman <<a href="mailto:jroman@dsic.upv.es">jroman@dsic.upv.es</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Then I would try Davidson methods <a href="https://doi.org/10.1145/2543696" rel="noreferrer noreferrer" target="_blank">https://doi.org/10.1145/2543696</a><br>
You can also try Krylov-Schur with "inexact" shift-and-invert, for instance, with preconditioned BiCGStab or GMRES, see section 3.4.1 of the users manual.<br>
<br>
In both cases, you have to pass matrix A in the call to EPSSetOperators() and the preconditioner matrix via STSetPreconditionerMat() - note this function was introduced in version 3.15.<br>
<br>
Jose<br>
<br>
<br>
<br>
> El 1 jul 2021, a las 13:36, Varun Hiremath <<a href="mailto:varunhiremath@gmail.com" target="_blank" rel="noreferrer">varunhiremath@gmail.com</a>> escribió:<br>
> <br>
> Thanks. I actually do have a 1st order approximation of matrix A, that I can explicitly compute and also invert. Can I use that matrix as preconditioner to speed things up? Is there some example that explains how to setup and call SLEPc for this scenario? <br>
> <br>
> On Thu, Jul 1, 2021, 4:29 AM Jose E. Roman <<a href="mailto:jroman@dsic.upv.es" target="_blank" rel="noreferrer">jroman@dsic.upv.es</a>> wrote:<br>
> For smallest real parts one could adapt ex34.c, but it is going to be costly <a href="https://slepc.upv.es/documentation/current/src/eps/tutorials/ex36.c.html" rel="noreferrer noreferrer" target="_blank">https://slepc.upv.es/documentation/current/src/eps/tutorials/ex36.c.html</a><br>
> Also, if eigenvalues are clustered around the origin, convergence may still be very slow.<br>
> <br>
> It is a tough problem, unless you are able to compute a good preconditioner of A (no need to compute the exact inverse).<br>
> <br>
> Jose<br>
> <br>
> <br>
> > El 1 jul 2021, a las 13:23, Varun Hiremath <<a href="mailto:varunhiremath@gmail.com" target="_blank" rel="noreferrer">varunhiremath@gmail.com</a>> escribió:<br>
> > <br>
> > I'm solving for the smallest eigenvalues in magnitude. Though is it cheaper to solve smallest in real part, as that might also work in my case? Thanks for your help.<br>
> > <br>
> > On Thu, Jul 1, 2021, 4:08 AM Jose E. Roman <<a href="mailto:jroman@dsic.upv.es" target="_blank" rel="noreferrer">jroman@dsic.upv.es</a>> wrote:<br>
> > Smallest eigenvalue in magnitude or real part?<br>
> > <br>
> > <br>
> > > El 1 jul 2021, a las 11:58, Varun Hiremath <<a href="mailto:varunhiremath@gmail.com" target="_blank" rel="noreferrer">varunhiremath@gmail.com</a>> escribió:<br>
> > > <br>
> > > Sorry, no both A and B are general sparse matrices (non-hermitian). So is there anything else I could try?<br>
> > > <br>
> > > On Thu, Jul 1, 2021 at 2:43 AM Jose E. Roman <<a href="mailto:jroman@dsic.upv.es" target="_blank" rel="noreferrer">jroman@dsic.upv.es</a>> wrote:<br>
> > > Is the problem symmetric (GHEP)? In that case, you can try LOBPCG on the pair (A,B). But this will likely be slow as well, unless you can provide a good preconditioner.<br>
> > > <br>
> > > Jose<br>
> > > <br>
> > > <br>
> > > > El 1 jul 2021, a las 11:37, Varun Hiremath <<a href="mailto:varunhiremath@gmail.com" target="_blank" rel="noreferrer">varunhiremath@gmail.com</a>> escribió:<br>
> > > > <br>
> > > > Hi All,<br>
> > > > <br>
> > > > I am trying to compute the smallest eigenvalues of a generalized system A*x= lambda*B*x. I don't explicitly know the matrix A (so I am using a shell matrix with a custom matmult function) however, the matrix B is explicitly known so I compute inv(B)*A within the shell matrix and solve inv(B)*A*x = lambda*x.<br>
> > > > <br>
> > > > To compute the smallest eigenvalues it is recommended to solve the inverted system, but since matrix A is not explicitly known I can't invert the system. Moreover, the size of the system can be really big, and with the default Krylov solver, it is extremely slow. So is there a better way for me to compute the smallest eigenvalues of this system?<br>
> > > > <br>
> > > > Thanks,<br>
> > > > Varun<br>
> > > <br>
> > <br>
> <br>
<br>
</blockquote></div></div></div>