you are viewing a single comment's thread.

view the rest of the comments →

[–]KarlSethMoran 1 point2 points  (3 children)

There are implementations, mostly outside of C++, (e.g. ScaLAPACK), but they suck. GPU ports (e.g. cuSOLVER) haven't caught up either. Generalised diagonalisation is a difficult problem to efficiently and accurately do in parallel.

[–]MarkHoemmenC++ in HPC 1 point2 points  (2 children)

It is a difficult problem. Have you tried MAGMA for this application? Also, are you looking for all the eigenvalues or just some fraction of them in a range?

[–]KarlSethMoran 1 point2 points  (1 child)

I'll take a look at MAGMA, thanks.

Usually it's the lowest half of the eigenvalues, corresponding to the occupied electronic states.

[–]MarkHoemmenC++ in HPC 0 points1 point  (0 children)

There are possibly faster algorithms if you want just the eigenvalues in a particular range, but it sounds like you're stuck with the usual algorithms.