N-body gravitational simulation engine written in modern C++17 with CUDA acceleration support.
This project simulates the motion of N particles under mutual gravitational attraction. It implements multiple integration algorithms (Euler, Leapfrog, Symplectic Euler) and supports flexible initial conditions and data export formats for analysis and visualization.
-
Multiple Integration Methods
- Euler integration
- Leapfrog integration
- Symplectic Euler integration
- GPU-accelerated Euler (CUDA)
-
Flexible Configuration
- JSON-based configuration for easy simulation setup
- Configurable time steps, iteration counts, and export intervals
- Multiple initial condition generators (disc, automatic velocity plane)
-
Rich Export Capabilities
- CSV statistics (energy, momentum, etc.)
- VTK format for visualization
- Per-body data export (positions, velocities, accelerations, masses)
├── src/ # C++ implementation
│ ├── simulations/ # Integration algorithm implementations
│ ├── exporters/ # Data export modules
│ ├── configurations/ # Initial condition generators
│ └── main.cpp # CLI entry point
├── hdr/ # Header files
├── tests/ # Unit tests (Google Test)
├── configs/ # Example configuration files
└── analysis.ipynb # Jupyter notebook for results analysis
- C++17 compiler (clang++)
- CMake 3.10+
- CUDA Toolkit (optional, for GPU acceleration)
- Python 3.12+ (for analysis tools)
mkdir build
cmake -B build
cmake --build buildThis produces:
nbody- Main simulation executablenbody_test- Unit test suite
Run a simulation with a configuration file:
./build/nbody -c configs/your_config.json{
"simulation": "GpuEulerSimulation",
"exporter": ["positions"],
"initial_conditions_configuration": {
"id": "automatic_velocity_plane",
"config": {
"masses": [1.0, 100.0],
"positions": [100.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"velocity_normals": [0.0, 0.0, 1.0, 0.0, 0.0, 1.0]
}
},
"export_directory": "out",
"dt": 0.001,
"steps": 100000,
"steps_per_export": 1000
}The included Jupyter notebook (analysis.ipynb) provides tools for:
- Plotting energy conservation
- Analyzing momentum trends
- Visualizing simulation results
To view the simulation output open the output .vtp and simulation.pvd files in a program supporting them (e.g. ParaView).
- nlohmann/json - JSON configuration parsing
- spdlog - Logging
- Google Test - Unit testing
All dependencies are automatically fetched via CMake.
This is a showcase project demonstrating software engineering practices including:
- Modern C++ design patterns
- GPU computing with CUDA
- Clean separation of concerns
- Extensible architecture for adding new algorithms and exporters