skills/core-numerical/linear-solvers/SKILL.md
Select and configure linear solvers for Ax=b systems arising in numerical simulations — choose between direct (LU, Cholesky) and iterative (CG, GMRES, BiCGSTAB, MINRES) methods, analyze sparsity patterns and matrix conditioning, recommend preconditioners (AMG, ILU, IC), apply row/column scaling, and diagnose convergence stagnation from residual histories. Use when setting up a linear solve for FEM/FVM assembly, debugging slow or stalled Krylov iterations, choosing a preconditioner for SPD or nonsymmetric systems, or investigating ill-conditioning, even if the user only says "my solver is slow" or "GMRES won't converge."
npx skillsauth add HeshamFS/materials-simulation-skills linear-solversInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Provide a universal workflow to select a solver, assess conditioning, and diagnose convergence for linear systems arising in numerical simulations.
| Input | Description | Example |
|-------|-------------|---------|
| Matrix size | Dimension of system | n = 1000000 |
| Sparsity | Fraction of nonzeros | 0.01% |
| Symmetry | Is A = Aᵀ? | yes |
| Definiteness | Is A positive definite? | yes (SPD) |
| Conditioning | Estimated condition number | 10⁶ |
Is matrix small (n < 5000) and dense?
├── YES → Use direct solver (LU, Cholesky)
└── NO → Is matrix symmetric?
├── YES → Is it positive definite?
│ ├── YES → Use CG with AMG/IC preconditioner
│ └── NO → Use MINRES
└── NO → Is it nearly symmetric?
├── YES → Use BiCGSTAB
└── NO → Use GMRES with ILU/AMG
| Matrix Type | Solver | Preconditioner | |-------------|--------|----------------| | SPD, sparse | CG | AMG, IC | | Symmetric indefinite | MINRES | ILU | | Nonsymmetric | GMRES, BiCGSTAB | ILU, AMG | | Dense | LU, Cholesky | None | | Saddle point | Schur complement, Uzawa | Block preconditioner |
| Script | Key Outputs |
|--------|-------------|
| scripts/solver_selector.py | recommended, alternatives, notes |
| scripts/convergence_diagnostics.py | rate, stagnation, recommended_action |
| scripts/sparsity_stats.py | nnz, density, bandwidth, symmetry |
| scripts/preconditioner_advisor.py | suggested, notes |
| scripts/scaling_equilibration.py | row_scale, col_scale, notes |
| scripts/residual_norms.py | residual_norms, relative_norms, converged |
scripts/sparsity_stats.pyscripts/solver_selector.pyscripts/preconditioner_advisor.pyscripts/scaling_equilibration.pyscripts/convergence_diagnostics.pyscripts/residual_norms.pyUser: My GMRES solver is stagnating after 50 iterations. The residual drops to 1e-3 then stops improving.
Agent workflow:
python3 scripts/convergence_diagnostics.py --residuals 1,0.1,0.01,0.005,0.003,0.002,0.002,0.002 --json
python3 scripts/preconditioner_advisor.py --matrix-type nonsymmetric --sparse --stagnation --json
# Analyze sparsity pattern
python3 scripts/sparsity_stats.py --matrix A.npy --json
# Select solver for SPD sparse system
python3 scripts/solver_selector.py --symmetric --positive-definite --sparse --size 1000000 --json
# Get preconditioner recommendation
python3 scripts/preconditioner_advisor.py --matrix-type spd --sparse --json
# Diagnose convergence from residual history
python3 scripts/convergence_diagnostics.py --residuals 1,0.2,0.05,0.01 --json
# Apply scaling
python3 scripts/scaling_equilibration.py --matrix A.npy --symmetric --json
# Compute residual norms
python3 scripts/residual_norms.py --residual 1,0.1,0.01 --rhs 1,0,0 --json
| Error | Cause | Resolution |
|-------|-------|------------|
| Matrix file not found | Invalid path | Check file exists |
| Matrix must be square | Non-square input | Verify matrix dimensions |
| Residuals must be positive | Invalid residual data | Check input format |
| Rate | Meaning | Action | |------|---------|--------| | < 0.1 | Excellent | Current setup optimal | | 0.1 - 0.5 | Good | Acceptable for most problems | | 0.5 - 0.9 | Slow | Consider better preconditioner | | > 0.9 | Stagnation | Change solver or preconditioner |
| Pattern | Likely Cause | Fix | |---------|--------------|-----| | Flat residual | Poor preconditioner | Improve preconditioner | | Oscillating | Near-singular or indefinite | Check matrix, try different solver | | Very slow decay | Ill-conditioned | Apply scaling, use AMG |
solver_selector.py --size parameter is bounded at 10 billion--matrix-type is validated against a fixed allowlist (spd, symmetric, nonsymmetric)--symmetric, --positive-definite, --sparse, --stagnation) are type-safe argparse flagssparsity_stats.py and scaling_equilibration.py read a single matrix file (.npy format) specified by --matrixnp.load() is called with allow_pickle=False to prevent arbitrary code execution via crafted .npy filesallowed-tools excludes Bash to prevent the agent from executing arbitrary commands when processing untrusted matrix files or numeric inputseval(), exec(), or dynamic code generationshell=True)references/solver_decision_tree.md - Selection logicreferences/preconditioner_catalog.md - Preconditioner optionsreferences/convergence_patterns.md - Diagnosing failuresreferences/scaling_guidelines.md - Equilibration guidancedevelopment
Plan verification and validation campaigns for simulation codes using manufactured solutions, canonical benchmark problems, grid/time refinement, uncertainty propagation, and pass/fail acceptance criteria. Use when an agent needs to prove a solver, model, or result is trustworthy rather than only plausible.
testing
Map computational materials tasks onto workflow engines such as atomate2, jobflow, AiiDA, pyiron, or a simple one-off script. Use when deciding how to structure a reproducible campaign, DAG, restart strategy, provenance record, storage layout, or migration path from ad hoc scripts to managed workflows.
development
Plan molecular dynamics post-processing for materials simulations, including RDF, MSD and diffusion, VACF/VDOS, coordination numbers, bond-angle distributions, stress-strain curves, equilibration detection, PBC unwrapping, and trajectory format choices. Use before writing MD analysis scripts or trusting trajectory-derived results.
development
Triage cross-code simulation failures and propose safe retry ladders for nonconvergence, NaN/Inf, exploding energies, unstable timesteps, pressure blow-up, missing potentials, bad pseudopotentials, corrupted output, and incomplete runs. Use when an agent sees a failed or suspicious materials simulation and needs a defensible first response.