Then I would try Davidson methods https://doi.org/10.1145/2543696
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.

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.

Jose



> El 1 jul 2021, a las 13:36, Varun Hiremath <[email protected]> escribió:
> 
> 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? 
> 
> On Thu, Jul 1, 2021, 4:29 AM Jose E. Roman <[email protected]> wrote:
> For smallest real parts one could adapt ex34.c, but it is going to be costly 
> https://slepc.upv.es/documentation/current/src/eps/tutorials/ex36.c.html
> Also, if eigenvalues are clustered around the origin, convergence may still 
> be very slow.
> 
> It is a tough problem, unless you are able to compute a good preconditioner 
> of A (no need to compute the exact inverse).
> 
> Jose
> 
> 
> > El 1 jul 2021, a las 13:23, Varun Hiremath <[email protected]> 
> > escribió:
> > 
> > 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.
> > 
> > On Thu, Jul 1, 2021, 4:08 AM Jose E. Roman <[email protected]> wrote:
> > Smallest eigenvalue in magnitude or real part?
> > 
> > 
> > > El 1 jul 2021, a las 11:58, Varun Hiremath <[email protected]> 
> > > escribió:
> > > 
> > > Sorry, no both A and B are general sparse matrices (non-hermitian). So is 
> > > there anything else I could try?
> > > 
> > > On Thu, Jul 1, 2021 at 2:43 AM Jose E. Roman <[email protected]> wrote:
> > > 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.
> > > 
> > > Jose
> > > 
> > > 
> > > > El 1 jul 2021, a las 11:37, Varun Hiremath <[email protected]> 
> > > > escribió:
> > > > 
> > > > Hi All,
> > > > 
> > > > 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.
> > > > 
> > > > 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?
> > > > 
> > > > Thanks,
> > > > Varun
> > > 
> > 
> 

Reply via email to