mathnet-numerics
mathnet-numerics copied to clipboard
FEAST algorithm for solving eigenvalue problems
The FEAST solver (current v2.1 http://www.ecs.umass.edu/~polizzi/feast/index.htm) is a free library for solving the standard (Ax=ex) or the generalised (Ax=eBx) eigenvalue problem, and obtaining all the eigenvalues and eigenvectors within a given search interval [emin, emax]. The FEAST solver has been integrated into MKL 11.2 under the name "Intel MKL Extended Eigensolver" https://software.intel.com/en-us/articles/introduction-to-the-intel-mkl-extended-eigensolver
I would like to include a call to MKL extended eigensolver in Numerics. As suggested in 544477 I am opening this issue in order to discuss:
- how to expose this in the API
- what to do in the managed case, whenever MKL is not available
For 1. my option is:
- add a method FeastStdEigSolver (maybe more than one) to the interface ILinearAlgebraProvider
- add the implementation of the method to the MklLinearAlgebraProvider<T> class
- add the call to the mkl in the SafeNativeMethods
- add a method EigStdSolve to the Matrix.solve
In this way the API is exposed by Matrix<>.EigStdSolve. Using the provider approach looks useful but it needs something is implemented in the ManagedLinearAlgebraProvider<T> class as well.
For 2. my options are
- raise a NotImplementedException
- call the FEAST code into the original lib through the C-interface: the Feast-BSD should be compatible with the Numerics MIT license (to my understanding) but it could not be defined "managed"
- port the FEAST algorithm in C#: porting chance and effort need to be evaluated
Alternatives for 1 & 2 are welcome.
PS The MKL Feast algorithm uses the PARDISO solver for sparse matrices. PARDISO adopts a 1-based array indexing. See https://github.com/mathnet/mathnet-numerics/issues/217