Advice
Working on an HPC
While HPCs won’t let you install packages globally, you can still use aurel. You just need to create a virtual environment and install aurel there.
Create a virtual environment
You need to install FFTW, typically on an HPC this is one of the modules available, so find its name (replace fftw_name below), load it and check its paths
module avail
module load fftw_name
module show fftw_name
Now create a virtual environment and activate it.
python -m venv ~/myenv
source ~/myenv/bin/activate
Then you should be able to do:
pip install aurel
and install any other packages you may use.
Jupyter notebook
If you want to use aurel in a jupyter notebook, add your virtual environment as a Jupyter kernel
pip install ipykernel
python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
To have FFTW loaded in your notebook make sure to load the module before starting up your notebook.
To do this automatically, in the paths listed previously
(with module show fftw_name) you should see:
prepend_path(“LD_LIBRARY_PATH”,”/path/to/fftw/lib”),
this needs to be added to the kernel configuration file. So,
vim ~/.local/share/jupyter/kernels/myenv/kernel.json
and edit this to
include the path to the FFTW library in the env section,
so it looks like this (change the path below):
{
"argv": [lots of things here, keep them as they are],
"env": {
"LD_LIBRARY_PATH": "/path/to/fftw/lib:$LD_LIBRARY_PATH"
},
"display_name": "Python (myenv)",
"language": "python",
"metadata": {
"debugger": true
}
In vim, press i to enter insert mode, modify/include the env section, then press Esc to exit insert mode, and type :wq to save and quit.
Now you can load your jupyter notebook, select the kernel you just created Python (myenv) and type in your notebook:
import aurel
Python script
If you want to use aurel in a python script, before running it, activate the environment
module load fftw_name
source ~/myenv/bin/activate
python myscript.py
then in your python script you can have
import aurel
Parallelisation
Aurel uses JAX for vectorisation, JIT compilation and parallelisation. See the JAX documentation for more information on how to use it.
To accelerate things, make sure anything you pass to aurel is a JAX array.
In a jupyter notebook
import jax
jax.config.update('jax_num_cpu_devices', N)
# Replace N with the number of threads you want to use
print(jax.devices()) # check the number of devices visible to jax
import aurel
All jax configuration options need to be set before importing aurel.
In a python script
You can put the above in your python script, or before calling the script, put in the terminal or your executable:
export XLA_FLAGS="--xla_cpu_multi_thread_eigen=true intra_op_parallelism_threads=N"
Replace N with the number of threads you want to use.
Convergence
See Schwarzschild_check notebook
Choose the order of the finite difference scheme you want to use, this is done by setting the fd_order parameter in the FiniteDifference class. Options are: 4 (default), 6, 8.
fd = aurel.FiniteDifference(param, fd_order=6)
Increase the grid resolution in your simulation, or reduce the grid spacing for generated data.
Increase float precision, default for jax is float32, you can increase this by configuring jax before importing aurel:
import jax
jax.config.update("jax_enable_x64", True)
import aurel
Citation
If you use aurel in your work, please cite it as:
@misc{aurel2025,
title = {Aurel: A Python package for automatic relativistic calculations},
author = {Munoz, Robyn L.},
publisher = {GitHub},
year = {2025},
url = {https://github.com/robynlm/aurel}}
This code is not published yet, so to add to citation count please also include:
@article{R.L.Munoz_M.Bruni_2023,
title = {EBWeyl: a Code to Invariantly Characterize Numerical Spacetimes},
author = {Munoz, Robyn L. and Bruni, Marco},
journal = {Classical and Quantum Gravity},
volume = {40},
number = {13},
pages = {135010},
year = {2023},
month = {jun},
doi = {10.1088/1361-6382/acd6cf},
archivePrefix = {arXiv},
eprint = {gr-qc/2211.08133}}
If you use aurel to calculate \(\Psi_{4}^{l,m}\) then you ought to also cite the spinsfast package:
@software{M.Boyle_Okarin_2024,
title = {moble/spinsfast: Release v2022.4.10},
author = {Boyle, Mike and Okarin},
publisher = {Zenodo},
month = {dec},
year = {2024},
version = {v2022.4.10},
doi = {10.5281/zenodo.14522969}}
@article{K.M.Huffenberger_B.D.Wandel_2010,
title = {FAST AND EXACT SPIN-s SPHERICAL HARMONIC TRANSFORMS},
author = {Huffenberger, Kevin M. and Wandelt, Benjamin D.},
journal = {The Astrophysical Journal Supplement Series},
publisher = {The American Astronomical Society},
volume = {189},
number = {2},
pages = {255},
month = {jul},
year = {2010},
doi = {10.1088/0067-0049/189/2/255},
archivePrefix = {astro-ph},
eprint = {gr-qc/1007.3514}}