One-dimensional gravitational N-body code
A one-dimensional gravitational N-body code.
wendy solves the one-dimensional gravitational N-body problem to machine precision with an efficient algorithm [O(log N) / particle-collision]. Alternatively, it can solve the problem with approximate integration, but with exact forces.
Clone/fork/download the repository and install using
sudo python setup.py install
or locally using
python setup.py install --user
Use wendy.nbody to initialize a generator object for initial (x,v) with masses m. The generator then returns the state of the system at equally-spaced time intervals:
g= wendy.nbody(x,v,m,0.05) # delta t = 0.05 next_x, next_v= next(g) # at t=0.05 next_x, next_v= next(g) # at t=0.10 ...
The generator initialization with wendy.nbody has options to (a) solve the problem exactly or not using approx= and (b) include an external harmonic oscillator potential omega^2 x^2 / 2 with omega= (both for exact and approximate solutions).
You can run these without installing wendy by clicking on and navigating to the examples/ directory. Note that some of the movies might fail to be rendered on the binder webpage, so you might want to skip those when running the notebooks (or changing the subsamp input for them).
- Phase mixing and violent relaxation in one dimension: example notebook (run locally to see movies, or view on nbviewer)
- A self-gravitating, sech2 disk: example notebook (run locally to see movies, or view on nbviewer)
- Adiabatic contraction: example notebook (run locally to see movies, or view on nbviewer)
- Adiabatic vs. non-adiabatic energy injection for an exponential disk: example notebook (run locally to see movies, or view on nbviewer)
- wendy scaling with particle number: example notebook (view on nbviewer)