From c6fc4eb94e37f25360a759d2e67279221b7f45d5 Mon Sep 17 00:00:00 2001 From: SY Wang Date: Wed, 25 Mar 2026 16:40:09 +0800 Subject: [PATCH] Add v4.0.x API of DFT-D4 (#4964) --- CMakeLists.txt | 15 +++ src/CMakeLists.txt | 1 + src/cp2k_info.F | 3 + src/input_cp2k_xc.F | 17 +++- src/qs_dispersion_d4.F | 94 ++++++++++++++++++- src/qs_dispersion_utils.F | 6 +- .../toolchain/scripts/stage8/install_dftd4.sh | 47 +++++----- .../scripts/stage8/install_tblite.sh | 43 ++++----- 8 files changed, 170 insertions(+), 56 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d1f2ee66f..c257c2e237 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -784,6 +784,13 @@ endif() if(CP2K_USE_DFTD4) find_package(dftd4 REQUIRED) + # Detect dftd4_VERSION from dftd4-config-version.cmake + if(dftd4_VERSION VERSION_LESS "4.0.0") + message(STATUS "DFTD4: found version ${dftd4_VERSION}, using v3.x API") + set(CP2K_USE_DFTD4_V3 ON) + else() + set(CP2K_USE_DFTD4_V3 OFF) + endif() endif() if(CP2K_USE_DEEPMD) @@ -809,12 +816,20 @@ endif() if(CP2K_USE_TBLITE) find_package(mctc-lib REQUIRED) find_package(toml-f REQUIRED) + find_package(dftd4 REQUIRED) find_package(s-dftd3 REQUIRED) find_package(tblite REQUIRED) add_library(cp2k::tblite INTERFACE IMPORTED) target_link_libraries( cp2k::tblite INTERFACE tblite::tblite mctc-lib::mctc-lib dftd4::dftd4 toml-f::toml-f s-dftd3::s-dftd3) + # Detect dftd4_VERSION from dftd4-config-version.cmake + if(dftd4_VERSION VERSION_LESS "4.0.0") + message(STATUS "DFTD4: found version ${dftd4_VERSION}, using v3.x API") + set(CP2K_USE_DFTD4_V3 ON) + else() + set(CP2K_USE_DFTD4_V3 OFF) + endif() endif() # SIRIUS diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 95a2072129..6e2252d2cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1789,6 +1789,7 @@ target_compile_definitions( $<$:__TBLITE> $<$:__DFTD4> $<$:__DFTD4> + $<$:__DFTD4_V3> $<$:__DEEPMD> $<$:__PEXSI> $<$:__ACE> diff --git a/src/cp2k_info.F b/src/cp2k_info.F index 7dc813cc1f..744119e878 100644 --- a/src/cp2k_info.F +++ b/src/cp2k_info.F @@ -193,6 +193,9 @@ CONTAINS #if defined(__DFTD4) flags = TRIM(flags)//" libdftd4" #endif +#if defined(__DFTD4_V3) + flags = TRIM(flags)//" dftd4_v3" +#endif #if defined(__TBLITE) flags = TRIM(flags)//" mctc-lib" flags = TRIM(flags)//" tblite" diff --git a/src/input_cp2k_xc.F b/src/input_cp2k_xc.F index db2dacd20a..9e959a26b2 100644 --- a/src/input_cp2k_xc.F +++ b/src/input_cp2k_xc.F @@ -939,9 +939,12 @@ CONTAINS usage="POTENTIAL_TYPE (NONE|PAIR_POTENTIAL|NON_LOCAL)", & enum_c_vals=s2a("NONE", "PAIR_POTENTIAL", "NON_LOCAL"), & enum_i_vals=[xc_vdw_fun_none, xc_vdw_fun_pairpot, xc_vdw_fun_nonloc], & - enum_desc=s2a("No dispersion/van der Waals functional", & - "Pair potential van der Waals density functional", & - "Nonlocal van der Waals density functional"), & + enum_desc=s2a("No dispersion/van der Waals functional.", & + "Pair potential van der Waals density functional, "// & + "including Grimme's empirical DFT-D methods.", & + "Nonlocal van der Waals density functional; more "// & + "rigorous in principle, but significantly more "// & + "time-consuming."), & default_i_val=xc_vdw_fun_none) CALL section_add_keyword(section, keyword) CALL keyword_release(keyword) @@ -981,7 +984,7 @@ CONTAINS "Grimme D3 method (zero damping)", & "Grimme D3 method (Becke-Johnson damping)", & "Grimme D4 method"), & - default_i_val=vdw_pairpot_dftd3) + default_i_val=vdw_pairpot_dftd3bj) CALL section_add_keyword(subsection, keyword) CALL keyword_release(keyword) CALL keyword_create(keyword, __LOCATION__, name="PARAMETER_FILE_NAME", & @@ -1001,7 +1004,11 @@ CONTAINS CALL section_add_keyword(subsection, keyword) CALL keyword_release(keyword) CALL keyword_create(keyword, __LOCATION__, name="D4_REFERENCE_CODE", & - description="Calculate D4 energy using external library.", & + description="Calculate D4 energy using external library entirely. "// & + "If set to F, CP2K will use its own codes to perform part of the "// & + "DFT-D4 correction (including the calculation of EEQ charges) in "// & + "parallel, which can significally save time if you use an MPI version "// & + "of CP2K because DFT-D4 package does not support MPI parallelization.", & usage="D4_REFERENCE_CODE", default_l_val=.TRUE., & lone_keyword_l_val=.TRUE.) CALL section_add_keyword(subsection, keyword) diff --git a/src/qs_dispersion_d4.F b/src/qs_dispersion_d4.F index 1e77677a96..94ed9ca757 100644 --- a/src/qs_dispersion_d4.F +++ b/src/qs_dispersion_d4.F @@ -55,7 +55,12 @@ MODULE qs_dispersion_d4 rational_damping_param, & get_coordination_number, & get_lattice_points +#if defined(__DFTD4_V3) USE dftd4_charge, ONLY: get_charges +#else + USE multicharge, ONLY: get_charges + USE mctc_env, ONLY: error_type +#endif !&> #endif #include "./base/base_uses.f90" @@ -93,8 +98,12 @@ CONTAINS CHARACTER(LEN=*), PARAMETER :: routineN = 'calculate_dispersion_d4_pairpot' - INTEGER :: atoma, cnfun, enshift, handle, i, iatom, & - ikind, mref, natom, nghost + INTEGER :: atoma, cnfun, enshift, handle, i, iatom +#if defined(__DFTD4_V3) + INTEGER :: ikind, mref, natom, nghost +#else + INTEGER :: ikind, mref, natom, ncoup, nghost +#endif INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, atomtype, kind_of, & t_atomtype INTEGER, DIMENSION(3) :: periodic @@ -106,9 +115,14 @@ CONTAINS ta, tb, tc, td, te, ts REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: cn, cnd, dEdcn, dEdq, edcn, edq, enerd2, & enerd3, energies, energies3, q, qd - REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: ga, gradient, gwdcn, gwdq, gwvec, t_xyz, & - tvec, xyz +#if defined(__DFTD4_V3) + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: ga, gradient, gwdcn, gwdq, gwvec, & + t_xyz, tvec, xyz REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: gdeb +#else + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: ga, gradient, t_xyz, tvec, xyz + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: gdeb, gwdcn, gwdq, gwvec +#endif REAL(KIND=dp), DIMENSION(3, 3) :: sigma, stress REAL(KIND=dp), DIMENSION(3, 3, 4) :: sdeb TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set @@ -125,6 +139,10 @@ CONTAINS TYPE(structure_type) :: mol TYPE(realspace_cutoff) :: cutoff +#if !defined(__DFTD4_V3) + TYPE(error_type), ALLOCATABLE :: error +#endif + CALL timeset(routineN, handle) debug = dispersion_env%d4_debug @@ -170,7 +188,17 @@ CONTAINS !prepare for the call to the dispersion function CALL new(mol, atomtype, xyz, lattice=cell%hmat, periodic=lperiod) +#if defined(__DFTD4_V3) CALL new_d4_model(disp, mol) +#else + CALL new_d4_model(error, disp, mol) + IF (ALLOCATED(error)) THEN + CPABORT(error%message) + END IF + + ! Number of coupling + ncoup = disp%ncoup +#endif IF (dispersion_env%ref_functional == "none") THEN CALL get_rational_damping("pbe", param, s9=0.0_dp) @@ -295,8 +323,13 @@ CONTAINS WRITE (iw, '(A,T71,F10.6)') " DEBUG D4| Charge differences (ave)", SUM(ABS(q - qd))/natom END IF ! Weights for C6 calculation +#if defined(__DFTD4_V3) ALLOCATE (gwvec(mref, natom)) IF (grad) ALLOCATE (gwdcn(mref, natom), gwdq(mref, natom)) +#else + ALLOCATE (gwvec(mref, natom, ncoup)) + IF (grad) ALLOCATE (gwdcn(mref, natom, ncoup), gwdq(mref, natom, ncoup)) +#endif CALL disp%weight_references(mol, cn, q, gwvec, gwdcn, gwdq) ALLOCATE (energies(natom)) @@ -504,19 +537,32 @@ CONTAINS TYPE(d4_model) :: disp TYPE(structure_type) :: mol TYPE(realspace_cutoff) :: cutoff +#if !defined(__DFTD4_V3) + TYPE(error_type), ALLOCATABLE :: error +#endif LOGICAL, INTENT(IN) :: grad, doabc REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: enerd2, enerd3, cnd, qd, dEdcn, dEdq REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: gradient REAL(KIND=dp), DIMENSION(3, 3, 4) :: stress +#if defined(__DFTD4_V3) INTEGER :: mref, natom, i REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: q, qq REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: lattr, gwdcn, gwdq, gwvec, & c6, dc6dcn, dc6dq REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: cndr, cndL, qdr, qdL +#else + INTEGER :: mref, natom, i, ncoup + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: q, qq + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: lattr, c6, dc6dcn, dc6dq + REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :, :) :: cndr, cndL, qdr, qdL, gwdcn, gwdq, gwvec +#endif mref = MAXVAL(disp%ref) natom = mol%nat +#if !defined(__DFTD4_V3) + ncoup = disp%ncoup +#endif ! Coordination numbers ALLOCATE (cnd(natom)) @@ -527,10 +573,22 @@ CONTAINS ! EEQ charges ALLOCATE (qd(natom)) IF (grad) ALLOCATE (qdr(3, natom, natom), qdL(3, 3, natom)) +#if defined(__DFTD4_V3) CALL get_charges(mol, qd, qdr, qdL) +#else + CALL get_charges(disp%mchrg, mol, error, qd, qdr, qdL) + IF (ALLOCATED(error)) THEN + CPABORT(error%message) + END IF +#endif ! C6 interpolation +#if defined(__DFTD4_V3) ALLOCATE (gwvec(mref, natom)) IF (grad) ALLOCATE (gwdcn(mref, natom), gwdq(mref, natom)) +#else + ALLOCATE (gwvec(mref, natom, ncoup)) + IF (grad) ALLOCATE (gwdcn(mref, natom, ncoup), gwdq(mref, natom, ncoup)) +#endif CALL disp%weight_references(mol, cnd, qd, gwvec, gwdcn, gwdq) ALLOCATE (c6(natom, natom)) IF (grad) ALLOCATE (dc6dcn(natom, natom), dc6dq(natom, natom)) @@ -636,7 +694,11 @@ CONTAINS TYPE(qs_dispersion_type), POINTER :: dispersion_env REAL(KIND=dp), INTENT(IN) :: cutoff REAL(KIND=dp), DIMENSION(:), INTENT(IN) :: r4r2 +#if defined(__DFTD4_V3) REAL(KIND=dp), DIMENSION(:, :), INTENT(IN) :: gwvec, gwdcn, gwdq +#else + REAL(KIND=dp), DIMENSION(:, :, :), INTENT(IN) :: gwvec, gwdcn, gwdq +#endif REAL(KIND=dp), DIMENSION(:, :, :, :), INTENT(IN) :: c6ref INTEGER, DIMENSION(:), INTENT(IN) :: mrefs REAL(KIND=dp), DIMENSION(:), INTENT(INOUT) :: energies, dEdcn, dEdq @@ -740,7 +802,11 @@ CONTAINS REAL(KIND=dp), DIMENSION(:, :), INTENT(IN) :: tvec REAL(KIND=dp), INTENT(IN) :: cutoff REAL(KIND=dp), DIMENSION(:), INTENT(IN) :: r4r2 +#if defined(__DFTD4_V3) REAL(KIND=dp), DIMENSION(:, :), INTENT(IN) :: gwvec, gwdcn, gwdq +#else + REAL(KIND=dp), DIMENSION(:, :, :), INTENT(IN) :: gwvec, gwdcn, gwdq +#endif REAL(KIND=dp), DIMENSION(:, :, :, :), INTENT(IN) :: c6ref INTEGER, DIMENSION(:), INTENT(IN) :: mrefs REAL(KIND=dp), DIMENSION(:), INTENT(INOUT) :: energies, dEdcn, dEdq @@ -1008,7 +1074,11 @@ CONTAINS SUBROUTINE get_c6value(c6ij, ia, ja, ik, jk, gwvec, c6ref, mrefs) REAL(KIND=dp), INTENT(OUT) :: c6ij INTEGER, INTENT(IN) :: ia, ja, ik, jk +#if defined(__DFTD4_V3) REAL(KIND=dp), DIMENSION(:, :), INTENT(IN) :: gwvec +#else + REAL(KIND=dp), DIMENSION(:, :, :), INTENT(IN) :: gwvec +#endif REAL(KIND=dp), DIMENSION(:, :, :, :), INTENT(IN) :: c6ref INTEGER, DIMENSION(:), INTENT(IN) :: mrefs @@ -1019,7 +1089,11 @@ CONTAINS DO jref = 1, mrefs(jk) DO iref = 1, mrefs(ik) refc6 = c6ref(iref, jref, ik, jk) +#if defined(__DFTD4_V3) c6ij = c6ij + gwvec(iref, ia)*gwvec(jref, ja)*refc6 +#else + c6ij = c6ij + gwvec(iref, ia, 1)*gwvec(jref, ja, 1)*refc6 +#endif END DO END DO @@ -1045,7 +1119,11 @@ CONTAINS REAL(KIND=dp), INTENT(OUT) :: c6ij REAL(KIND=dp), DIMENSION(2), INTENT(OUT) :: dc6dcn, dc6dq INTEGER, INTENT(IN) :: ia, ja, ik, jk +#if defined(__DFTD4_V3) REAL(KIND=dp), DIMENSION(:, :), INTENT(IN) :: gwvec, gwdcn, gwdq +#else + REAL(KIND=dp), DIMENSION(:, :, :), INTENT(IN) :: gwvec, gwdcn, gwdq +#endif REAL(KIND=dp), DIMENSION(:, :, :, :), INTENT(IN) :: c6ref INTEGER, DIMENSION(:), INTENT(IN) :: mrefs @@ -1058,11 +1136,19 @@ CONTAINS DO jref = 1, mrefs(jk) DO iref = 1, mrefs(ik) refc6 = c6ref(iref, jref, ik, jk) +#if defined(__DFTD4_V3) c6ij = c6ij + gwvec(iref, ia)*gwvec(jref, ja)*refc6 dc6dcn(1) = dc6dcn(1) + gwdcn(iref, ia)*gwvec(jref, ja)*refc6 dc6dcn(2) = dc6dcn(2) + gwvec(iref, ia)*gwdcn(jref, ja)*refc6 dc6dq(1) = dc6dq(1) + gwdq(iref, ia)*gwvec(jref, ja)*refc6 dc6dq(2) = dc6dq(2) + gwvec(iref, ia)*gwdq(jref, ja)*refc6 +#else + c6ij = c6ij + gwvec(iref, ia, 1)*gwvec(jref, ja, 1)*refc6 + dc6dcn(1) = dc6dcn(1) + gwdcn(iref, ia, 1)*gwvec(jref, ja, 1)*refc6 + dc6dcn(2) = dc6dcn(2) + gwvec(iref, ia, 1)*gwdcn(jref, ja, 1)*refc6 + dc6dq(1) = dc6dq(1) + gwdq(iref, ia, 1)*gwvec(jref, ja, 1)*refc6 + dc6dq(2) = dc6dq(2) + gwvec(iref, ia, 1)*gwdq(jref, ja, 1)*refc6 +#endif END DO END DO diff --git a/src/qs_dispersion_utils.F b/src/qs_dispersion_utils.F index 5584730c64..72c75d9108 100644 --- a/src/qs_dispersion_utils.F +++ b/src/qs_dispersion_utils.F @@ -311,7 +311,11 @@ CONTAINS END DO END IF ELSE IF (dispersion_env%pp_type == vdw_pairpot_dftd4) THEN - WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'DFT-D4(Version 3.6.0)')") +#if defined(__DFTD4_V3) + WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'DFT-D4(Version 3.7)')") +#else + WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'DFT-D4(Version 4.0)')") +#endif WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'see https://github.com/dftd4/dftd4')") WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'E. Caldeweyher et al, PCCP 22: 8499 (2020)')") WRITE (output_unit, fmt="(' vdW POTENTIAL| ',T26,'E. Caldeweyher et al, JCP 150: 154122 (2019)')") diff --git a/tools/toolchain/scripts/stage8/install_dftd4.sh b/tools/toolchain/scripts/stage8/install_dftd4.sh index c9b1b4ac09..4f94bbb985 100755 --- a/tools/toolchain/scripts/stage8/install_dftd4.sh +++ b/tools/toolchain/scripts/stage8/install_dftd4.sh @@ -6,8 +6,8 @@ [ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)" -dftd4_ver="3.7.0" -dftd4_sha256="2e0d3504038358b8a82fdd21912b7765d416a58ebedbdd44f2ca8d2e88339ad7" +dftd4_ver="4.0.2" +dftd4_sha256="ed4a6a3ba0a89b8d6825bf11724dee647fd8ee6272e7822e0cbd9847994eb872" source "${SCRIPT_DIR}"/common_vars.sh source "${SCRIPT_DIR}"/tool_kit.sh @@ -32,18 +32,15 @@ case "$with_dftd4" in install_lock_file="${pkg_install_dir}/install_successful" if verify_checksums "${install_lock_file}"; then - echo "dftd4_dist-${dftd4_ver} is already installed, skipping it." + echo "dftd4-${dftd4_ver} is already installed, skipping it." else - retrieve_package "${dftd4_sha256}" "dftd4-${dftd4_ver}.tar.gz" + retrieve_package "${dftd4_sha256}" "dftd4-${dftd4_ver}-source.tar.xz" echo "Installing from scratch into ${pkg_install_dir}" [ -d dftd4-${dftd4_ver} ] && rm -rf dftd4-${dftd4_ver} - tar -xzf dftd4-${dftd4_ver}.tar.gz - cd dftd4-${dftd4_ver}/subprojects/dftd4 - - rm -Rf build - mkdir build - cd build + tar -xJf dftd4-${dftd4_ver}-source.tar.xz + cd dftd4-${dftd4_ver} + mkdir build && cd build CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}:${OPENBLAS_ROOT}" cmake \ -DCMAKE_INSTALL_PREFIX="${pkg_install_dir}" \ -DCMAKE_INSTALL_LIBDIR=lib \ @@ -61,6 +58,7 @@ case "$with_dftd4" in echo "==================== Finding DFTD4 from system paths ====================" check_command pkg-config --modversion dftd4 DFTD4_INCLUDE_PATH=$(pkg-config --cflags dftd4 | awk '{print $1}' | cut -dI -f2) + pkg_install_dir=$(dirname ${DFTD4_INCLUDE_PATH}) add_include_from_paths DFTD4_CFLAGS "dftd4.h" $DFTD4_INCLUDE_PATH add_include_from_paths DFTD4_CFLAGS "dftd4.mod" $DFTD4_INCLUDE_PATH add_include_from_paths DFTD4_CFLAGS "mctc_io.mod" $DFTD4_INCLUDE_PATH @@ -86,22 +84,21 @@ if [ "$with_dftd4" != "__DONTUSE__" ]; then export DFTD4_VER="${dftd4_ver}" EOF + TEMP_LOC=$(find ${pkg_install_dir}/include -name "multicharge.mod") + MCHARGE=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "mstore.mod") + MSTORE=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "mctc_io.mod") + MCTC=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "dftd4.mod") + DFTD4=${TEMP_LOC%/*} + + DFTD4_INCLUDE_DIRS="$pkg_install_dir/include" + DFTD4_LINK_LIBRARIES="${pkg_install_dir}/lib" + DFTD4_CFLAGS="-I'${MCHARGE}' -I'${MCTC}' -I'${DFTD4}'" + DFTD4_LDFLAGS="-L'${DFTD4_LINK_LIBRARIES}' -Wl,-rpath,'${DFTD4_LINK_LIBRARIES}'" + if [ "$with_dftd4" != "__SYSTEM__" ]; then - TEMP_LOC=$(find ${pkg_install_dir}/include -name "multicharge.mod") - MCHARGE=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "mstore.mod") - MSTORE=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "mctc_io.mod") - MCTC=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "dftd4.mod") - DFTD4=${TEMP_LOC%/*} - - DFTD4_INCLUDE_DIRS="$pkg_install_dir/include" - DFTD4_LINK_LIBRARIES="${pkg_install_dir}/lib" - - DFTD4_CFLAGS="-I'${MCHARGE}' -I'${MCTC}' -I'${DFTD4}'" - DFTD4_LDFLAGS="-L'${DFTD4_LINK_LIBRARIES}' -Wl,-rpath,'${DFTD4_LINK_LIBRARIES}'" - cat << EOF >> "${BUILDDIR}/setup_dftd4" prepend_path LD_LIBRARY_PATH "${DFTD4_LINK_LIBRARIES}" prepend_path LD_RUN_PATH "${DFTD4_LINK_LIBRARIES}" diff --git a/tools/toolchain/scripts/stage8/install_tblite.sh b/tools/toolchain/scripts/stage8/install_tblite.sh index 5c4e45321e..7f1df89471 100755 --- a/tools/toolchain/scripts/stage8/install_tblite.sh +++ b/tools/toolchain/scripts/stage8/install_tblite.sh @@ -69,7 +69,8 @@ case "$with_tblite" in __SYSTEM__) echo "==================== Finding tblite from system paths ====================" check_command pkg-config --modversion tblite - TBLITE_INCLUDE_PATH=$(pkg-config --cflags dftd4 | awk '{print $1}' | cut -dI -f2) + TBLITE_INCLUDE_PATH=$(pkg-config --cflags tblite | awk '{print $1}' | cut -dI -f2) + pkg_install_dir=$(dirname ${TBLITE_INCLUDE_PATH}) add_include_from_paths TBLITE_CFLAGS "tblite.h" $TBLITE_INCLUDE_PATH add_include_from_paths TBLITE_CFLAGS "tblite.mod" $TBLITE_INCLUDE_PATH add_include_from_paths TBLITE_CFLAGS "dftd4.mod" $TBLITE_INCLUDE_PATH @@ -96,27 +97,27 @@ if [ "$with_tblite" != "__DONTUSE__" ]; then export TBLITE_VER="${tblite_ver}" EOF + TEMP_LOC=$(find ${pkg_install_dir}/include -name "tomlf.mod") + TOMLF=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "multicharge.mod") + MCHARGE=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "mstore.mod") + MSTORE=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "mctc_io.mod") + MCTC=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "dftd3.mod") + SDFTD3=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "dftd4.mod") + DFTD4=${TEMP_LOC%/*} + TEMP_LOC=$(find ${pkg_install_dir}/include -name "tblite_xtb.mod") + TBLITE=${TEMP_LOC%/*} + + TBLITE_INCLUDE_DIRS="${pkg_install_dir}/include" + TBLITE_LINK_LIBRARIES="${pkg_install_dir}/lib" + TBLITE_CFLAGS="-I'${TOMLF}' -I'${MCTC}' -I'${SDFTD3}' -I'${DFTD4}' -I'${TBLITE}'" + TBLITE_LDFLAGS="-L'${TBLITE_LINK_LIBRARIES}' -Wl,-rpath,'${TBLITE_LINK_LIBRARIES}'" + if [ "$with_tblite" != "__SYSTEM__" ]; then - TEMP_LOC=$(find ${pkg_install_dir}/include -name "tomlf.mod") - TOMLF=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "multicharge.mod") - MCHARGE=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "mstore.mod") - MSTORE=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "mctc_io.mod") - MCTC=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "dftd3.mod") - SDFTD3=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "dftd4.mod") - DFTD4=${TEMP_LOC%/*} - TEMP_LOC=$(find ${pkg_install_dir}/include -name "tblite_xtb.mod") - TBLITE=${TEMP_LOC%/*} - - TBLITE_INCLUDE_DIRS="${pkg_install_dir}/include" - TBLITE_LINK_LIBRARIES="${pkg_install_dir}/lib" - TBLITE_CFLAGS="-I'${TOMLF}' -I'${MCTC}' -I'${SDFTD3}' -I'${DFTD4}' -I'${TBLITE}'" - TBLITE_LDFLAGS="-L'${TBLITE_LINK_LIBRARIES}' -Wl,-rpath,'${TBLITE_LINK_LIBRARIES}'" - cat << EOF >> "${BUILDDIR}/setup_tblite" prepend_path PATH "${pkg_install_dir}/bin" prepend_path LD_LIBRARY_PATH "${TBLITE_LINK_LIBRARIES}"