In the simplest models (and thus best-studied) models, gravity is the only interaction that plays a role in the overall astrophysical predictions of the dark matter. However, many models that have interesting connections to particle physics have more complicated dynamics – inclyding Ultralight Dark Matter, or ULDM for short. (Also called axion dark matter or fuzzy dark matter).

The ULDM particle is incredible light – many trillions of times less massive than the electron – and in this scenario galaxies around found inside gravitationally bound quantum condensates which consist of truly massive numbers of these particles. Thanks to the quantum properties of the particles ULDM has an effective pressure that kicks in over short distances, which can give these models a distinctive set of observational signatures, as summarised in Hui, Ostriker, Tremaine and Witten, Phys.Rev. D95 (2017) 043541. ULDM dynamics are described by the Schrödinger-Poisson equation; the Schrödinger equation captures the dynamics of the particles which exist in a gravitational potential described by the Poisson equation.

PyUltraLight solves the Schrödinger-Poisson in a non-expanding background and can describe the evolution of several interacting ultralight dark matter halos or one or more halos orbiting a central, fixed Newtonian potential, the latter scenario corresponding to dwarf galaxies orbiting a massive central galaxy. PyUltraLight is implemented in a Python-based Jupyter notebook which makes it simple to specify simulation parameters.

Performance-critical routines are managed via calls to computationally efficient compiled libraries with support for shared memory mutlithreading. PyUltraLight runs on standard desktop hardware and run at spatial resolutions of up to 5123 on a a machine with 32GB of RAM.

ULDM dark matter halo being disrupted while orbiting in a central potential.