Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def simulation(par):
integrator, run, trial = par
rebound.reset()
k = 0.01720209895
Gfac = 1./k
rebound.set_dt(dt*pow(2.,trial))
rebound.set_integrator(integrator)
rebound.set_force_is_velocitydependent(0)
massfac = 1.
rebound.add_particle(m=1.00000597682, x=-4.06428567034226e-3, y=-6.08813756435987e-3, z=-1.66162304225834e-6, vx=+6.69048890636161e-6*Gfac, vy=-6.33922479583593e-6*Gfac, vz=-3.13202145590767e-9*Gfac) # Sun
rebound.add_particle(m=massfac/1407.355, x=+3.40546614227466e+0, y=+3.62978190075864e+0, z=+3.42386261766577e-2, vx=-5.59797969310664e-3*Gfac, vy=+5.51815399480116e-3*Gfac, vz=-2.66711392865591e-6*Gfac) # Jupiter
rebound.add_particle(m=massfac/3501.6, x=+6.60801554403466e+0, y=+6.38084674585064e+0, z=-1.36145963724542e-1, vx=-4.17354020307064e-3*Gfac, vy=+3.99723751748116e-3*Gfac, vz=+1.67206320571441e-5*Gfac) # Saturn
rebound.add_particle(m=massfac/22869., x=+1.11636331405597e+1, y=+1.60373479057256e+1, z=+3.61783279369958e-1, vx=-3.25884806151064e-3*Gfac, vy=+2.06438412905916e-3*Gfac, vz=-2.17699042180559e-5*Gfac) # Uranus
rebound.add_particle(m=massfac/19314., x=-3.01777243405203e+1, y=+1.91155314998064e+0, z=-1.53887595621042e-1, vx=-2.17471785045538e-4*Gfac, vy=-3.11361111025884e-3*Gfac, vz=+3.58344705491441e-5*Gfac) # Neptune
N = rebound.get_N()
particles = rebound.get_particles()
np.random.seed(run)
for i in xrange(N):
particles[i].m *= 1.+1e-3*np.random.rand()
particles[i].x *= 1.+1e-3*np.random.rand()
particles[i].y *= 1.+1e-3*np.random.rand()
particles[i].z *= 1.+1e-3*np.random.rand()
particles[i].vx *= 1.+1e-3*np.random.rand()
particles[i].vy *= 1.+1e-3*np.random.rand()
particles[i].vz *= 1.+1e-3*np.random.rand()
def move_to_heliocentric():
particles = rebound.get_particles()
particles[0].x = 0.
particles[0].y = 0.
integrator, run, trial = par
rebound.reset()
k = 0.01720209895
G = k*k
rebound.set_G(G)
rebound.set_dt(dt)
rebound.set_integrator(integrator)
rebound.set_force_is_velocitydependent(0)
rebound.add_particle(m=1.00000597682, x=-4.06428567034226e-3, y=-6.08813756435987e-3, z=-1.66162304225834e-6, vx=+6.69048890636161e-6, vy=-6.33922479583593e-6, vz=-3.13202145590767e-9) # Sun
rebound.add_particle(m=1./1047.355, x=+3.40546614227466e+0, y=+3.62978190075864e+0, z=+3.42386261766577e-2, vx=-5.59797969310664e-3, vy=+5.51815399480116e-3, vz=-2.66711392865591e-6) # Jupiter
rebound.add_particle(m=1./3501.6, x=+6.60801554403466e+0, y=+6.38084674585064e+0, z=-1.36145963724542e-1, vx=-4.17354020307064e-3, vy=+3.99723751748116e-3, vz=+1.67206320571441e-5) # Saturn
rebound.add_particle(m=1./22869., x=+1.11636331405597e+1, y=+1.60373479057256e+1, z=+3.61783279369958e-1, vx=-3.25884806151064e-3, vy=+2.06438412905916e-3, vz=-2.17699042180559e-5) # Uranus
rebound.add_particle(m=1./19314., x=-3.01777243405203e+1, y=+1.91155314998064e+0, z=-1.53887595621042e-1, vx=-2.17471785045538e-4, vy=-3.11361111025884e-3, vz=+3.58344705491441e-5) # Neptune
# rebound.add_particle(m=0, x=-2.13858977531573e+1, y=+3.20719104739886e+1, z=+2.49245689556096e+0, vx=-1.76936577252484e-3, vy=-2.06720938381724e-3, vz=+6.58091931493844e-4) # Pluto
N = rebound.get_N()
particles = rebound.get_particles()
np.random.seed(run)
for i in xrange(N):
particles[i].m *= 1.+1e-3*np.random.rand()
particles[i].x *= 1.+1e-3*np.random.rand()
particles[i].y *= 1.+1e-3*np.random.rand()
particles[i].z *= 1.+1e-3*np.random.rand()
particles[i].vx *= 1.+1e-3*np.random.rand()
particles[i].vy *= 1.+1e-3*np.random.rand()
particles[i].vz *= 1.+1e-3*np.random.rand()
def move_to_heliocentric():
particles = rebound.get_particles()
particles[0].x = 0.
particles[0].y = 0.
# Modify particles
# As an example, we are reverting the velocities
particles = rebound.particles_get()
for i in range(rebound.get_N()):
particles[i].vx *= -1.
particles[i].vy *= -1.
particles[i].vz *= -1.
# Integrate another 100 time units, until t=200
rebound.integrate(200.)
# Get particles back and print positions
# Since we're integrating forward and then backward we end up with the
# particles exactly where they started out from (note that we moved to the
# center of momentum frame)
for i in range(rebound.get_N()):
print(particles[i].x, particles[i].y, particles[i].z)
def simulation(par):
integrator = par
rebound.reset()
k = 0.01720209895
G = k*k
rebound.set_G(G)
rebound.set_dt(dt)
rebound.set_integrator(integrator)
rebound.add_particle(m=1.00000597682, x=-4.06428567034226e-3, y=-6.08813756435987e-3, z=-1.66162304225834e-6, vx=+6.69048890636161e-6, vy=-6.33922479583593e-6, vz=-3.13202145590767e-9) # Sun
rebound.add_particle(m=1./1047.355, x=+3.40546614227466e+0, y=+3.62978190075864e+0, z=+3.42386261766577e-2, vx=-5.59797969310664e-3, vy=+5.51815399480116e-3, vz=-2.66711392865591e-6) # Jupiter
# rebound.add_particle(m=1./3501.6, x=+6.60801554403466e+0, y=+6.38084674585064e+0, z=-1.36145963724542e-1, vx=-4.17354020307064e-3, vy=+3.99723751748116e-3, vz=+1.67206320571441e-5) # Saturn
# rebound.add_particle(m=1./22869., x=+1.11636331405597e+1, y=+1.60373479057256e+1, z=+3.61783279369958e-1, vx=-3.25884806151064e-3, vy=+2.06438412905916e-3, vz=-2.17699042180559e-5) # Uranus
# rebound.add_particle(m=1./19314., x=-3.01777243405203e+1, y=+1.91155314998064e+0, z=-1.53887595621042e-1, vx=-2.17471785045538e-4, vy=-3.11361111025884e-3, vz=+3.58344705491441e-5) # Neptune
# rebound.add_particle(m=0, x=-2.13858977531573e+1, y=+3.20719104739886e+1, z=+2.49245689556096e+0, vx=-1.76936577252484e-3, vy=-2.06720938381724e-3, vz=+6.58091931493844e-4) # Pluto
N = rebound.get_N()
def move_to_heliocentric():
particles = rebound.get_particles()
for i in xrange(1,N):
particles[i].x -= particles[0].x
particles[i].y -= particles[0].y
particles[i].z -= particles[0].z
particles[i].vx -= particles[0].vx
particles[i].vy -= particles[0].vy
particles[i].vz -= particles[0].vz
particles[0].x = 0.
particles[0].y = 0.
particles[0].z = 0.
particles[0].vx = 0.
particles[0].vy = 0.
# Set the center of momentum to be at the origin
rebound.move_to_center_of_momentum()
# Get the particle data
# Note: this is a pointer and will automatically update as the simulation progresses
particles = rebound.particles_get()
# timestep counter
steps = 0
# Integrate until t=1e6 (unit of time in this example is days)
while rebound.get_t()<1e6:
rebound.step()
steps += 1
# Print particle positions every 100 timesteps
if steps%100==0:
for i in range(rebound.get_N()):
# time particle id x y z
print("%e %d %e %e %e" % (rebound.get_t(), i, particles[i].x, particles[i].y, particles[i].z))