Odisseo documentation#

Introduction and Installation#

odisseo differentiable direct Nbody written in JAX.

\(\nabla\) Differentiable N-body code

Written in JAX, Odisseo is fully differentiable - a simulation can be differentiated with respect to any input parameter - and just-in-time compiled for fast execution on CPU, GPU, or TPU.

Well-considered Numerical Methods

Particular importance is put in the choice of the simulation units and what checks can be run to see if the simulation underwent numerical errors as a post-processing strategy.

Easily parallelized

Distribution strategies are easily implemented to take full advantage of multi-device machines.

Installation#

odisseo can be installed by cloning the repo and then via pip

git clone https://github.com/vepe99/Odisseo.git
cd Odisseo
pip install .

Note that if JAX is not yet installed, only the CPU version of JAX will be installed as a dependency. For a GPU-compatible installation of JAX, please refer to the JAX installation guide.

Notebooks for Getting Started#

Roadmap#

  • Implement simple initial_conditions (two body, self gravitating Plummer sphere )

  • Implement units conversion

  • Implement gradient through the time_integration

  • Implement diffrax backend for integrators

  • Implement sphere sky projection

  • Implement key external_potential for disrupted dwarf galaxies scenarios (Navarro-Frank-White halo, Miyamoto-Nagai disk)

  • Multi gpu parallelization

  • Implement adaptive time stepping