Package: plonk
PlonkSmoothed particle hydrodynamics analysis and visualization with Python.Docs:https://plonk.readthedocs.io/Repo:https://www.github.com/dmentipl/plonkDescriptionPlonk 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 ofSplashinto the modern Python astronomer workflow, and provide a framework for analysis of smoothed particle hydrodynamics simulation data.UsagePlonk supports the following SPH file formats:Phantomoutput inHDF5format.Note: you can convert Phantom non-HDF5 snapshots to HDF5. See thePhantom docs.Accessing dataTo read in a simulation with snapshot files likedisc_00000.h5, and global quantity time series files likedisc01.ev, in the current directory, and see what snapshots there are:>>>importplonk>>>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(filename='disc_00030.h5')>>>snap['position']array([[-3.69505001e+12,7.42032967e+12,-7.45096980e+11],...,[1.21421196e+12,2.08618956e+13,1.12998892e+12]])<Unit('meter')>The Snap objects contain the particle arrays, lazily loaded from the HDF5 file, as well as simulation metadata properties stored as a dictionary.VisualizationTo visualize the column density on a snapshot:>>>snap.image(quantity='density')<AxesSubplot:xlabel='x [m]',ylabel='y [m]'>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. Seeherefor details.AnalysisExtra quantities not written to the snapshot file are available:>>>snap['angular_momentum']array([...])<Unit('kilogram * meter ** 2 / second')>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([...])<Unit('meter')>Physical units of array quantities and other properties allow for unit conversion:>>>pos=snap['position'][0]>>>posarray([-3.69505001e+12,7.42032967e+12,-7.45096980e+11])<Unit('meter')>>>>pos.to('au')array([-24.6998837,49.60184016,-4.98066567])<Unit('astronomical_unit')>You can get a subset of particles as a SubSnap.>>>subsnap=snap[:1000]>>>subsnap=snap[snap['x']>0]>>>subsnap=snap.family('gas')MoreFor further usage, seedocumentation. The code is internally documented with docstrings. Try, for example,help(plonk.Snap)orhelp(plonk.load_snap).InstallCondaYou can install Plonk via the package managerCondafromconda-forge.condainstallplonk--channelconda-forgeThis will install the required dependencies.Note: You can simply useconda install plonkif you add theconda-forgechannel withconda config --add channels conda-forge. I also recommend strictly using conda-forge which you can do withconda config --set channel_priority true. Both of these commands modify the Conda configuration file~/.condarc.pipYou can also install Plonk fromPyPIviapip.python-mpipinstallplonkThis should install the required dependencies.SourceYou can install Plonk from source as follows.# clone via HTTPSgitclonehttps://github.com/dmentipl/plonk.git# or clone via SSHgitclonegit@github.com:dmentipl/plonkcdplonk
python-mpipinstall-e.This assumes you have already installed the dependencies. One way to do this is by setting up a conda environment. Theenvironment.ymlfile provided sets up a conda environment "plonk" for using or developing Plonk.condaenvcreate--fileenvironment.yml
condaactivateplonkRequirementsPython 3.6+ withh5py,matplotlib,numba,numpy,pandas,pint,scipy,toml. Installing Plonk with conda or pip will install these dependencies.Getting helpIf you need help, please try the following:Check thedocumentation.Check the built-in help, e.g.help(plonk.load_snap).Raise an issue, as abug reportorfeature request, using the issue tracker.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.ContributingAll types of contributions are welcome from all types of people with different skill levels.Thank you for considering contributing to Plonk. There are many ways to contribute:If you find any bugs or cannot work out how to do something, please file abug reportin the issue tracker. Even if the issue is not a bug it may be that there is a lack of documentation.If you have any suggestions for new features, please raise afeature requestin the issue tracker.If you use Plonk to do anything please consider contributing to theexamplessection in particular, or any other section, of the documentation.If you would like to contribute code, firstly thank you! We take code contributions viapull request.SeeCONTRIBUTING.mdfor detailed guidelines on how to contribute.CitationIf you use Plonk in a scientific publication, please cite the paper published in JOSS.Plonk: Smoothed particle hydrodynamics analysis and visualization with PythonA BibTeX entry is available inCITATION.bibIf you use the interpolation to pixel grid component of Plonk please cite theSplash paper. You should also consider citing any other scientific software packages that you use.Change logThe change log is available inCHANGELOG.md