Skip to content

MiZuii/NBodySimulator

Repository files navigation

NBody Simulator

N-body gravitational simulation engine written in modern C++17 with CUDA acceleration support.

Overview

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.

Features

  • 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)

Project Structure

├── 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

Building

Requirements

  • C++17 compiler (clang++)
  • CMake 3.10+
  • CUDA Toolkit (optional, for GPU acceleration)
  • Python 3.12+ (for analysis tools)

Compilation

mkdir build
cmake -B build
cmake --build build

This produces:

  • nbody - Main simulation executable
  • nbody_test - Unit test suite

Usage

Run a simulation with a configuration file:

./build/nbody -c configs/your_config.json

Configuration Format

{
  "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
}

Analysis

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).

Dependencies

  • nlohmann/json - JSON configuration parsing
  • spdlog - Logging
  • Google Test - Unit testing

All dependencies are automatically fetched via CMake.

Notes

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