TODO tasks. Please put higher priority items higher up, within a section. Scientific accuracy =================== * general - Do T^3 r_+ distances throughout, to avoid wasting computational area at the faces of the fundamental domain: are there any missing? * init-conditions - The mass for a single dark matter particle in a run using Ncroot=128, Lbox=80, OmegaM=0.3, OmegaL=0.7 and Hubble0=70 is about 2e10 M_\odot. Together with the setting of rockstar_min_halo_particles=5, this gives a halo mass detection threshold of 1e11 M_\odot. It would be reasonable to improve this in the future to get towards the dwarf regime. Simulations with higher particle resolution should show the effects for lower mass host haloes. * run-simulation * detect-haloes * create-mergertree * create-galaxies Contribute back to the community ================================ * Consider uploading some of the hacks as git branches + pull requests to the upstream packages, and/or to individual repositories (io_gadget/merge_gadget.c, io_gadget/read_gadget.[ch]). * detect-haloes - Email reminder to Peter Behroozi + Manodeep to suggest that they handle the rockstar and consistent-trees Issues from 2019 and early 2020. - Report gcc-10.1.0 -fno-common default upstream to rockstar, with -fcommon as temporary hack (as of 2020-08-08, this is still waiting to be confirmed if this is the way to fix this bug/feature of gcc-10.1.0). - Propose our patch 20200918_rockstar_pid_file.patch for writing out pid's to a file, for ease of killing of orphan processes, upstream to rockstar. - Discuss (same or separate issue) the risks of having orphan rockstar main processes running in parallel with a minimal working example as evidence that independent sessions in independent directories, by the same user on the same machine, could have the second server (the one started with -c auto-rockstar.cfg) communicate with the wrong first server (the one started with -c server.cfg). * create-galaxies * paper.mk - Contribute the rule 'clean-paper' upstream to Maneage. This avoids having to redo the full calculations when you only want to regenerate LaTeX macros from calculation/analysis/plotting output files. Software maintainability/security/convenience ============================================= * General ** There are many np.where calls in the python scripts that are not protected right and may fail in some cases; the general form (np.array(np.where()))[0] should work in all cases where we want a 1D numpy array. Any fixes for this should be properly tested, of course. ** Most of the more modular python scripts have unit tests; these should be run automatically and checked. ** Most of the long make rules can be made much easier to read and debug thanks to .ONESHELL: and .SHELLFLAGS = -ec; see https://codeberg.org/boud/elaphrocentre/issues/2 * init-conditions - If/when Simon Prunet updates mpgrafic to fftw3, then update the version used here. * run-simulation - Update to a more modern version of RAMSES. Unless ramses-scalav/inhomog are going to used sooner or later, these can be decoupled from RAMSES itself, reducing the number of dependencies. * create-mergertree * detect-voids - Update to Revolver commit cbaf2d5 from 2019-08-16 for python3. - The Revolver main script revolver.py appears to have a missing 'main' part; the main python_tools/*.py scripts appear to be missing these too. See e.g. https://stackoverflow.com/questions/4041238/why-use-def-main - The sharable library io_gadget.so should not have to be copied into the working directory. * analyse-plot - The % notation for writing to a string is no longer recommended in python - this should be updated in reproduce/analysis/python/*.py . - Does recompiling revolver force healpy and healpix to be recompiled? If yes, then this should be unnecessary - remove this wrong dependence. - Some multiprocess parallelisation of the python analysis/plotting routines would make sense - it's ironic to run an N-body simulation on M threads reasonably fast and then do the final analysis very slowly on just one. - Do more checks for the validity of input files, since old undeleted files can give infinite loops in the section "for sage_infall_file in glob.iglob(sage_outs + '**/infall*.list', recursive=True):"