A differentiable cosmological code in Julia.
- Modularity: each main function within
LimberJack.jlhas its own module. New functions can be added by including extra modules.LimberJack.jlhas the following modules:
| Module | function |
|---|---|
boltzmann.jl |
Performs the computation of primordial power spectrum |
core.jl |
Defines the structures where the theoretical predictions are stored and computes the background quantities |
data_utils.jl |
Manages sacc files for large data vectors |
growth.jl |
Computes the growth factor |
halofit.jl |
Computes the non-linear matter power spectrum as given by the Halofit fitting formula |
spectra.jl |
Computes the power spectra of any two tracers |
theory.jl |
Computes large data vectors that combine many spectra |
tracers.jl |
Computes the kernels associated with each type of kernel |
- Object-oriented:
LimberJack.jlmimicsCCL.pyclass structure by usingJulia'sstructures. - Transparency:
LimberJack.jlis fully written inJuliawithout needing to inerface to any other programming language (C,Python...) to compute thoretical predictions. This allows the user full access to the code from input to output.
- Gradients: one order of magnitude faster gradients than finite differences.
- Precision: sub-percentage error with respect to
CCL. - Speed:
C-like performance.
In order to run LimberJack.jl you will need Julia-1.7.0 or newer installed in your system.
Older versions of Julia might be compatible but haven't been tested.
You can find instructions on how to install Julia here: https://julialang.org/downloads/.
Once you have installed Julia you can install LimberJack.jl following these steps:
using Pkg
Pkg.add("LimberJack") using Pkg
Pkg.add("CondaPkg")
CondaPkg.add("sacc") # Import
using LimberJack
# create LimberJack.jl Cosmology instance
cosmology = Cosmology(Ωm=0.30, Ωb=0.05, h=0.70, ns=0.96, s8=0.81;
tk_mode="EisHu",
Pk_mode="Halofit")
z = Vector(range(0., stop=2., length=256))
nz = @. exp(-0.5*((z-0.5)/0.05)^2)
tracer = NumberCountsTracer(cosmology, zs, nz; b=1.0)
ls = [10.0, 30.0, 100.0, 300.0]
cls = angularCℓs(cosmology, tracer, tracer, ls)-
Parallelization: the current threading parallelization of
LimberJack.jlis far away from the optimal one over number of threads scaling. Future works could study alternative parallalization schemes or possible inneficiencies in the code. -
GPU's:
LimberJack.jlcurrently cannot run on GPU's which are known to significantly speed-up cosmological inference. Future works could study implementingJuliaGPU libraries such asCUDA.jl. -
Backwards-AD: currently
LimberJack.jl's preferred AD mode is forward-AD. However, the key computation of cosmological inference, obtaining the$\chi^2$ , is a map from N parameters to a scalar. For a large number of parameters, backwards-AD is in theory the preferred AD mode and should significantly speed up the computation of the gradient. Future works could look into makingLimberJack.jlcompatible with the latestJuliaAD libraries such asZygote.jlto implement efficient backwards-AD.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| Jaime Ruiz-Zapatero | Andrina Nicola | Carlos Garcia-garcia | David Alonso | Arrykrishna Mootoovaloo | Jamie Sullivan | Marco Bonici |
| Lead | Halofit | Validation | Tracers | EmuPk | Bolt.jl | Benchmarks |
@ARTICLE{2023arXiv231008306R,
author = {{Ruiz-Zapatero}, J. and {Alonso}, D. and {Garc{\'\i}a-Garc{\'\i}a}, C. and {Nicola}, A. and {Mootoovaloo}, A. and {Sullivan}, J.~M. and {Bonici}, M. and {Ferreira}, P.~G.},
title = "{LimberJack.jl: auto-differentiable methods for angular power spectra analyses}",
journal = {arXiv e-prints},
keywords = {Astrophysics - Cosmology and Nongalactic Astrophysics, Astrophysics - Instrumentation and Methods for Astrophysics},
year = 2023,
month = oct,
eid = {arXiv:2310.08306},
pages = {arXiv:2310.08306},
doi = {10.48550/arXiv.2310.08306},
archivePrefix = {arXiv},
eprint = {2310.08306},
primaryClass = {astro-ph.CO},
adsurl = {https://ui.adsabs.harvard.edu/abs/2023arXiv231008306R},
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}









