Skip to content

This is the main libxc GPU repository to be used by LIO

License

Notifications You must be signed in to change notification settings

MALBECC/libxc-gpu

Repository files navigation

Libxc

Libxc is a library of exchange-correlation functionals for density-functional theory. The aim is to provide a portable, well tested and reliable set of exchange and correlation functionals that can be used by a variety of programs.

For more information, please check the manual at http://www.tddft.org/programs/Libxc

INSTALLATION

Autotools

The recommended way to install the library is by using GNU Autotools.

To install the library, just use the standard procedure:

./configure --prefix=PATH/TO/LIBXC
make
make check
make install

If you're not using a stable release tarball, you'll first need to generate configure with autoreconf -i.

CMake

Support for CMake has also been recently contributed by Lori Burns.

The CMake file has the following caveats

  • tested on Linux and Mac, static and shared lib, namespaced and non-namespaced headers, but really only to the extent that it works for Psi4
  • all the fancy libtool options and Fortran interface not tested
  • test suite executed after build via ctest. But it has always totally passed or totally failed, which doesn't inspire confidence
  • The generated libxc_docs.txt is large, and the generation step sometimes balks on it, leading to xc_funcs.h not found errors. Just execute again.

Building with CMake

Use the following procedure:

cmake -H. -Bobjdir
cd objdir && make
make test
make install

The build is also responsive to

  • static/shared toggle BUILD_SHARED_LIBS
  • install location CMAKE_INSTALL_PREFIX
  • namespacing of headers NAMESPACE_INSTALL_INCLUDEDIR
  • of course, CMAKE_C_COMPILER, BUILD_TESTING, and CMAKE_C_FLAGS

See CMakeLists.txt for options details. All these build options should be passed as cmake -DOPTION.

Detecting with CMake

CMake builds install with LibxcConfig.cmake, LibxcConfigVersion.cmake, and LibxcTargets.cmake files suitable for use with CMake find_package() in CONFIG mode.

  • find_package(Libxc) - find any xc libraries and headers
  • find_package(Libxc 3.0.0 EXACT CONFIG REQUIRED COMPONENTS static) - find Libxc exactly version 3.0.0 built with static libraries or die trying

See cmake/LibxcConfig.cmake.in for details of how to detect the Config file and what CMake variables and targets are exported to your project.

Use with CMake

After find_package(Libxc ...),

  • test if package found with if(${Libxc_FOUND}) or if(TARGET Libxc::xc)
  • link to library (establishes dependency), including header and definitions configuration with target_link_libraries(mytarget Libxc::xc)
  • include header files using target_include_directories(mytarget PRIVATE $<TARGET_PROPERTY:Libxc::xc,INTERFACE_INCLUDE_DIRECTORIES>)
  • compile target applying -DUSING_Libxc definition using target_compile_definitions(mytarget PRIVATE $<TARGET_PROPERTY:Libxc::xc,INTERFACE_COMPILE_DEFINITIONS>)

FILE ORGANIZATION

The distribution is organized as follows

./cmake CMake helper files
./build pkgconfig and Fedora spec files
./m4 m4 scripts used by configure.ac, and libxc.m4 used by other projects linking to libxc
./maple the Maple source code for the functionals
./scripts various scripts for libxc development
./src source files
./testsuite regression tests

The most important contents of the src directory for users are

xc.h main header file with all external definitions
xc_funcs.h automatically generated file with the list of functionals

In addition, developers will be interested in the following

util.h header file with internal definitions
*.f90 *.F90 xc_f.c string_f.h Fortran 90 interface
*.f03 *.F03 Fortran 2003 interface
funcs_*.c automatically generated files with the functional definitions
functionals.c generic interface to simplify access to the different families
lda.c gga.c mgga.c interface to the different families of functionals
special_functions.c implementation of a series of special functions
hyb_gga_*.c definition of the different hybrid GGA functionals
hyb_mgga_*.c definition of the different hybrid meta-GGA functionals
lda_*.c definition of the different LDA functionals
gga_*.c definition of the different GGA functionals
mgga_*.c definition of the different meta-GGA functionals
work_lda.c code that simplifies the implementation of LDAs
work_gga_x.c code that simplifies the implementation of exchange GGAs
work_gga_c.c code that simplifies the implementation of some correlation GGAs
work_mgga_x.c code that simplifies the implementation of exchange meta-GGAs
work_mgga_c.c code that simplifies the implementation of some correlation meta-GGAs

Notes:

  • Most functionals use the framework contained in a work_*.c file. This simplifies tremendously the implementation of the different functionals. The work_*.c are #include'd in the functional implementations through a preprocessor directive.
  • Some files contain more than one functional, as similar functionals are usually grouped together. Therefore, the best way to find where a functional is implemented is by looking at its keyword in xc_funcs.h and using grep to find the correct file.
  • The files where the functionals are defined are named as family_type_name.c, where: family - functional family (lda, gga, hyb_gga, or mgga) type - type of functional (x, c, xc, or k) name - name of the functional or class of functionals

About

This is the main libxc GPU repository to be used by LIO

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published