Skip to content

Integration with Libxc

Eduardo Andres Perez Leale edited this page Jun 1, 2018 · 1 revision

Objective

The purpose of this seccion is to explain how to integrate Lio with the functionals provided by Libxc. We'll also explain how to perform the translation of Libxc functionalities so they can be used in GPU.

Libxc functional families

The functionals provided by Libxc are group by the following families,

  • LDA
  • GGA C
  • GGA X
  • GGA - kinetic
  • hybrid GGA
  • meta-GGA
  • hybrid meta-GGA

Libxc CPU vs GPU

Currently Lio can be compiled with the CPU version of Libxc (a.ka. the original version) or with the modified version who has support for GPU. For more information on how to generate the Lio version with the Libxc libraries see the Lio installation manual.

Available functionals - GPU

The next list contains the functional that were translated to GPU,

GGA C

  • XC_GGA_C_PBE - Perdew, Burke & Ernzerhof correlation
  • XC_GGA_C_PBE_SOL - Perdew, Burke & Ernzerhof correlation SOL
  • XC_GGA_C_XPBE - xPBE reparametrization by Xu & Goddard
  • XC_GGA_C_PBE_JRGX - JRGX reparametrization by Pedroza, Silva & Capelle
  • XC_GGA_C_RGE2 - Regularized PBE
  • XC_GGA_C_APBE - mu fixed from the semiclassical neutral atom
  • XC_GGA_C_SPBE - PBE correlation to be used with the SSB exchange
  • XC_GGA_C_PBEINT - PBE for hybrid interfaces
  • XC_GGA_C_PBEFE - PBE for formation energies
  • XC_GGA_C_PBE_MOL - Del Campo, Gazquez, Trickey and Vela (PBE-like)
  • XC_GGA_C_TM_PBE - Thakkar and McCarthy reparametrization

GGA X

  • XC_GGA_X_PBE - Perdew, Burke & Ernzerhof exchange
  • XC_GGA_X_PBE_R - Perdew, Burke & Ernzerhof exchange (revised)
  • XC_GGA_X_PBE_SOL - Perdew, Burke & Ernzerhof exchange (solids)
  • XC_GGA_X_XPBE - xPBE reparametrization by Xu & Goddard
  • XC_GGA_X_PBE_JSJR - JSJR reparametrization by Pedroza, Silva & Capelle
  • XC_GGA_X_PBEK1_VDW - PBE reparametrization for vdW
  • XC_GGA_X_APBE - mu fixed from the semiclassical neutral atom
  • XC_GGA_X_PBE_TCA - PBE revised by Tognetti et al
  • XC_GGA_X_PBE_MOL - Del Campo, Gazquez, Trickey and Vela (PBE-like)
  • XC_GGA_X_LAMBDA_LO_N - lambda_LO(N) version of PBE
  • XC_GGA_X_LAMBDA_CH_N - lambda_CH(N) version of PBE
  • XC_GGA_X_LAMBDA_OC2_N - lambda_OC2(N) version of PBE
  • XC_GGA_X_BCGP - Burke, Cancio, Gould, and Pittalis
  • XC_GGA_X_PBEFE - PBE for formation energies
  • XC_GGA_K_APBE - mu fixed from the semiclassical neutral atom
  • XC_GGA_K_TW1 - Tran and Wesolowski set 1 (Table II)
  • XC_GGA_K_TW2 - Tran and Wesolowski set 2 (Table II)
  • XC_GGA_K_TW3 - Tran and Wesolowski set 3 (Table II)
  • XC_GGA_K_TW4 - Tran and Wesolowski set 4 (Table II)
  • XC_GGA_K_REVAPBE - revised APBE

LDA

  • XC_LDA_C_1D_CSC - Casula, Sorella, and Senatore 1D correlation
  • XC_LDA_C_2D_PRM - Pittalis, Rasanen & Marques correlation in 2D

MGGA C

  • XC_MGGA_C_BC95 - Becke correlation 95

MGGA X

  • XC_MGGA_X_TPSS - Tao, Perdew, Staroverov & Scuseria exchange
  • XC_MGGA_X_MODTPSS - Modified Tao, Perdew, Staroverov & Scuseria exchange
  • XC_MGGA_X_REVTPSS - revised Tao, Perdew, Staroverov & Scuseria exchange
  • XC_MGGA_X_BLOC - functional with balanced localization

If you want to use a functional that is not on the list to carry out simulations, we suggest you to use the CPU version of of it. Then, if applicable, use the translation guides (found in this document) to modify the functional so it can work in GPU. The complete functional list of the CPU version of Libxc can be found [here}(http://www.tddft.org/programs/libxc/functionals/).

How to translate a new funtional?

When we speak of translating a functional we refer to taking the original source code of (written in C language) and add some modifications so that the result is code that be executed in GPU (CUDA). As a result of this translation, another C code will be generated but it can be compiled with the NVIDIA compiler (nvcc). If you want to make a port of a new functional to GPU version we suggest you that read the documents detailed below:

Each one of this documents explains how to translate the Libxc functionals from CPU to GPU for each of the families.