Eigen-solver backends#
Modal analysis (Modal analysis) and cyclic-symmetry modal
analysis (Cyclic-symmetry modal analysis) both dispatch the eigensolution
through the eigen-solver registry in
femorph_solver.solvers.eigen. Three backends are
exposed; the auto-chain picks the right one based on problem
size and which optional dependencies are installed.
Auto-chain dispatch#
ARPACK (default) — shift-invert Lanczos via
scipy.sparse.linalg.eigsh(). Universally available (ships with SciPy). Optimal for the lowest few modes of a large sparse SPD problem.PRIMME — block-Davidson with adaptive restart (Stathopoulos & McCombs 2010). Selected automatically for large problems (rough heuristic: \(N > 10^{6}\) DOFs) or when the caller asks for many modes (\(n_\mathrm{modes} > 100\)). Needs the optional
primmeextra (pip install "femorph-solver[primme]").LOBPCG — locally-optimal block PCG (Knyazev 2001). Factor-free; selected via
eigen_solver="lobpcg". Useful for memory-constrained regimes where the \((\mathbf{K} - \sigma \mathbf{M})\) factor wouldn’t fit; supports a built-in preconditioner ("factor"/"jacobi"/"none") tuned for plate / shell stiffness conditioning.
When eigen_solver="auto" the registry picks based on the
heuristic above; pass an explicit identifier to override.
Backend-by-backend#
ARPACK#
The shift-invert path is what femorph-solver runs by default:
with \(\sigma = 0\) by default. See Modal eigenvalue problem and shift-invert Lanczos for the Lanczos derivation and why shift-invert beats power iteration.
Strengths. Universal availability; optimal for the lowest few modes of a sparse SPD GEVP; reverse-comm API lets the caller swap in any linear backend for the inner factor (Pardiso / CHOLMOD / MUMPS / SuperLU).
Weaknesses. Many-mode runs (>100) ramp up the Krylov subspace size and the work-space memory grows quadratically.
PRIMME#
Block-Davidson with built-in preconditioner support and restart-aware convergence. The optimal choice when the problem is large enough that ARPACK’s Krylov subspace dominates memory, or when many modes are needed.
Strengths. Block iteration parallelises matrix-vector products; preconditioner support out of the box; faster convergence on tightly-clustered eigenvalues.
Weaknesses. Optional dependency (
primmePython package); not in every Python wheel cache.
LOBPCG#
Factor-free iteration on the original GEVP — no shift- invert solve at every step, just a preconditioned matrix- vector product.
Strengths. Constant-memory in \(n_\mathrm{modes}\); doesn’t need a sparse-direct factor at all. Useful when the factor wouldn’t fit (very large 3D mesh on a memory-constrained host).
Weaknesses. Convergence is preconditioner-sensitive; the SciPy shipped LOBPCG (used here) is slower than ARPACK on the typical 10-50 mode runs that dominate verification workloads.
Mass-orthonormalisation#
All three backends return mass-orthonormalised eigenvectors —
\(\boldsymbol{\phi}_{i}^{\!\top}\, \mathbf{M}\,
\boldsymbol{\phi}_{j} = \delta_{ij}\) — to machine precision on
converged modes. The ModalResult post-processor
preserves that property regardless of which backend ran the
solve.
Inspecting the registry#
from femorph_solver.solvers.eigen import list_eigen_solvers
print(list_eigen_solvers())
# → {"arpack": True, "primme": False, "lobpcg": True}
Implementation: femorph_solver.solvers.eigen (registry
+ auto-chain) plus per-backend wrappers
femorph_solver.solvers.eigen._arpack,
femorph_solver.solvers.eigen._primme,
femorph_solver.solvers.eigen._lobpcg.
References#
Lehoucq, R. B., Sorensen, D. C. and Yang, C. (1998) ARPACK Users’ Guide, SIAM SET 6.
Stathopoulos, A. and McCombs, J. R. (2010) “PRIMME: PReconditioned Iterative MultiMethod Eigensolver — Methods and Software Description,” ACM TOMS 37 (2), 1–30.
Knyazev, A. V. (2001) “Toward the optimal preconditioned eigensolver: locally optimal block preconditioned conjugate gradient method,” SIAM J. Sci. Comput. 23 (2), 517–541.
Parlett, B. N. (1998) The Symmetric Eigenvalue Problem, SIAM (foundational treatment of all three).
Saad, Y. (2011) Numerical Methods for Large Eigenvalue Problems, 2nd ed., SIAM (Lanczos / Davidson comparison).