Solver algorithms#
Reference for the analysis types and backend algorithms femorph-solver ships. The user-guide section walks through how to drive each solver; this page lists the underlying algorithm and its sources.
Static#
Linear static analysis \(\mathbf{K}\mathbf{u} = \mathbf{f}\)
after Dirichlet elimination. Driven by Model.solve().
Boundary-condition reduction. Master/slave partitioning — Cook §2.10; Bathe §3.4.
Linear backend. Any SPD-capable solver from the auto-chain (Pardiso → CHOLMOD → MUMPS → UMFPACK → SuperLU) resolves the reduced system.
Full cites in femorph_solver.solvers.static.
Modal#
Generalised symmetric-definite eigenproblem
\(\mathbf{K}\boldsymbol{\phi}=\omega^{2}\mathbf{M}\boldsymbol{\phi}\).
Driven by Model.modal_solve().
Default backend. Shift-invert Lanczos via ARPACK’s
eigsh(..., sigma=0). Lehoucq, Sorensen, Yang, ARPACK Users’ Guide, 1998; Ericsson-Ruhe, Math. Comp. 1980.Autotune (``eigen_solver=”auto”``). Dispatches ARPACK for small / medium problems and PRIMME for large or many-mode runs when installed. PRIMME — Stathopoulos & McCombs, ACM TOMS 2010.
Optional LOBPCG. Factor-free path with a selectable preconditioner (
"factor"/"jacobi"/"none") for memory-constrained regimes. Knyazev 2001.Eigenpair orthogonality.
φᵢᵀ M φⱼ = δᵢⱼto machine precision on converged modes; verified bytests/analytical/test_conservation.py.
Full cites in femorph_solver.solvers.modal and the backend
modules under femorph_solver.solvers.eigen.
Cyclic modal#
Per-harmonic-index modal analysis on a single sector. Driven by
Model.cyclic_modal_solve() and the functional
femorph_solver.solvers.cyclic.solve_cyclic_modal().
Constraint reduction.
P^H K Pcomplex-Hermitian reduction per harmonic index \(k\); the plan is cached once across \(k\) (topology-invariant, seefemorph_solver.solvers.cyclic._CyclicReductionPlan).Real augmentation identity. Complex Hermitian
(K, M)are factored at the n-sized complex level inside the OPinv, then embedded into a real 2n system only for the eigsh iteration — halves the factor cost. Grimes-Lewis-Simon, SIAM J. Matrix Anal. Appl. 15 (1994), §5.Theory provenance. Thomas, J. Sound Vib. 1979; Wildheim, J. Appl. Mech. 1979.
Full cites in femorph_solver.solvers.cyclic.
Transient#
Newmark-β time-integration for
\(\mathbf{M}\ddot{\mathbf{u}} + \mathbf{C}\dot{\mathbf{u}} +
\mathbf{K}\mathbf{u} = \mathbf{f}(t)\). Driven by
Model.transient_solve().
Scheme. Newmark 1959 with γ = 0.5, β = 0.25 (average acceleration; unconditionally stable).
Damping. Optional Rayleigh damping
C = αM + βK.Source. Hughes §9.1–§9.2; Bathe §9.2.
Full cites in femorph_solver.solvers.transient.
Harmonic (scaffolded)#
Frequency-domain steady-state response \((\mathbf{K} -
\omega^{2}\mathbf{M} + i\omega\mathbf{C})\tilde{\mathbf{u}} =
\tilde{\mathbf{f}}\). Scaffolding lives in
femorph_solver.solvers.harmonic; full validation against a
MAPDL HARFRQ sweep is roadmap.
Linear backends#
Shift-invert factorisation is routed through a pluggable linear
solver registry. Every backend is wrapped around an established
upstream implementation; the wrappers cite their upstream paper
in the References docstring block.
Name |
Kind |
Upstream |
|---|---|---|
|
direct, LU |
scipy.sparse.linalg.splu — Demmel/Eisenstat/Gilbert/Li/Liu 1999; Li 2005 |
|
direct, Cholesky (SPD) |
SuiteSparse CHOLMOD — Chen/Davis/Hager/Rajamanickam 2008 |
|
direct, LU |
SuiteSparse UMFPACK — Davis, ACM TOMS 2004 |
|
direct, LU / Cholesky |
Intel MKL Pardiso via pypardiso — Schenk & Gärtner 2004, 2006 |
|
direct, LU / Cholesky |
Intel MKL Pardiso via in-tree ctypes wrapper (PR #126); unlocks |
|
direct, multifrontal |
MUMPS via |
|
iterative, Krylov |
scipy |
|
iterative, Krylov |
scipy |
|
iterative, algebraic multigrid (SPD) |
PyAMG — Ruge/Stüben 1987; Bell/Olson/Schroder |
Full cites live in each backend’s module docstring under
femorph_solver.solvers.linear.
Eigen backends#
Name |
Algorithm / source |
|---|---|
|
Implicitly-restarted Arnoldi, shift-invert. Lehoucq/Sorensen 1996; Lehoucq/Sorensen/Yang 1998 (Users’ Guide) |
|
Locally-optimal block preconditioned CG. Knyazev 2001; Knyazev et al. 2007 (BLOPEX) |
|
Preconditioned iterative multi-method eigensolver. Stathopoulos/McCombs 2010; Davidson 1975 |
|
Dense LAPACK |
Full cites live in each backend module under
femorph_solver.solvers.eigen.
See also
Solving — how-to walk-throughs for each analysis type, backend autotune behaviour, and performance notes.