Tutorial¶
Imports¶
import numpy
# PySpace PlanetArray imports
from pyspace.planet import PlanetArray
# PySpace Simulator imports
from pyspace.simulator import BruteForceSimulator
Note
These are common to all simulations with brute force.
For dumping vtk output with custom data, use the set_data
function in
pyspace.simulator.Simulator
.
For using BarnesSimulator
, use
# Import BarnesSimulator instead of BruteForceSimulator
from pyspace.simulator import BarnesSimulator
Setting up PlanetArray¶
PlanetArray
is the container for all objects in a simulation.
The following example sets up a PlanetArray with planets arranged in a cube
x, y, z = numpy.mgrid[0:500:5j, 0:500:5j, 0:500:5j]
x = x.ravel(); y = y.ravel(); z = z.ravel()
pa = PlanetArray(x=x, y=y, z=z)
Setting up the Simulation¶
Simulator
is the base of all computations in PySpace.
The following snippet shows how to set up the simulation.
G = 1
dt = 0.1
sim = BruteForceSimulator(pa, G, dt, sim_name = "square_grid")
For using BarnesSimulator
, you need to define \(\theta\) (thetha
) (see framework).
theta = 0.1
sim = BarnesSimulator(pa, G, dt, theta, sim_name = "square_grid")
Note
As \(\theta\) is increased, speed of simulation will increase, but accuracy will decrease.
Running without GPU support¶
By default PySpace uses CUDA version of BruteForceSimulator
. To use serial or OpenMP
version you need to reinstall PySpace with the USE_CUDA
environmental variable set to 0.
Gravity softening¶
For using gravity softening (see framework), you can set the value of \(\epsilon\) by doing the following.
epsilon = 1
G = 1
dt = 0.1
sim = BruteForceSimulator(pa, G = G, dt = dt, epsilon = epsilon, sim_name = "square_grid")
Note
Use \(\epsilon\) only when planets are colliding.
Running the simulator¶
BruteForceSimulator::simulate
simulates the system for a given time.
Following is the syntax for simulate
.
# Simulate for 1000 secs, ie. 1000/0.1 = 10e4 time steps
sim.simulate(total_time = 1000, dump_output = True)
Note
dump_output = True
essentially dumps a vtk output for every timestep.
Dumping custom vtk output¶
pyspace.simulator.BruteForceSimulator
by default only dumps
\(v_x, v_y, v_z\) ie. the velocity in the generated vtk output. To dump
additional data, you need to use pyspace.simulator.Simulator.set_data
function.
Using this method for the above problem, you can write,
# Do all imports and set up the PlanetArray as done above
# Set up the simulator
sim = BruteForceSimulator(pa, G, dt, sim_name = "square_grid")
# Use set_data() to tell the simulator what to dump
# For this problem, lets say you only need a_x, a_y and a_z
sim.set_data(a_x = 'a_x', a_y = 'a_y', a_z = 'a_z')
sim.simulate(total_time = total_time, dump_output = True)
Note
Arguments of set_data
is a property name, attribute name pair.
For the above example, we could have called set_data
as
set_data(acc_x = 'a_x', ...)
and it would still work.