Hi, I have some problem when using SLEPc to compute eigenvalue problems. I do not know how to implement my idea properly. Let me explain in detail.
I am interested in solving a set of eigenvalue problems (to find the smallest magnitude eigenvalues) A x = \lambda B_i x for i=1,2,3,... where A is the Laplacian of some regular grid, B_i is diagonal. It is known that A is semi-positive with a null vector [1,1,...,1]. I found SLEPc provides EPSSetDeflationSpace to set deflation space when applies iterative eigen solver. But I am not sure what default precondition is used when I defined my problem by setting eps_smallest_magnitude through EPSSetWhichEigenpairs. It is possible to use shift-and-invert to explicitly address my problem. If the shift value is 0, zero pivot will be reported during LU precondition stage. But since my set of eigen problems has the exact the same A, I hope I could somehow do the precondition (direct solver) offline only associate with A and apply the iterative eigen solver online with set of different B_i. The very initiative is the direct solver applied in precondition stage is O(N^2) while the matrix-free eigen solver is O(N), thus I think this would improve the efficiency of my situation. Is there any way to realize it? Here is some rough idea: To prevent the zero pivot during LU, I would dampshift A with a small quantity A-\sigma I, and then compute its LU offline and store it. In online stage, I could build an ST shell that read LU computed in offline stage and solve. This is only an approximated approach, hopefully not degrading the performance. Thank you!
