Skip to main content

A JAX simulator for N body problems.

Project description

NBODYX: Simulating N-Body Systems with Jax

This repository derives ODEs for N-Body systems and simulates them using Jax. The main goal is to provide a simple and efficient way to simulate N-Body systems using Jax.

Installation

You can install the package using pip:

pip install nbodyx

or locally in editable mode:

pip install -e .

For animations, we require ffmpeg to be installed. On Ubuntu, you can install it using:

sudo apt-get install ffmpeg

or using conda:

conda install -c conda-forge ffmpeg

Usage

The following example simulates a 3-Body system:

from diffrax import diffeqsolve, Dopri5, ODETerm, SaveAt
import jax.numpy as jnp
from nbodyx.constants import G
from nbodyx.ode import make_n_body_ode
from nbodyx.rendering.opencv import animate_n_body, render_n_body

if __name__ == "__main__":
    body_masses = jnp.array([1.0, 1.0, 1.0]) / G
    ode_fn = make_n_body_ode(body_masses)

    # initial positions
    x0 = jnp.array(
        [
            [-0.97000436, 0.24208753],
            [0.0, 0.0],
            [0.97000436, -0.24208753],
        ]
    )
    # initial velocities
    v0 = jnp.array(
        [
            [0.4662036850, 0.4323657300],
            [-0.93240737, -0.86473146],
            [0.4662036850, 0.4323657300],
        ]
    )

    # initial state
    y0 = jnp.stack([x0, v0], axis=0).reshape(-1)
    # external torques
    tau = jnp.zeros((6,))

    # state bounds
    x_min, x_max = -1.5 * jnp.ones((1,)), 1.5 * jnp.ones((1,))

    # simulation settings
    duration = 6.3259
    ts = jnp.linspace(0.0, duration, 1001)
    dt = ts[-1] * 1e-4

    # solve the ODE
    ode_term = ODETerm(ode_fn)
    sol = diffeqsolve(ode_term, Dopri5(), ts[0], ts[-1], dt, y0, tau, saveat=SaveAt(ts=ts), max_steps=None)
    # extract the solution
    y_bds_ts = sol.ys.reshape((len(ts), 2, 3, 2))  # shape: (timesteps, 2, num_bodies, num_dims)

    # animate the solution
    animate_n_body(
        ts,
        x_bds_ts=y_bds_ts[:, 0, ...],
        width=500,
        height=500,
        video_path="examples/outputs/three_body.mp4",
        speed_up=ts[-1] / 10,
        x_min=x_min,
        x_max=x_max,
        timestamp_unit="s",
    )

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nbodyx-0.0.1rc53.post1.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

nbodyx-0.0.1rc53.post1-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file nbodyx-0.0.1rc53.post1.tar.gz.

File metadata

  • Download URL: nbodyx-0.0.1rc53.post1.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for nbodyx-0.0.1rc53.post1.tar.gz
Algorithm Hash digest
SHA256 1deddb37edb32984f847e9dd57d0ac4c420e0410d7ed85fb50c0de2591c4c8e8
MD5 a964722ea613c4983fd7c95593971058
BLAKE2b-256 a32cd3419cd5ef05dced8c31f15e4f5f50d44f597e35830a01c3bbe223ead4a6

See more details on using hashes here.

Provenance

File details

Details for the file nbodyx-0.0.1rc53.post1-py3-none-any.whl.

File metadata

File hashes

Hashes for nbodyx-0.0.1rc53.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 3c348aa8385db01937d63309c31379e1a8b53414da0b4269514b0e02745ff993
MD5 e72ddae30356bced234b969e992b5bb0
BLAKE2b-256 2da13782114ea799201006191a6783aa7f64bc81a77c368b64f9639277c4c794

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page