numerical-stability

Provide a repeatable checklist and script-driven checks to keep time-dependent simulations stable and defensible.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "numerical-stability" with this command: npx skills add heshamfs/materials-simulation-skills/heshamfs-materials-simulation-skills-numerical-stability

Numerical Stability

Goal

Provide a repeatable checklist and script-driven checks to keep time-dependent simulations stable and defensible.

Requirements

  • Python 3.8+

  • NumPy (for matrix_condition.py and von_neumann_analyzer.py)

  • See scripts/requirements.txt for dependencies

Inputs to Gather

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

Decision Guidance

Choosing Explicit vs Implicit

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

Stability Limit Quick Reference

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 Outputs (JSON Fields)

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

Workflow

  • Identify dominant physics (advection vs diffusion vs reaction)

  • Run CFL checker with scripts/cfl_checker.py

  • Compare to limits and adjust dt if needed

  • Check stiffness with scripts/stiffness_detector.py if multiple scales

  • Analyze custom schemes with scripts/von_neumann_analyzer.py

  • Check conditioning with scripts/matrix_condition.py for implicit solves

  • Document the stability verdict and recommended time step

Conversational Workflow Example

User: 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:

  • Check stability criteria: python3 scripts/cfl_checker.py --dx 0.01 --dt 1e-4 --diffusivity 1e-3 --dimensions 2 --json

  • Interpret results:

  • Fourier number: Fo = 1e-3 × 1e-4 / (0.01)² = 1.0

  • 2D limit: Fo ≤ 0.25

  • Violation: Fo = 1.0 > 0.25, unstable!

  • Recommend fix:

  • Reduce dt to 2.5e-5 (to get Fo = 0.25)

  • Or increase dx, or switch to implicit

Pre-Simulation Stability Checklist

  • Identify dominant physics and nondimensional groups

  • Compute CFL/Fourier/Reaction numbers with cfl_checker.py

  • If explicit and limit violated, reduce dt or change scheme

  • If stiffness ratio > 1000, select implicit/stiff integrator

  • For custom schemes, verify amplification factor ≤ 1

  • Document stability reasoning with inputs and outputs

CLI Examples

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 Handling

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

Interpretation Guidance

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

Limitations

  • Explicit schemes only for CFL/Fourier checks (implicit is unconditionally stable)

  • Von Neumann analysis assumes linear, constant-coefficient, periodic BCs

  • Stiffness detection requires eigenvalue estimates from user

References

  • references/stability_criteria.md

  • Decision thresholds and formulas

  • references/common_pitfalls.md

  • Frequent failure modes and fixes

  • references/scheme_catalog.md

  • Stability properties of common schemes

Version History

  • v1.1.0 (2024-12-24): Enhanced documentation, decision guidance, examples

  • v1.0.0: Initial release with 4 stability analysis scripts

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

nonlinear-solvers

No summary provided by upstream source.

Repository SourceNeeds Review
General

simulation-orchestrator

No summary provided by upstream source.

Repository SourceNeeds Review
General

mesh-generation

No summary provided by upstream source.

Repository SourceNeeds Review
General

linear-solvers

No summary provided by upstream source.

Repository SourceNeeds Review