One-dimensional gravitational N-body code
Project description
wendy
A one-dimensional gravitational N-body code.
Overview
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.
Author
Jo Bovy (University of Toronto): bovy - at - astro - dot - utoronto - dot - ca
Installation
Install the latest release using
pip install wendy
or clone/fork/download the repository and install using
sudo python setup.py install
or locally using
python setup.py install --user
The behavior of the parallel sorting algorithm used when setting sort='parallel'
in the approximate version of the N-body code (approx=True
) is controlled by a few compilation-time variables: PARALLEL_SERIAL_SORT_SWITCH
, which sets the length of an array below which the serial sort is used, PARALLEL_SERIAL_MERGE_SWITCH
, which sets the length of an array below which a serial merge is used (as part of the mergesort
sorting algorithm used), and PARALLEL_SORT_NUM_THREADS
, the number of threads used in the parallel sorting algorithm. By default, these are set to PARALLEL_SERIAL_MERGE_SWITCH=10000
, PARALLEL_SERIAL_MERGE_SWITCH=50000
, and PARALLEL_SORT_NUM_THREADS=32
, which appear to work well. Significant speed-ups can be obtained by optimizing these for your system and specific problem. They can be set to different values by running, e.g.,
export CFLAGS="$CFLAGS -D PARALLEL_SERIAL_SORT_SWITCH=10 -D PARALLEL_SERIAL_MERGE_SWITCH=10 -D PARALLEL_SORT_NUM_THREADS=2"
before compiling the code (if you are trying to change them, make sure to force a re-compilation by removing the build/
directory).
Usage
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=
, (b) include an external harmonic oscillator potential omega^2 x^2 / 2
with omega=
(both for exact and approximate solutions), and (c) include an arbitrary external force F(x,t)
(using ext_force=
, only for the approximate solution).
Examples
- 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)
- The Gaia phase-space spiral: 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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file wendy-0.2.tar.gz
.
File metadata
- Download URL: wendy-0.2.tar.gz
- Upload date:
- Size: 30.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.34.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f3fa0b9a40637f8745864e6f37a9ce8e89dada913816189465ee2c020ed096e2 |
|
MD5 | 4657832aa0586c4da2e8f149e673ff27 |
|
BLAKE2b-256 | f4d8703513aefa5e2c63e91d88e834af502a2d9d65f624d55cd47a9a0a5b944c |