Dear S. Yang,
there are many eigenvalue solvers implemented within NGSolve:
- There is an Arnoldi Solver, you can find an example
here
,
- There is an example on how to code the Knyazev PINVT algorithm for the Poisson equation
here
,
- As you pointed out there is an example on how to use PINVT for the Maxwell eigenvalue problem,
here
.
Furthermore, you can check here for a list of eigenvalue solvers algorithms implemented in Python (again Arnoldi and PINVT).
Last it is possible to work with SLEPc now that NGSolve supports PETSc, in particular, this gives you access to a very wide range of eigenvalue solvers, among those: Power Iteration, Inverse Iteration, RQI, Subspace Iteration, Arnoldi, Lanczos, Krylov-Schur, and Jacobi-Davidson (full list
here
). If you want to use the native ngs2petsc module you can find examples
here
and here, but I would suggest you to use the NGSOLVE PETSC interface ngs-petsc with petsc4py, more info on the dedicated repo.
Best,
Umberto