Calling dfeast_scsrgv, it returns with info=-1, an internal memory error.
The output is
Extended Eigensolvers: Size subspace 10
Extended Eigensolvers: Resize subspace 0
Extended Eigensolvers: Error with Internal memory allocation
I don't know if the error message is accurate, I am using the 64-bit version (126.96.36.199, Windows), and the matrices are pretty small, so it would need to be allocating a huge amount of memory to run out of address space.
Is it trying to create a temporary file - my C: drive is a SSD without much space left? Changing the program working directory to E: does not help, so is it creating a file in a specific location?
Is it a problem with the matrices - the Extended Eigensolver Functionality page in the help says A should be real symmetric, and B should be real symmetric positive definite - I don't have these, I have real symmetric positive definite, and B is real symmetric, about half of the rows in B (and corresponding columns) are zero, ie it could be reordered to - this isn't positive definite, the submatrix isn't either, so should return an error of -3? But it seems to solve this for a different search range of eigenvalues (possibly the change makes some internally generated matrix much larger?)
Mathematically, the zeroes in the B matrix should give eigenvalues of +inf, and an eigenvector that is +1 for the entry corresponding to the matrix row, and zero for all other values, for each row/column that is zero. The other eigenvalues can be found by generating a modified A matrix - I dont know if the FEAST solver will do this internally, and solve the modified problem, or if these eigenvalues all get rejected because the search range is bounded, and the solver just works without B actually being positive definite.
The alternative is to solve the reverse problem, swapping A and B, and solving for 1/λ, but then the range of eigenvalues gets inverted, and I need to find the largest instead of the smallest. I might use ARPACK or something for this, FEAST doesnt seem particularly well suited for finding the largest.
Attached is a test program, and the a, b matrices. If changed to search a different range, test program will find 4 eigenvalues around 182.9, then another 4 around 228.
The benchmark I am testing against suggests I should find a couple of eigenvalues between 1 and 5, but I don't have access to Matlab to check my matrices directly, so the difference might be the matrices I am solving.
So, questions are:
- Is the out of memory error message correct, or is it a different problem?
- Does B have to be positive definite?
- Should I always be getting an error message with any matrix of this shape?
- Are the values found accurate, or is B not being pos def causing FEAST to find a totally wrong solution?