How to Compile exciting

0. Download exciting

1. Requirements

2. Optional requirements

  • Optimized multithreaded Blas Lapack (GOTOBlas )
  • MPI libraries and runtime (OpenMPI )

3. Compile

After downloading and unpacking the source, change into the root directory of the distribution and type


If you do it the first time it will start a program to create a configuration for the compiler. The script will allow you to select a platform that matches yours. Furthermore, it will ask whether you have MPI and multithreaded numerical libraries on your system. If you know what MPI library you have installed and how it works you can say yes to MPI. If you have multithreaded BLAS/LAPACK like esslsmp from IBM, or Intel's multi threaded MKL, you can say yes to SMP.

The script creates the build/ file which you may have to edit if it doesn't work. If the included files do not work check out marked if there is something more appropriate. And if you managed to install exciting on a new platform please post the file in the forum.

After everything is configured the build system creates binaries for the serial (excitingser), the MPI (excitingmpi), and the SMP (excitingsmp) run, and the hybrid SMP+MPI case (excitingmpismp). They can be found in the bin directory. Additionally, the species and spacegroup tools are compiled and copied to bin as well.

4. Optimize

For any production system it is important to use optimized numerical libraries. exciting depends heavily on LAPACK/BLAS. The corresponding configurations are done in the exciting/build/ file. The relevant constants are LIB_LPK and SMP_LIBS. These must be set to the necessary options for the linker to link tho the system LAPACK/BLAS libraries. SMP_LIBS is needed when multithreaded libraries are available and excitingsmb should be build.

LIB_LPK  = -lmkl_lapack95_lp64 -lmkl_blas95_lp64\
           -lmkl_intel_lp64 -lmkl_intel_thread\
           -lmkl_lapack -lmkl_core -liomp5 -lpthread -lm
SMP_LIBS = -mkl=parallel   $(LIB_ARP) $(LIB_LPK) $(LIB_FFT) $(LIB_BZINT)

5. GotoBLAS

A performant and easy to use LAPACK/BLAS implementation is GotoBLAS. It is easy to compile and easy to link. It has very good multithreaded performance, especially when used with the arpack solver.

Get the library from and compile like recommended in the accompaning documentation. You may want to specify the compilers you are going to use to compile exciting

make BINARY=64 CC=icc FC=ifort

In order to link it

LIB_LPK    = -L/Path/To/GotoBLAS2 -lgoto2 -lpthread 
LIB_LPKSMP = -L/Path/To/GotoBLAS2 -lgoto2 -lpthread

GotoBLAS contains LAPACK interfaces as well, and it is multi-threaded. The number of threads is controlled by the usual environment variables.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License