Example usage of reb_add_fmt() (C)
The reb_add_fmt() function can be used to add a particle to the simulation by specifying the particle's coordinates in a variety of formats.
#include "rebound.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
struct reb_simulation* r = reb_create_simulation();
// Central object at origin with mass=1
reb_add_fmt(r, "m", 1.);
// Massless particle on circular orbit with a=1
reb_add_fmt(r, "a", 1.);
// A Jupiter mass planet with a=2 and e=0.1
reb_add_fmt(r, "m a e", 1e-3, 2., 0.1);
// By default Jacobi coordinates are used, here we use
// heliocentric coordinates by specifying the primary.
reb_add_fmt(r, "a e primary", 0.1, 0.3, r->particles[0]);
// The function supports any arbitrary combination of
// orbital parameters as long as it's physically meaningful.
reb_add_fmt(r, "a e omega", 3., 0.1, M_PI);
reb_add_fmt(r, "a e pomega", 4., 0.1, M_PI/2.);
reb_add_fmt(r, "P h k", 365.25, 0.01, 0.02);
// Non-physical parameter combinations raise errors
reb_add_fmt(r, "a e", -1., 0.1);
reb_add_fmt(r, "a e", -1., 0.1);
// Cartesian coordinates are supported as well
reb_add_fmt(r, "m x vy", 1e-3, 9., 0.3);
/** Supported parameters are:
* m: Mass (Default: 0)
* x, y, z: Positions in Cartesian coordinates (Default: 0)
* vx, vy, vz: Velocities in Cartesian coordinates (Default: 0)
* primary: Primary body for converting orbital elements to cartesian (Default: center of mass of the particles in the passed simulation, i.e., this will yield Jacobi coordinates as one progressively adds particles)
* a: Semimajor axis (a or P required if passing orbital elements)
* P: Orbital period (a or P required if passing orbital elements)
* e: Eccentricity (Default: 0)
* inc: Inclination (Default: 0)
* Omega: Longitude of ascending node (Default: 0)
* omega: Argument of pericenter (Default: 0)
* pomega: Longitude of pericenter (Default: 0)
* f: True anomaly (Default: 0)
* M: Mean anomaly (Default: 0)
* E: Eccentric anomaly (Default: 0)
* l: Mean longitude (Default: 0)
* theta: True longitude (Default: 0)
* T: Time of pericenter passage
* h: h variable, see Pal (2009) for a definition (Default: 0)
* k: k variable, see Pal (2009) for a definition (Default: 0)
* ix: ix variable, see Pal (2009) for a definition (Default: 0)
* iy: iy variable, see Pal (2009) for a definition (Default: 0)
* r: Particle radius
*
* Note that it is important to pass floating point numbers and not integers to reb_add_fmt().
* For example:
* reb_add_fmt(r, "a", 1)
* will lead to undefined behaviour. Instead, use
* reb_add_fmt(r, "a", 1.0)
*/
// Run a test simulation
reb_move_to_com(r);
reb_integrate(r,100.);
}
This example is located in the directory examples/reb_add_fmt