MPI C++ compiler   C++11 and MPI-3 support
GNU Libtool  
GNU Autoconf Version 2.69 or newer
GNU Automake  
Boost C++ Libraries Version 1.53.0 or newer
BLAS Use optimized BLAS
LAPACK Use optimized LAPACK
ScaLAPACK Use optimized ScaLPACK

Intel MKL is strongly recommended for BLAS, LAPACK, and ScaLAPACK (distributed for free for academic users)

Downloading the source

The simplest approach is to just download and extract the tarball containing the most recent BAGEL release:

$ wget
$ tar xvf bagel-1.0.0.tar.gz
$ cd bagel

Alternatively, you can clone the git repository:

$ git clone
$ cd bagel

The SMITH3 code generator can be downloaded in a similar manner from the NUBakery GitHub page.


  • Automake

    $ glibtoolize (or, libtoolize)
    $ aclocal
    $ autoconf
    $ autoheader
    $ automake -a
  • Create an object directory

    $ mkdir obj
    $ cd obj
  • Configure

    A minimal set of configure options is

    $ ../configure '--enable-mkl' 'LDFLAGS=-L$BOOST_ROOT/lib' '--with-include=-I$BOOST_ROOT/include'
    Configure options:
    --with-mpi=value turns on MPI, where “value” can be “mvapich”, “intel”, or “openmpi”. However, Open MPI is not recommended.
    --enable-mkl turns on MKL extensions, such as efficient matrix transposition. MKL libraries are automatically detected.
    --disable-scalapack will disable the use of ScaLapack (parallel Lapack) which is not recommended.
    --disable-smith will disable the code generated by SMITH which is not recommended.
    --with-include can be used to specifically include paths.
    --with-libxc turns on the interface to libxc.
    CXXFLAGS=-DNDEBUG deactivates the debugging mode. It is absolutely essential to specify this for release builds.
    CXXFLAGS=-DCOMPILE_J_ORB allows the inclusion of j-type atomic basis functions.

    Example (Release build on the Shiozaki group’s cluster)

    $ export LD_LIBRARY_PATH=/usr/local/boost/boost_1_62_0_gcc-6.2.0/lib:$LD_LIBRARY_PATH
    $ ../configure 'LDFLAGS=-L/usr/local/boost/boost_1_62_0_gcc-6.2.0/lib' 'CXXFLAGS=-DNDEBUG -O3 -mavx'
      '--enable-mkl' '--with-include= -I/usr/local/boost/boost_1_62_0_gcc-6.2.0/include'
      '--with-mpi=intel' 'CC=/usr/local/gcc/gcc-6.2.0/bin/gcc' 'CXX=/usr/local/gcc/gcc-6.2.0/bin/g++'
  • Compile

    $ make -j4
    $ make install
  • Test run

    $ BAGEL path_to_bagel/test/benzene_svp_mp2.json

    Also there is a suite of test programs. To run this, in obj

    $ cd bagel/obj
    $ make check
    $ cd src
    $ ./TestSuite --log_level=all

    One of the tests (ASD-DMRG) is meant to fail.

  • Additional Notes

    • Configuring without MKL

      If MKL is not available, the path to cblas headers may need to be included as a configure option (e.g., ‘–with-include=-I/usr/path/to/cblas’). Furthermore, if relativistic calculations fail without MKL, users may consider reconfiguring and recompiling with -DZDOT_RETURN in CXXFLAGS.
    • Compiling on small machines

      Some files in BAGEL require several GB of RAM to compile. This is generally not a problem for clusters, but on personal computers the compilation will occasionally fail. Compiling with one thread (make -j1) and not using -DCOMPILE_J_ORB may help.