spectra icon indicating copy to clipboard operation
spectra copied to clipboard

Using PardisoLLT

Open Chris-Hickey-Arup opened this issue 5 years ago • 2 comments

Hi,

I was using SymGEigsSolver for a symmetric matrix A and a symmetric positive definite matrix B, in order to solve Ax=eBx.

For large matrices (700000x700000) the solver would fail, and this seemed to be due to using SimplicialLLT in SparseCholesky for B.

In a separate file, I managed to get PardisoLLT to work for the cholesky decomposition of B, whereas SimplicialLLT would fail.

I'm fairly new to this, is there a simple wrapper to swap out SimplicialLLT for PardisoLLT, or alternatively would you know why SimplicialLLT wouldn't succeed on large matrices?

Thanks, Chris

Chris-Hickey-Arup avatar Sep 22 '20 11:09 Chris-Hickey-Arup

Hi @Chris-Hickey-Arup, PardisoLLT seems to rely on external software, so I didn't include it in Spectra. One thing you can do is to write a wrapper class similar to SparseCholesky, and replace SparseCholesky in the code. Since Eigen has a quite unified interface for sparse LLT solvers, the extra work should be minimal.

yixuan avatar Jan 10 '21 01:01 yixuan

I did a similar thing for the SymShiftInvert, worked very well.

armingeiser avatar Mar 07 '21 12:03 armingeiser