Fortran compilers¶
CAMB internally uses modern (object-oriented) Fortran 2008 for most numerical calculations, and needs a recent fortran compiler to build the numerical library. The recommended compilers are
gfortran version 6.3 or higher
Intel Fortran (ifort), version 18.0.1 or higher (some things may work with version 14+)
The gfortran compiler is part of the standard “gcc” compiler package, and may be pre-installed on recent unix systems. Check the version using “gfortran –version”.
If you do not have a suitable Fortran compiler, you can get one as follows:
- Mac:
Download the binary installation
- Windows:
Download gfortran as part of MinGW-w64 (select x86_64 option in the installation program)
- Linux:
To install from the standard repository use:
“sudo apt-get update; sudo apt-get install gfortran”
On Ubuntu systems where the default gfortran is too old, you can use this to install a later version
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt install gfortran-8
To make this the default gfortran then use
mkdir -p gfortran-symlinks
ln -s /usr/bin/gfortran-8 gfortran-symlinks/gfortran
export PATH=$PWD/gfortran-symlinks:$PATH
To re-use next time, add gfortran-symlinks directory to your startup settings (.bashrc).
Alternatively you can compile and run in a container or virtual machine: e.g., see CosmoBox. For example, to run a configured shell in docker where you can install and run camb from the command line (after changing to the camb directory):
docker run -v /local/git/path/CAMB:/camb -i -t cmbant/cosmobox
Updating and modified Fortran code¶
In the main CAMB source root directory, to re-build the Fortran binary including any pulled or local changes use:
python setup.py make
This will also work on Windows as long as you have MinGW-w64 installed as described above.
Note that you will need to close all python instances using camb before you can re-load with an updated library. This includes in Jupyter notebooks; just re-start the kernel or use:
import IPython
IPython.Application.instance().kernel.do_shutdown(True)
If you want to automamatically rebuild the library from Jupyter you can do something like this:
import subprocess
import sys
import os
src_dir = '/path/to/git/CAMB'
try:
subprocess.check_output(r'python "%s" make'%os.path.join(src_dir, 'setup.py'),
stderr=subprocess.STDOUT)
sys.path.insert(0,src_dir)
import camb
print('Using CAMB %s installed at %s'%(camb.__version__,
os.path.dirname(camb.__file__)))
except subprocess.CalledProcessError as E:
print(E.output.decode())