7.9 KiB
Getting Started with the Roadmap
This guide helps you navigate the development roadmap for the Rust ODE library.
Roadmap Structure
roadmap/
├── README.md # Master overview with all features
├── GETTING_STARTED.md # This file
├── FEATURE_TEMPLATES.md # Brief summaries of features 6-38
└── features/
├── 01-bs3-method.md # Detailed implementation plan (example)
├── 02-vern7-method.md # Detailed implementation plan
├── 03-rosenbrock23.md # Detailed implementation plan
├── 04-pid-controller.md # Detailed implementation plan
├── 05-discrete-callbacks.md # Detailed implementation plan
├── 06-callback-set.md # Brief outline
└── 12-auto-switching.md # Detailed implementation plan
└── ... (create detailed files as needed)
How to Use This Roadmap
1. Review the Master Plan
Start with README.md to see:
- All 38 planned features organized by tier
- Dependencies between features
- Current completion status
- Overall progress tracking
2. Choose Your Next Feature
Recommended Order for Beginners:
- Start with Tier 1 features (essential)
- Follow dependency chains
- Mix difficulty levels (alternate hard and easy)
Suggested First 5 Features:
- BS3 Method (feature #1) - Easy, builds confidence
- PID Controller (feature #4) - Easy, immediate value
- Discrete Callbacks (feature #5) - Easy, useful capability
- Vern7 (feature #2) - Medium, important algorithm
- Linear Solver Infrastructure (feature #18) - Hard but foundational
3. Read the Detailed Feature File
Each detailed feature file contains:
- Overview: Quick introduction
- Why It Matters: Motivation
- Dependencies: What you need first
- Implementation Approach: Algorithm details
- Implementation Tasks: Detailed checklist
- Testing Requirements: How to verify it works
- References: Where to learn more
- Complexity Estimate: Time and difficulty
- Success Criteria: Definition of done
4. Implement the Feature
Follow the detailed task checklist:
- Read references and understand algorithm
- Implement core algorithm
- Write tests
- Document
- Benchmark
- Check off tasks as you complete them
5. Update the Roadmap
When you complete a feature:
- Check the box in
README.md - Update completion statistics
- Note any lessons learned or deviations from plan
Current State (Baseline)
Your library already has:
- ✅ Dormand-Prince 4(5) with dense output
- ✅ Tsit5 with dense output
- ✅ PI Controller
- ✅ Continuous callbacks with zero-crossing detection
- ✅ Solution interpolation interface
- ✅ Generic over compile-time array dimensions
- ✅ Support for second-order ODE problems
This is a solid foundation! The roadmap builds on this.
Recommended Development Path
Phase 1: Core Algorithm Diversity (Tier 1)
Goal: Give users algorithm choices
- BS3 - Easy, quick win
- Vern7 - High accuracy option
- Build linear solver infrastructure
- Rosenbrock23 - First stiff solver
- PID Controller - Better adaptive stepping
- Discrete Callbacks - More event types
Milestone: Can handle both non-stiff and stiff problems efficiently.
Phase 2: Robustness & Automation (Tier 2)
Goal: Make the library production-ready
- Auto-switching/stiffness detection
- Automatic initial step size
- More Rosenbrock methods (Rodas4)
- BDF method
- CallbackSet and advanced callbacks
- Saveat functionality
Milestone: Library can solve most problems automatically with minimal user input.
Phase 3: Specialization & Performance (Tier 3)
Goal: Optimize for specific problem classes
- Low-storage RK for large systems
- Symplectic integrators for Hamiltonian systems
- SSP methods for hyperbolic PDEs
- Verner suite completion
- Advanced linear/nonlinear solvers
- Performance optimizations (FSAL, custom norms)
Milestone: Best-in-class performance for specialized problem types.
Development Tips
Checks, and the Hooks That Run Them
The tree is rustfmt-clean, clippy-clean under -D warnings, and builds its docs
without warnings. All three stay that way, and a pre-existing warning is not an
exemption — fix it or mark it deliberately, as the Butcher tableaux are marked
#[rustfmt::skip] so rustfmt leaves their hand alignment alone.
The hooks in hooks/ run them. Git does not track where it looks for hooks, so
each clone needs one command:
git config core.hooksPath hooks
pre-commit is cargo fmt --check, cargo clippy --all-targets -- -D warnings
and cargo test --lib, about a second between them on a warm tree. pre-push
adds the full cargo test and cargo doc --no-deps, which cost around 25
seconds — the doctests are slow because each one links its own binary, and they
matter because the readme is the crate's front page and its examples are
compiled.
Testing Strategy
Every feature should have:
- Convergence test: Verify order of accuracy
- Correctness test: Compare to known solutions
- Edge case tests: Boundary conditions, error handling
- Benchmark: Performance measurement
Reference Material
When implementing a feature:
- Read the Julia implementation for guidance
- Check original papers for algorithm details
- Verify tableau/coefficients from authoritative sources
- Test against reference solutions from DiffEqDevDocs
Common Pitfalls
- Don't skip testing: Numerical bugs are subtle
- Verify tableau coefficients: Transcription errors are common
- Check interpolation: Easy to get wrong
- Test stiff problems: If implementing stiff solvers
- Benchmark early: Performance problems easier to fix early
Getting Help
Resources
-
Julia's OrdinaryDiffEq.jl: Reference implementation
- Location:
/tmp/diffeq_copy/OrdinaryDiffEq.jl/ - Well-tested, can compare behavior
- Location:
-
Hairer & Wanner textbooks:
- "Solving ODEs I: Nonstiff Problems"
- "Solving ODEs II: Stiff and DAE Problems"
-
DiffEqDevDocs: Developer documentation
-
Test problems: Standard ODE test suite
- Van der Pol, Robertson, Pleiades, etc.
- Reference solutions available
Creating New Detailed Feature Files
When ready to work on a feature that only has a brief summary:
- Copy structure from
features/01-bs3-method.md - Fill in details from
FEATURE_TEMPLATES.md - Add algorithm-specific information
- Create comprehensive task checklist
- Define specific test requirements
- Estimate complexity honestly
Tracking Progress
In README.md
Update the checkboxes as features are completed:
- Incomplete
- Complete
Update completion statistics at bottom:
## Progress Tracking
Total Features: 38
- Tier 1: 8 features (3/8 complete) # Update these
- Tier 2: 12 features (0/12 complete)
- Tier 3: 18 features (0/18 complete)
Optional: Keep a CHANGELOG.md
Document major milestones:
# Changelog
## 2025-01-XX
- Completed BS3 method
- Completed PID controller
- Started Vern7 implementation
## 2025-01-YY
- Completed Vern7
- Linear solver infrastructure in progress
Questions to Ask Before Starting
Before implementing a feature:
-
Do I understand the algorithm?
- Read the papers
- Understand the math
- Know the use cases
-
Are dependencies satisfied?
- Check the dependency list
- Make sure infrastructure exists
-
Do I have test cases ready?
- Know how to verify correctness
- Have reference solutions
-
What's the success criteria?
- Clear definition of "done"
- Performance targets
Next Steps
- Read
README.mdto see the full roadmap - Pick a feature to start with (suggest: BS3 or PID Controller)
- Read its detailed feature file
- Implement following the task checklist
- Test thoroughly
- Update the roadmap
- Move to next feature!
Good luck! You're building something great. 🚀