Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- Software
- Software Development SDKs and Libraries
- Intel® oneAPI Math Kernel Library
- Sparse Eigensolver Question

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

schulzey

New Contributor I

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-03-2014
08:54 PM

164 Views

Sparse Eigensolver Question

I'm looking for a sparse eigenvalue solver that returns just the number of eigenvalues starting from the lowest one that I specify rather than all of them between emin and emax. For example, I would like to be able to tell it to return the lowest 20 eigenvalues in the range from emin to emax that I specify even though there may be 1000 eigenvalues in that range.

I have looked at the Intel MKL Extended Eigensolver, however the problem for me is that I am dealing with large matrices of n>100000 that may have a huge number of eigenvalues between the range of emin to emax that I am interested in, and I will run out of memory if I try to dimension x (the array in which the eigenvectors are returned) big enough to hold them all. It also defeats the purpose of using a packed CSR array for a and b if x is considerably bigger than both of them.

If I specify m0=20, but there are 1000 eigenvalues between emin and emax, the documentation says that the routines return Info=3. It seems like it wouldn't be too hard a modification for the routines to just return the number of eigenvalues I specify in m0 rather than stopping and returning an error.

Does anyone know if if there is a good way of doing this?

Link Copied

3 Replies

Zhang_Z_Intel

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-06-2014
09:55 AM

164 Views

The documentation says info=3 is a Warning not an Error. The computation should continue instead of stopping.

MKL Extended Eigensolver currently returns all eigen pairs within the search interval [emin, emax]. The interface does not allow users to pick only the lowest n eigen pairs among all pairs. Your problem seems to be that the search interval is too big. Would a narrower [emin, emax] range help, probably?

We may ask MKL developers to consider supporting the feature you asked for. It'll be helpful if you provide more details about your use case, for example, which FEAST function you are calling? How are other parameters specified? Can you please attach your test code, and a test matrix, if possible?

schulzey

New Contributor I

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-07-2014
03:57 AM

164 Views

In a structural engineering finite element dynamic frequency analysis, the eigenvalues represent the natural frequencies of a building (or any structure) and the eigenvectors represent the shape of the corresponding vibration modes. In these cases, the engineer generally specifies how many eigenvalues they want to investigate as well as a range of frequencies they are interested in.

Similarly, in a structural buckling analysis, only the first (lowest) eigenvalue is generally of interest because once that has been exceeded then the structure has collapsed.

I have been able to get around the problem by calling Pardiso in a trial and error procedure to find a value of emax that will give me the exact number of eigenvalues I am looking for between emin and emax. I can then allocate my e, x and res arrays and then call Feast knowing exactly what m value it will return. It works well, but it would be nice if Feast could do this internally (and probably more efficiently and quicker than I can).

By the way, if I know what value of m will be returned before calling Feast, can I dimension x as x(n,m) or does it have to be x(n,m0)?

My source code is attached, including the Pardiso trial and error procedure.

Zhang_Z_Intel

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

01-07-2014
10:46 AM

164 Views

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

For more complete information about compiler optimizations, see our Optimization Notice.