L-PICOLA is a distributed-memory, parallel code for creating fast, accurate, dark matter simulations.
- How parallel? We've used it for simulations with ~68,000,000,000 particles on over 1000 processors without a hitch.
- How fast? Due to the algorithms used and the coding, it is ~1000 times faster than an identical full N-Body simulation
- How accurate? We can reproduce the two- and three-point clustering of dark matter to within 2% on all scales used for current BAO and RSD measurements.
On top of this we can include primordial non-Gaussianity in the initial conditions and generate lightcone simulations during runtime, without using any extra memory and with minimal cost to computational time (We're so proud of this feature we even put it in the name). We can also replicate the box at runtime to cover the full redshift range, whilst still keeping a good simulation resolution. Full details of the code and it's capabilities can be found in Howlett et. al., 2015b.
The code has already been used to generate mock galaxy catalogues for the SDSS-II Main Galaxy Sample. You can find out more about this in the papers Ross et. al., 2015 and Howlett et. al., 2015a. We are also using it to generate a set of highly detailed lightcone mocks for the Dark Energy Survey. We hope it finds many more uses.
You can download the source code using the links up the top. Furthermore, the code is still under active development so if you feel like getting your hands dirty, just fork the code using the GitHub link.
Basic Usage
We have included a detailed User Guide with the source code. You should find all the information on the different options within, and inputs required, by the code. As a basic example, you'll first need the MPI, FFTW-3 and GSL libraries installed.
Then you'll need to specify the filepaths for these is the Makefile included with the code. If you've done this correctly, typing Make
from the directory containing the Makefile and source files should compile the code.
To run the code, you can then type:
mpirun -np 8 L-PICOLA file/run_parameters.dat
This will run the example included with the distribution on 8 processors.
Contributors
Cullan Howlett (ICG, Portsmouth)
Marc Manera (UCL, London)
Will Percival (ICG, Portsmouth)
Version
1.3 (05-Feb-2016)
Bug fixes for Non-Gaussian simulations:
- Input transfer function and power spectrum normalisation from previous fix (v1.2) still wrong for non-Gaussian runs when units of kpc were used instead of Mpc. This has been fixed and the units for both Gaussian and non-Gaussian runs are consistent within power.c
- The conversion between overdensity and Gaussian potential required as the first step for calculating the non-Gaussian potential was hardcoded to be in (h/Mpc)^2. This meant the code gave incorrect initial displacements for non-Gaussian runs when units of kpc were used. This conversion now takes into account the user-defined length units.
Many thanks to Jonghee Kang for pointing out these errors
1.2 (11-Dec-2015)
Minor bug fixes and changes:
- Particle positions are now output in the units defined in the run_parameters.dat file as opposed Mpc/h.
- Input Transfer function and power spectrum normalisation is now consistent regardless of units. Any required unit conversions here are applied as a more distinct normalisation factor. This stops the minor differences observed between runs with different units caused by numerical inaccuracies in the evaluation of σ8.
- Finally, a bug that caused z=9 outputs to have the file name z8p100 has been fixed. This was due to floating point inaccuracies in the representation of the value '0.1'.
Many thanks to Andrej Obuljen for pointing out these errors
1.1 (08-Jun-2015)
Updated cosmological equations to support non-flat cosmologies. Now uses Matsubara (1995) approximation for the second order growth factor and derivatives. As a result the non-linear accuracy has slightly improved.
1.0 (04-Mar-2015)
Initial Release
License
The code is distributed under the GNU General Public License v2.0. You should get a copy of this when you download the code. This means that you can (and should :) ) modify and distribute the code in any manner you see fit. This also means, however, we provide no warranty or guarantee with the code. All we ask is that you let us know of any problems you have with the code, so we can try to come up with a fix, and that if you use the code for your research, would you please cite the code paper referenced above (Howlett et. al., 2015b)