Smoothed particle hydrodynamics analysis and visualization with Python.
Plonk is a Python tool for analysis and visualization of smoothed particle hydrodynamics data with a focus on astrophysical fluid dynamics.
With Plonk we aim to integrate the high quality SPH visualisation of Splash into the modern Python astronomer workflow, and provide a framework for analysis of smoothed particle hydrodynamics simulation data.
Plonk supports the following SPH file formats:
Note: you can convert Phantom non-HDF5 snapshots to HDF5. See the Phantom docs.
To read in a simulation with snapshot files like disc_00000.h5
, and global quantity time series files like disc01.ev
, in the current directory, and see what snapshots there are:
>>> import plonk
>>> simulation = plonk.load_sim(prefix='disc')
>>> simulation.snaps
[<plonk.Snap "disc_00000.h5">,
...
<plonk.Snap "disc_00030.h5">]
You can load individual snapshots and access the particle arrays:
>>> snap = plonk.load_snap('disc_00030.h5')
>>> snap['position']
array([[ -24.69953214, 49.60113417, -4.98059478],
[-108.99243136, 77.74663833, 12.89299546],
[ -51.22218782, 108.64454019, 1.56619644],
...,
[ 93.296599 , -77.66042087, 5.40835798],
[ 63.75108128, 66.7446782 , 3.30169363],
[ 8.11639008, 139.45117413, 7.55340187]])
The Snap objects contain the particle arrays, lazily loaded from the HDF5 file, as well as simulation metadata properties stored as a dictionary.
To visualize the column density on a snapshot:
>>> plonk.visualize.plot(snap=snap, quantity='density')
For a more complicated example, here is the deviation from Keplerian velocity around a planet embedded in a protoplanetary disc.
Deviation from Keplerian velocity around a planet: at the disc midplane (left), and 10 (middle) and 20 au (right) above the disc midplane. Data from a Phantom simulation.
Extra quantities not written to the snapshot file are available:
>>> snap.extra_quantities()
<plonk.Snap "disc_00030.h5">
>>> snap['angular_momentum']
array([ ... ])
You can generate radial profiles on the snapshot. For example, to calculate the scale height in a disc:
>>> prof = plonk.load_profile(snap)
>>> prof['scale_height']
array([ ... ])
Physical units for array quantities and other properties are available.
>>> snap['position'][0]
array([-24.69953214, 49.60113417, -4.98059478])
>>> snap.physical_units()
<plonk.Snap "disc_00030.h5">
>>> snap['position'][0]
array([-3.69505001e+14, 7.42032967e+14, -7.45096980e+13]) <Unit('centimeter')>
>>> snap['position'][0].to('au')
array([-24.6998837 , 49.60184016, -4.98066567]) <Unit('astronomical_unit')>
For further usage, see documentation. The code is internally documented with docstrings. Try, for example, help(plonk.Snap)
or help(plonk.load_snap)
.
You can install Plonk via the package manager Conda from conda-forge.
conda install plonk
This will install the required dependencies. Note: you may need to first add the conda-forge
channel with conda config --add channels conda-forge
. I also recommend strictly using conda-forge which you can do with conda config --set channel_priority true
. For details on Conda, see https://docs.conda.io/.
You can also install Plonk via pip.
pip install plonk
This should install the required dependencies. For details on pip, see https://pip.pypa.io/.
Python 3.6+ with h5py, matplotlib, numba, numpy, pandas, pint, scikit-image, scipy, tqdm. Installing Plonk with conda or pip will install these dependencies.
If you need help, please try the following, in order:
help(plonk.load_snap)
.Please don't be afraid to raise an issue. Even if your issue is not a bug, it's nice to have the question and answer available in a public forum so we can all learn from it together.
If you don't get an immediate response, please be patient. Plonk is maintained by one person, @dmentipl.
Thank you for considering contributing to Plonk. All types of contributions are welcome from all types of people with different skill levels.
See CONTRIBUTING.md for guidelines on how to contribute.
If you use Plonk in a scientific publication, please cite the paper published in JOSS.
Plonk: Smoothed particle hydrodynamics analysis and visualization with Python
You should also consider citing any other scientific software packages that you use.