skills/core-numerical/numerical-stability/SKILL.md
Analyze numerical stability for time-dependent PDE simulations — check CFL and Fourier criteria, perform von Neumann stability analysis, detect stiffness, evaluate matrix conditioning, and recommend explicit vs implicit time-stepping schemes. Use when selecting time steps, diagnosing numerical blow-up or solver divergence, checking convergence criteria, or evaluating scheme stability for advection, diffusion, or reaction problems, even if the user doesn't explicitly mention "stability" or "CFL."
npx skillsauth add HeshamFS/materials-simulation-skills numerical-stabilityInstall 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 repeatable checklist and script-driven checks to keep time-dependent simulations stable and defensible.
scripts/requirements.txt for dependencies| Input | Description | Example |
|-------|-------------|---------|
| Grid spacing dx | Spatial discretization | 0.01 m |
| Time step dt | Temporal discretization | 1e-4 s |
| Velocity v | Advection speed | 1.0 m/s |
| Diffusivity D | Thermal/mass diffusivity | 1e-5 m²/s |
| Reaction rate k | First-order rate constant | 100 s⁻¹ |
| Dimensions | 1D, 2D, or 3D | 2 |
| Scheme type | Explicit or implicit | explicit |
Is the problem stiff (fast + slow dynamics)?
├── YES → Use implicit or IMEX scheme
│ └── Check conditioning with matrix_condition.py
└── NO → Is CFL/Fourier satisfied with reasonable dt?
├── YES → Use explicit scheme (cheaper per step)
└── NO → Consider implicit or reduce dx
| Physics | Number | Explicit Limit (1D) | Formula |
|---------|--------|---------------------|---------|
| Advection | CFL | C ≤ 1 | C = v·dt/dx |
| Diffusion | Fourier | Fo ≤ 0.5 | Fo = D·dt/dx² |
| Reaction | Reaction | R ≤ 1 | R = k·dt |
Multi-dimensional correction: For d dimensions, diffusion limit is Fo ≤ 1/(2d).
| Script | Key Outputs |
|--------|-------------|
| scripts/cfl_checker.py | metrics.cfl, metrics.fourier, recommended_dt, stable |
| scripts/von_neumann_analyzer.py | results.max_amplification, results.stable |
| scripts/matrix_condition.py | results.condition_number, results.is_symmetric |
| scripts/stiffness_detector.py | results.stiffness_ratio, results.stiff, results.recommendation |
scripts/cfl_checker.pydt if neededscripts/stiffness_detector.py if multiple scalesscripts/von_neumann_analyzer.pyscripts/matrix_condition.py for implicit solvesUser: My phase-field simulation is blowing up after 100 steps. I'm using explicit Euler with dx=0.01, dt=1e-4, and diffusivity D=1e-3.
Agent workflow:
python3 scripts/cfl_checker.py --dx 0.01 --dt 1e-4 --diffusivity 1e-3 --dimensions 2 --json
Fo = 1e-3 × 1e-4 / (0.01)² = 1.0Fo ≤ 0.252.5e-5 (to get Fo = 0.25)cfl_checker.pydt or change scheme# Check CFL/Fourier for 2D diffusion-advection
python3 scripts/cfl_checker.py --dx 0.1 --dt 0.01 --velocity 1.0 --diffusivity 0.1 --dimensions 2 --json
# Von Neumann analysis for custom 3-point stencil
python3 scripts/von_neumann_analyzer.py --coeffs 0.2,0.6,0.2 --dx 1.0 --nk 128 --json
# Detect stiffness from eigenvalue estimates
python3 scripts/stiffness_detector.py --eigs=-1,-1000 --json
# Check matrix conditioning for implicit system
python3 scripts/matrix_condition.py --matrix A.npy --norm 2 --json
| Error | Cause | Resolution |
|-------|-------|------------|
| dx and dt must be positive | Zero or negative values | Provide valid positive numbers |
| No stability criteria applied | Missing velocity/diffusivity | Provide at least one physics parameter |
| Matrix file not found | Invalid path | Check matrix file exists |
| Could not compute eigenvalues | Singular or ill-formed matrix | Check matrix validity |
| Scenario | Meaning | Action |
|----------|---------|--------|
| stable: true | All checked criteria satisfied | Proceed with simulation |
| stable: false | At least one limit violated | Reduce dt or change scheme |
| stable: null | No criteria could be applied | Provide more physics inputs |
| Stiffness ratio > 1000 | Problem is stiff | Use implicit integrator |
| Condition number > 10⁶ | Ill-conditioned | Use scaling/preconditioning |
dx, dt, velocity, diffusivity, dimensions) are validated as finite positive numbers before any computation--dimensions is restricted to {1, 2, 3}--eigs) are capped at 10,000 entries and validated as finite numbers--coeffs) are length-limited and validated as finite floatsmatrix_condition.py reads a single matrix file (.npy format) specified by --matrix; no directory traversal beyond the given pathnp.load() is called with allow_pickle=False to prevent arbitrary code execution via crafted .npy filescfl_checker.py, von_neumann_analyzer.py, matrix_condition.py, stiffness_detector.py) with explicit argument listseval(), exec(), or dynamic code generationshell=True)--json) produces structured, parseable results without shell-interpretable contentreferences/stability_criteria.md - Decision thresholds and formulasreferences/common_pitfalls.md - Frequent failure modes and fixesreferences/scheme_catalog.md - Stability properties of common schemesdevelopment
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.