mathnet-numerics icon indicating copy to clipboard operation
mathnet-numerics copied to clipboard

FEAST algorithm for solving eigenvalue problems

Open shabadan opened this issue 10 years ago • 0 comments

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:

  1. how to expose this in the API
  2. 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

shabadan avatar May 18 '14 22:05 shabadan