Christian, > > I want to extract the lowest eigenvalues of a huge generalized eigenvalue > problem with very dense clusters of eigenvalues. > I use slepc and superlu as external direct solver with the following options > > -eps_ncv 300 -eps_nev 220 -eps_tol 1e-10 > -st_ksp_rtol 1e-14 -st_ksp_type preonly -st_pc_type lu > -st_pc_factor_mat_solver_package superlu_dist > > Without shift-and-invert, this simply takes way too long, even on 48 CPUs it > runs for hours. > > If I use a shift-and-invert technique additionally invoking > -st_type sinvert -st_shift -0.41, > > it converges very fast and also parallelizes well, but I most likely don't > get the lowest eigenvalues if st_shift is slightly too high. If it's slightly > too low, it doesn't seem to converge.
Clustered eigenvalue problems are extremely difficult to solve. In most cases, the shift-and-invert technique is the only practical approach, for which the selection of the shift is also sensitive, as what you observed. One suggestion is to try larger -eps_ncv, e.g., eps_ncv = 2*eps_nev, which might improve the robustness. > > Can anybody give me some hints on how to tweak the options? > If a 100MB tar ball is not too much for you, the matrix is here: > www.phys.ethz.ch/~cmay/binaryoutput.tgz Are your matrices symmetric/Hermitian? You may send this request to slepc's developers who are more experienced than us on eigenvalue problems. Hong
