Advanced Installation Options

This guide helps you install ABACUS with advanced features. Please make sure to read the easy-installation guide before.

Build with Libxc

ABACUS use exchange-correlation functionals by default. However, for some functionals (such as HSE hybrid functional), Libxc is required.

Dependency: Libxc >= 5.1.7 .

Note: Building Libxc from source with Makefile does NOT support using it in CMake here. Please compile Libxc with CMake instead.

If Libxc is not installed in standard path (i.e. installed with a custom prefix path), you can set Libxc_DIR to the corresponding directory.

cmake -B build -DLibxc_DIR=~/libxc

Build with DeePKS

If DeePKS feature is requied for DeePKS-kit, the following prerequisites and steps are needed:

  • C++ compiler, supporting C++14 (GCC >= 5 is sufficient)

  • CMake >= 3.18

  • LibTorch with cxx11 ABI supporting CPU

  • Libnpy

cmake -B build -DENABLE_DEEPKS=1 -DTorch_DIR=~/libtorch/share/cmake/Torch/ -Dlibnpy_INCLUDE_DIR=~/libnpy/include

CMake will try to download Libnpy if it cannot be found locally.

Build with DeePMD-kit

Note: This part is only required if you want to load a trained DeeP Potential and run molecular dynamics with that. To train the DeeP Potential with DP-GEN, no extra prerequisite is needed and please refer to this page for ABACUS interface with DP-GEN.

If the Deep Potential model is employed in Molecule Dynamics calculations, the following prerequisites and steps are needed:

cmake -B build -DDeePMD_DIR=~/deepmd-kit -DTensorFlow_DIR=~/tensorflow

Build Unit Tests

To build tests for ABACUS, define BUILD_TESTING flag. You can also specify path to local installation of Googletest by setting GTEST_DIR flags. If not found in local, the configuration process will try to download it automatically.

cmake -B build -DBUILD_TESTING=1

After building and installing, unit tests can be performed with ctest.

To run a subset of unit test, use ctest -R <test-match-pattern> to perform tests with name matched by given pattern.

Build with CUDA support

Extra prerequisites

To build NVIDIA GPU support for ABACUS, define USE_CUDA flag. You can also specify path to local installation of CUDA Toolkit by setting CUDA_TOOLKIT_ROOT_DIR flags.

cmake -B build -DUSE_CUDA=1

Build ABACUS with make

Note: We suggest using CMake to configure and compile.

To compile the ABACUS program using legacy make, users need to specify the location of the compilers, headers and libraries in source/Makefile.vars:

# This is the Makefile of ABACUS API
#======================================================================
# Users set
#======================================================================
CC = mpiicpc
# mpiicpc:   compile intel parallel version
# icpc:      compile intel sequential version
# make: ELPA_DIR, ELPA_INCLUDE_DIR, CEREAL_DIR must also be set.
# make pw: nothing need to be set except LIBXC_DIR
#
# mpicxx:    compile gnu parallel version
# g++:       compile gnu sequential version
# make: FFTW_DIR, OPENBLAS_LIB_DIR, SCALAPACK_LIB_DIR, ELPA_DIR, ELPA_INCLUDE_DIR, CEREAL_DIR must also be set.
# make pw: FFTW_DIR, OPENBLAS_LIB_DIR must be set.

# GPU = OFF  #We do not support GPU yet
# OFF:  do not use GPU
# CUDA: use CUDA
#======================================================================

#-------  FOR INTEL COMPILER  ------------
ELPA_DIR      = /public/soft/elpa_21.05.002
ELPA_INCLUDE_DIR = ${ELPA_DIR}/include/elpa-2021.05.002
# directory of elpa, which contains include and lib/libelpa.a

CEREAL_DIR    = /public/soft/cereal
# directory of cereal, which contains a include directory in it.

#-------  FOR GNU COMPILER  ---------------
# FFTW_DIR = /public/soft/fftw_3.3.8
# # directory of fftw package, which contains lib/libfftw3.a. Only used when CC = mpicxx/g++

# OPENBLAS_LIB_DIR   = /public/soft/openblas/lib
# # directory of libopenblas.a, only used when CC = mpicxx/g++

# SCALAPACK_LIB_DIR  = /public/soft/openblas/lib
# # directory of libscalapack.a, only used when CC = mpicxx/g++

# ELPA_DIR      = /public/soft/elpa_21.05.002
# ELPA_INCLUDE_DIR = ${ELPA_DIR}/include/elpa-2021.05.002
# # directory of elpa, which contains include and lib/libelpa.a

# CEREAL_DIR    = /public/soft/cereal
# # directory of cereal, which contains a include directory in it.

#------  OPTIONAL LIBS  -----------

# LIBTORCH_DIR  = /usr/local
# LIBNPY_DIR    = /usr/local
# add them to use DEEPKS

# LIBXC_DIR     = /public/soft/libxc
# directory of libxc(>5.1.7), which contains include and lib/libxc.a
# add LIBXC_DIR to use libxc to compile ABACUS

# DeePMD_DIR = ${deepmd_root}
# TensorFlow_DIR = ${tensorflow_root}
# add them to use DEEPMD

# NP = 14 # It is not supported. use make -j14 or make -j to parallelly compile

# DEBUG = OFF
# Only for developers
# ON:   use gnu compiler and check segmental defaults
# OFF:  nothing
#======================================================================

For example, below is a case where the Intel C++ compiler, Intel MPI and CEREAL are used, along with Intel MKL library. The file Makefile.vars can be set as follows:

CC = mpiicpc #(or CC = icpc)
ELPA_DIR      = /public/soft/elpa_21.05.002
ELPA_INCLUDE_DIR = ${ELPA_DIR}/include/elpa-2021.05.002
CEREAL_DIR    = /public/soft/cereal

When CC=mpiicpc, a parallel version will be compiled. When CC=icpc, a sequential version will be compiled.

Another example is where the Gnu C++ compiler, MPICH, OPENBLAS, ScaLAPACK, ELPA and CEREAL are used:

CC = mpicxx/g++
FFTW_DIR = /public/soft/fftw_3.3.8
OPENBLAS_LIB_DIR   = /public/soft/openblas/lib
SCALAPACK_LIB_DIR  = /public/soft/openblas/lib
ELPA_DIR      = /public/soft/elpa_21.05.002
ELPA_INCLUDE_DIR = ${ELPA_DIR}/include/elpa-2021.05.002
CEREAL_DIR    = /public/soft/cereal

When CC=mpicxx, a parallel version will be compiled. When CC=g++, a sequential version will be compiled.

Except modifying Makefile.vars, you can also directly use

make CC=mpiicpc ELPA_DIR=/public/soft/elpa_21.05.002 \
ELPA_INCLUDE_DIR=${ELPA_DIR}/include/elpa-2021.05.002 \
CEREAL_DIR=/public/soft/cereal

ABACUS now support full version and pw version. Use make or make abacus to compile full version which supports LCAO calculations. Use make pw to compile pw version which only supports pw calculations. For pw version, make pw CC=mpiicpc, you do not need to provide any libs. For make pw CC=mpicxx, you need provide FFTW_DIR and OPENBLAS_LIB_DIR.

Besides, libxc and deepks are optional libs to compile abacus. They will be used when LIBXC_DIR is defined like

LIBXC_DIR = /public/soft/libxc

or LIBTORCH_DIR and LIBNPY_DIR like

LIBTORCH_DIR  = /usr/local
LIBNPY_DIR    = /usr/local

After modifying the Makefile.vars file, execute make or make -j12 to build the program.

After the compilation finishes without error messages (except perhaps for some warnings), an executable program ABACUS.mpi will be created in directory bin/.

Add Libxc Support

The program compiled using the above instructions do not link with LIBXC and use exchange-correlation functionals as written in the ABACUS program. However, for some functionals (such as HSE hybrid functional), LIBXC is required.

To compile ABACUS with LIBXC, you need to define LIBXC_DIR in the file Makefile.vars or use

make LIBXC_DIR=/pulic/soft/libxc

directly.

Add DeePKS Support

To compile ABACUS with DEEPKS, you need to define LIBTORCH_DIR and LIBNPY_DIR in the file Makefile.vars or use

make LIBTORCH_DIR=/opt/libtorch/ LIBNPY_DIR=/opt/libnpy/

directly.

Add DeePMD-kit Support

Note: This part is only required if you want to load a trained DeeP Potential and run molecular dynamics with that. To train the DeeP Potential with DP-GEN, no extra prerequisite is needed and please refer to this page for ABACUS interface with DP-GEN.

To compile ABACUS with DeePMD-kit, you need to define DeePMD_DIR and TensorFlow_DIR in the file Makefile.vars or use

make DeePMD_DIR=~/deepmd-kit TensorFlow_DIR=~/tensorflow

directly.