If you have successfully installed REBOUND, then you are now ready to run your first simulation. On this page, we'll walk you through one simple example, line by line.
There are different ways to run python code:
- interactively, by using the python interpreter
- by executing a python script
- by using a Jupyter notebook
All of these methods work with REBOUND. Choose whichever you are most comfortable with.
We start by importing REBOUND:
import rebound
To run an N-body simulation, we need to create a simulation object first:
sim = rebound.Simulation()
Then, we add particles to the simulation:
sim.add(m=1.) # Central object
sim.add(m=1e-3, a=1., e=0.1) # Jupiter mass planet
sim.add(a=1.4, e=0.1) # Massless test particle
Now we can integrate the particles forward in time using the default integrator (IAS15) for 100 time units:
sim.integrate(100.)
Finally, let us output the cartesian coordinates and the orbital parameters at the end of the simulation:
for p in sim.particles:
print(p.x, p.y, p.z)
for o in sim.calculate_orbits():
print(o)
As a next step, have a look at the examples and tutorials in the python_examples
and ipython_examples
directories.
A very short example is provided in the examples/simplest/
directory.
Go to this directory with
cd examples/simplest/
Then have a look at the source code in the problem.c
file. First, we include the REBOUND header file which contains all the public function prototype and dataype definitions for REBOUND:
#include "rebound.h"
In the main function, we first create a REBOUND simulation with
struct reb_simulation* r = reb_create_simulation();
This function has now allocated memory for the simulation and initialized all the variables in the simulation to their default values. We can then add particles to the simulation:
reb_add_fmt(r, "m", 1.); // Central object
reb_add_fmt(r, "m a e", 1e-3, 1., 0.1); // Jupiter mass planet
reb_add_fmt(r, "a e", 1.4, 0.1); // Massless test particle
We then integrate the simulation for 100 time units with the default integrator (IAS15):
reb_integrate(r,100.);
After the integration is done, we can output the cartesian coordinates and the orbital parameters:
for (int i=0; i<r->N; i++){
struct reb_particle p = r->particles[i];
printf("%f %f %f\n", p.x, p.y, p.z);
}
struct reb_particle primary = r->particles[0];
for (int i=1; i<r->N; i++){
struct reb_particle p = r->particles[i];
struct reb_orbit o = reb_tools_particle_to_orbit(r->G, p, primary);
printf("%f %f %f\n", o.a, o.e, o.f);
}
To compile the example, simple type
make
into a terminal window while you're in the examples/simplest/
directory. Then run the simulation with
./rebound