add-solver
Add a new solver to the project
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Add Solver
Add a new numerical solver to the project.
Steps
- Ask the user for the solver type/method (e.g., explicit FDM, MOL, FEM, etc.)
- Read
solvers/base.pyto review theSolverBaseinterface - Create an appropriate subdirectory (e.g.,
solvers/fem/) - Implement the new solver inheriting from
SolverBase:- Set the
nameclass attribute - Implement
solve(T0, r, dt, t_end, alpha) -> T_history - Handle r=0 singularity via L'Hopital's rule
- Apply Neumann BC (r=0) and Dirichlet BC (r=1)
- Use scipy.linalg.solve_banded for tridiagonal systems (performance)
- Set the
- Add tests in
tests/test_solvers.py:- Basic operation test (temperature decreases via diffusion)
- Boundary condition test
- Nonlinear (alpha>0) test
- Register the solver in
app/run_benchmark.pySOLVERS list - Add stability constraints in
policy/stability.py:- Determine if unconditionally stable or has CFL condition
- Set temporal_order, spatial_order
- Set alpha_max if there are nonlinearity limits
- Verify all tests pass with
python -m pytest tests/ -v - Run quick benchmark:
python -m app.run_benchmark --alpha 0.5 - Update HISTORY.md
Implementation Checklist
- Inherits from SolverBase
- name attribute set (lowercase, underscore-separated)
- solve() returns shape (nt+1, nr)
- r=0 singularity handled (L'Hopital)
- BC: T'(0)=0, T(1)=0
- Nonlinear chi computed correctly
- Registered in SOLVERS list
- Stability info in policy/stability.py
- Tests pass
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!