7.0 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
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. 🚀