mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-28 06:05:29 -04:00
Install GauXC Skala with spack (#5269)
This commit is contained in:
parent
78a7633e0d
commit
7fabd04827
7 changed files with 280 additions and 9 deletions
54
make_cp2k.sh
54
make_cp2k.sh
|
|
@ -234,7 +234,7 @@ while [[ $# -gt 0 ]]; do
|
|||
for package in libfci libint2 libxc libxsmm spglib vori tblite; do
|
||||
CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_${package^^}=ON"
|
||||
done
|
||||
for package in ace deepmd greenx hdf5 libtorch pexsi trexio; do
|
||||
for package in ace deepmd gauxc greenx hdf5 libtorch pexsi trexio; do
|
||||
CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_${package^^}=OFF"
|
||||
done
|
||||
;;
|
||||
|
|
@ -268,7 +268,7 @@ while [[ $# -gt 0 ]]; do
|
|||
# Enable or disable all features
|
||||
CMAKE_FEATURE_FLAG_ALL="-DCP2K_USE_EVERYTHING=${ON_OFF}"
|
||||
for package in adios2 cosma deepmdkit dla-future dla-future-fortran elpa \
|
||||
greenx hdf5 libfci libfabric libint libvdwxc libsmeagol libvori libxc \
|
||||
gauxc greenx hdf5 libfci libfabric libint libvdwxc libsmeagol libvori libxc \
|
||||
libxsmm mimic-mcl openpmd-api pace pexsi plumed py-torch sirius spfft \
|
||||
spglib spla tblite trexio; do
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"${package}@/ ${SUBST}"
|
||||
|
|
@ -278,7 +278,7 @@ while [[ $# -gt 0 ]]; do
|
|||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"smm=libxsmm\"/ s/libxsmm/blas/'"
|
||||
fi
|
||||
;;
|
||||
ace | cosma | deepmd | dftd4 | dlaf | elpa | fftw3 | greenx | hdf5 | libfci | libint2 | \
|
||||
ace | cosma | deepmd | dftd4 | dlaf | elpa | fftw3 | gauxc | greenx | hdf5 | libfci | libint2 | \
|
||||
libsmeagol | libtorch | libxc | libxsmm | mimic | openpmd | pexsi | plumed | spglib | \
|
||||
tblite | trexio | vori)
|
||||
CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_${2^^}=${ON_OFF}"
|
||||
|
|
@ -312,15 +312,25 @@ while [[ $# -gt 0 ]]; do
|
|||
fftw3)
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"fftw@/ ${SUBST}"
|
||||
;;
|
||||
gauxc)
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"${2,,}@/ ${SUBST}"
|
||||
if [[ "${ON_OFF}" == "ON" ]]; then
|
||||
# GauXC requires libtorch
|
||||
CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_LIBTORCH=${ON_OFF}"
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"py-torch@/ ${SUBST}"
|
||||
fi
|
||||
;;
|
||||
libint2)
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"libint@/ ${SUBST}"
|
||||
;;
|
||||
libtorch)
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"py-torch@/ ${SUBST}"
|
||||
if [[ "${ON_OFF}" == "OFF" ]]; then
|
||||
# DeePMD-kit requires libtorch
|
||||
# DeePMD-kit and GauXC require libtorch
|
||||
CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_DEEPMD=${ON_OFF}"
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"deepmdkit@/ ${SUBST}"
|
||||
CMAKE_FEATURE_FLAGS+=" -DCP2K_USE_GAUXC=${ON_OFF}"
|
||||
SED_PATTERN_LIST+=" -e '/\s*-\s+\"gauxc@/ ${SUBST}"
|
||||
fi
|
||||
;;
|
||||
libxsmm)
|
||||
|
|
@ -583,7 +593,7 @@ NUM_PROCS=$(awk '{print $1+0}' <<< "${NUM_PROCS}")
|
|||
[[ -f /.dockerenv || -f /run/.containerenv ]] && IN_CONTAINER="yes" || IN_CONTAINER="no"
|
||||
|
||||
# Assemble CMake feature flag list
|
||||
CMAKE_FEATURE_FLAGS="${CMAKE_FEATURE_FLAG_ALL} ${CMAKE_FEATURE_FLAG_MPI} ${CMAKE_FEATURE_FLAGS} -DCP2K_USE_GAUXC=OFF"
|
||||
CMAKE_FEATURE_FLAGS="${CMAKE_FEATURE_FLAG_ALL} ${CMAKE_FEATURE_FLAG_MPI} ${CMAKE_FEATURE_FLAGS}"
|
||||
|
||||
# Clean CMake feature flag list from repeated entries and keep only the last definition
|
||||
declare -A last=()
|
||||
|
|
@ -667,9 +677,9 @@ if [[ "${HELP}" == "yes" ]]; then
|
|||
echo " (see also --build_deps flag)"
|
||||
echo " - The folder ${CP2K_ROOT}/install is updated after each successful run"
|
||||
echo ""
|
||||
echo "Packages: all | ace | cosma | deepmd | dftd4 | dlaf | elpa | fftw3 | greenx | hdf5 | libfci | libint2 |"
|
||||
echo " libsmeagol | libtorch | libvdwxc | libxsmm | mimic | openpmd | pexsi | plumed | sirius |"
|
||||
echo " spfft | spglib | spla | tblite | trexio | vori "
|
||||
echo "Packages: all | ace | cosma | deepmd | dftd4 | dlaf | elpa | fftw3 | gauxc | greenx | hdf5 | libfci |"
|
||||
echo " libint | libsmeagol | libtorch | libvdwxc | libxsmm | mimic | openpmd | pexsi | plumed |"
|
||||
echo " sirius | spfft | spglib | spla | tblite | trexio | vori "
|
||||
echo ""
|
||||
echo "Features: cray_pm_accel_energy | cusolver_mp | dbm_gpu | elpa_gpu | grid_gpu | pw_gpu |"
|
||||
echo " spla_gemm_offloading | unified_memory"
|
||||
|
|
@ -1363,6 +1373,32 @@ if ((EXIT_CODE != 0)); then
|
|||
${EXIT_CMD} "${EXIT_CODE}"
|
||||
fi
|
||||
|
||||
# Install Skala resource files if needed
|
||||
export GAUXC_SKALA_MODEL="(not available)"
|
||||
GAUXC_PATH="share/gauxc/onedft_models"
|
||||
GAUXC_PREFIX="$(spack location -i gauxc)"
|
||||
GAUXC_MODEL_SOURCE_PATH="${GAUXC_PREFIX%/}/${GAUXC_PATH}"
|
||||
if [[ -d "${GAUXC_MODEL_SOURCE_PATH}" ]]; then
|
||||
GAUXC_MODEL_TARGET_PATH="${INSTALL_PREFIX%/}/${GAUXC_PATH}"
|
||||
mkdir -p "${GAUXC_MODEL_TARGET_PATH}"
|
||||
if compgen -G "${GAUXC_MODEL_SOURCE_PATH}/*.fun" > /dev/null; then
|
||||
cp "${GAUXC_MODEL_SOURCE_PATH}"/*.fun "${GAUXC_MODEL_TARGET_PATH}/"
|
||||
else
|
||||
echo -e "\nERROR: No GauXC model files found in source folder ${GAUXC_MODEL_SOURCE_PATH}"
|
||||
${EXIT_CMD} 1
|
||||
fi
|
||||
shopt -s nullglob
|
||||
MATCHES=("${GAUXC_MODEL_TARGET_PATH}"/skala*)
|
||||
shopt -u nullglob
|
||||
if ((${#MATCHES[@]} > 0)); then
|
||||
export GAUXC_SKALA_MODEL="${MATCHES[${#MATCHES[@]} - 1]}"
|
||||
else
|
||||
echo -e "\nERROR: Failed to resolve GAUXC_SKALA_MODEL in target path ${GAUXC_MODEL_TARGET_PATH}"
|
||||
${EXIT_CMD} 1
|
||||
fi
|
||||
fi
|
||||
echo -e "\nGAUXC_SKALA_MODEL = ${GAUXC_SKALA_MODEL}"
|
||||
|
||||
# Collect and compress all log files when building within a container
|
||||
if [[ "${IN_CONTAINER}" == "yes" ]]; then
|
||||
if ! cat "${CMAKE_BUILD_PATH}"/cmake.log \
|
||||
|
|
@ -1474,6 +1510,7 @@ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
|
|||
export OMP_NUM_THREADS=\${OMP_NUM_THREADS:-2}
|
||||
export OMP_STACKSIZE=256M
|
||||
${OMPI_VARS}
|
||||
export GAUXC_SKALA_MODEL=${GAUXC_SKALA_MODEL}
|
||||
exec "\$@"
|
||||
***
|
||||
chmod 750 "${LAUNCH_SCRIPT}"
|
||||
|
|
@ -1486,6 +1523,7 @@ if [[ "${VERSION}" =~ ^(s|p)dbg$ ]]; then
|
|||
echo "LSAN_OPTIONS = \${LSAN_OPTIONS}"
|
||||
fi
|
||||
ldd -- ${INSTALL_PREFIX}/bin/cp2k.${VERSION} 2>&1 | grep -E 'not ' | sort | uniq
|
||||
export GAUXC_SKALA_MODEL=${GAUXC_SKALA_MODEL}
|
||||
${CP2K_ROOT}/tests/do_regtest.py ${TESTOPTS} \$* ${INSTALL_PREFIX}/bin ${VERSION}
|
||||
***
|
||||
chmod 750 "${INSTALL_PREFIX}"/bin/run_tests
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ spack:
|
|||
buildable: true
|
||||
prefer:
|
||||
- "~cuda"
|
||||
- "+fortran"
|
||||
- "+mpi"
|
||||
- "+mpi_f08"
|
||||
- "+openmp"
|
||||
|
|
@ -69,7 +70,6 @@ spack:
|
|||
|
||||
openblas:
|
||||
require:
|
||||
- "+fortran"
|
||||
- "threads=openmp"
|
||||
- "build_system=makefile"
|
||||
|
||||
|
|
@ -109,6 +109,13 @@ spack:
|
|||
require:
|
||||
- "+openmp"
|
||||
|
||||
gauxc:
|
||||
require:
|
||||
- "+c"
|
||||
- "+fortran"
|
||||
- "+openmp"
|
||||
- "+skala"
|
||||
|
||||
hdf5:
|
||||
require:
|
||||
- "+fortran"
|
||||
|
|
@ -190,6 +197,7 @@ spack:
|
|||
- "dla-future-fortran@0.5.0"
|
||||
- "elpa@2026.02.001"
|
||||
- "fftw@3.3.11"
|
||||
- "gauxc@dev20260522"
|
||||
- "greenx@2.2"
|
||||
- "hdf5@2.1.0"
|
||||
- "libfabric@2.5.1"
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ spack:
|
|||
buildable: true
|
||||
prefer:
|
||||
- "~cuda"
|
||||
- "+fortran"
|
||||
- "~mpi"
|
||||
- "~mpi_f08"
|
||||
- "+openmp"
|
||||
|
|
@ -73,6 +74,13 @@ spack:
|
|||
require:
|
||||
- "+openmp"
|
||||
|
||||
gauxc:
|
||||
require:
|
||||
- "+c"
|
||||
- "+fortran"
|
||||
- "+openmp"
|
||||
- "+skala"
|
||||
|
||||
hdf5:
|
||||
require:
|
||||
- "+fortran"
|
||||
|
|
@ -115,6 +123,7 @@ spack:
|
|||
- "deepmdkit@3.1.3"
|
||||
# - "dftd4@4.0.2"
|
||||
- "fftw@3.3.11"
|
||||
- "gauxc@dev20260522"
|
||||
- "greenx@2.2"
|
||||
- "hdf5@2.1.0"
|
||||
- "libfci@0.1.0"
|
||||
|
|
|
|||
43
tools/spack/spack_repo/cp2k_dev/packages/exchcxx/package.py
Normal file
43
tools/spack/spack_repo/cp2k_dev/packages/exchcxx/package.py
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
from spack_repo.builtin.build_systems.cmake import CMakePackage, generator
|
||||
from spack_repo.builtin.build_systems.cuda import CudaPackage
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class Exchcxx(CMakePackage, CudaPackage):
|
||||
"""Exchange correlation (XC) library for density functional theory (DFT)
|
||||
calculations in modern C++."""
|
||||
|
||||
homepage = "https://github.com/wavefunction91/ExchCXX"
|
||||
git = "https://github.com/wavefunction91/ExchCXX.git"
|
||||
url = "https://github.com/wavefunction91/ExchCXX/archive/refs/tags/v1.0.0.tar.gz"
|
||||
|
||||
maintainers("awvwgk", "mkrack")
|
||||
|
||||
license("BSD-3-Clause")
|
||||
|
||||
version("master", branch="master")
|
||||
version("1.0.0", sha256="0ea38aab563ea5d11a03d80dc1bf909821091d903eb852c5cb350484753a847a")
|
||||
|
||||
depends_on("c", type="build")
|
||||
depends_on("cxx", type="build")
|
||||
depends_on("cmake@3.20:", type="build")
|
||||
depends_on("ninja@1.10:", type="build")
|
||||
depends_on("libxc@7.0.0:")
|
||||
depends_on("cuda", when="+cuda")
|
||||
|
||||
generator("ninja")
|
||||
|
||||
variant("cuda", default=False, description="Build with CUDA support")
|
||||
variant("pic", default=True, description="Build position independent code")
|
||||
|
||||
def cmake_args(self):
|
||||
args = [self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic")]
|
||||
if "+cuda" in self.spec:
|
||||
args.append(self.define("EXCHCXX_ENABLE_CUDA", True))
|
||||
return args
|
||||
40
tools/spack/spack_repo/cp2k_dev/packages/gau2grid/package.py
Normal file
40
tools/spack/spack_repo/cp2k_dev/packages/gau2grid/package.py
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
from spack_repo.builtin.build_systems.cmake import CMakePackage, generator
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class Gau2grid(CMakePackage):
|
||||
"""Gau2Grid is a library for efficient evaluation of Gaussian
|
||||
basis functions on grids."""
|
||||
|
||||
homepage = "https://gau2grid.readthedocs.io"
|
||||
git = "https://github.com/psi4/gau2grid.git"
|
||||
url = "https://github.com/psi4/gau2grid/archive/refs/tags/v2.0.8.tar.gz"
|
||||
|
||||
maintainers("awvwgk", "mkrack")
|
||||
|
||||
license("BSD-3-Clause")
|
||||
|
||||
version("master", branch="master")
|
||||
version("2.0.9", sha256="7879bdddf3a52cd2a051086215977822bbe8d1af927fcf5b4fb0256a38b8a76c")
|
||||
version("2.0.8", sha256="c5f445344a465c1d9afc6516544dc4a2fba588af7ba0f1ac1a6b538260f0cd96")
|
||||
|
||||
depends_on("cmake@3.12:", type="build")
|
||||
depends_on("ninja@1.10:", type="build")
|
||||
depends_on("python@2.12:", type="build")
|
||||
depends_on("py-numpy", type="build")
|
||||
|
||||
generator("ninja")
|
||||
|
||||
def cmake_args(self):
|
||||
args = [
|
||||
self.define("MAX_AM", 8),
|
||||
self.define("ENABLE_XHOST", False),
|
||||
self.define("INSTALL_PYMOD", False),
|
||||
]
|
||||
return args
|
||||
98
tools/spack/spack_repo/cp2k_dev/packages/gauxc/package.py
Normal file
98
tools/spack/spack_repo/cp2k_dev/packages/gauxc/package.py
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
from spack_repo.builtin.build_systems.cmake import CMakePackage, generator
|
||||
from spack_repo.builtin.build_systems.cuda import CudaPackage
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class Gauxc(CMakePackage, CudaPackage):
|
||||
"""GauXC is a modern, modular C++ library for the evaluation of quantities related to
|
||||
the exchange-correlation (XC) energy (e.g. potential, etc) in the Gaussian basis set
|
||||
discretization of Kohn-Sham density function theory (KS-DFT) on heterogenous architectures."""
|
||||
|
||||
homepage = "https://github.com/wavefunction91/GauXC"
|
||||
git = "https://github.com/wavefunction91/GauXC.git"
|
||||
url = "https://github.com/wavefunction91/GauXC/archive/refs/tags/v1.1.tar.gz"
|
||||
|
||||
maintainers("awvwgk", "mkrack")
|
||||
|
||||
license("BSD-3-Clause")
|
||||
|
||||
version("master", branch="master")
|
||||
version("dev20260522", branch="skala", commit="69ee054054c642bce0d9b5e8c9c0c13afa97b774")
|
||||
version(
|
||||
"1.2.dev2",
|
||||
sha256="6659d00522b443f2557a960a9ba0217449d2ee25df809634d6becca23eb0f1ff",
|
||||
url="https://github.com/microsoft/skala/releases/download/v1.1.1/gauxc-skala-r2.tar.gz",
|
||||
)
|
||||
version("1.1", sha256="17de077fb23e44d03b0ed14dcd8117c01e5b3431fbefa2352d751639ada7f91c")
|
||||
|
||||
# Skala resource file
|
||||
skala_version = "1.1"
|
||||
skala_file = f"skala-{skala_version}.fun"
|
||||
resource(
|
||||
name="skala_fun",
|
||||
url=f"https://huggingface.co/microsoft/skala-{skala_version}/resolve/main/{skala_file}",
|
||||
sha256="0c8432ac3f03c8f1276372df9aca5b7ee7f8939d47a8789eb158976e89aa0606",
|
||||
expand=False,
|
||||
placement=skala_file,
|
||||
when="+skala",
|
||||
)
|
||||
|
||||
depends_on("c", type="build")
|
||||
depends_on("cxx", type="build")
|
||||
depends_on("fortran", when="+fortran", type="build")
|
||||
depends_on("cmake@3.20:", type="build")
|
||||
depends_on("ninja@1.10:", type="build")
|
||||
depends_on("exchcxx ~cuda", when="~cuda")
|
||||
depends_on("exchcxx +cuda", when="+cuda")
|
||||
depends_on("integratorxx")
|
||||
depends_on("hdf5", when="+hdf5")
|
||||
depends_on("mpi", when="+mpi")
|
||||
depends_on("cuda", when="+cuda")
|
||||
depends_on("highfive@:2.10.1", when="+hdf5")
|
||||
depends_on("gau2grid")
|
||||
depends_on("blas")
|
||||
depends_on("nlohmann-json", when="+skala")
|
||||
depends_on("py-torch@2:", when="+skala")
|
||||
depends_on("py-torch@2: +cuda", when="+skala+cuda")
|
||||
|
||||
generator("ninja")
|
||||
|
||||
variant("openmp", default=True, description="Build with OpenMP support")
|
||||
variant("mpi", default=False, description="Build with MPI support")
|
||||
variant("cuda", default=False, description="Build with CUDA support")
|
||||
variant("hdf5", default=False, description="Build with HDF5 support")
|
||||
variant("c", default=False, description="Build with C support")
|
||||
variant("fortran", default=False, description="Build with Fortran support")
|
||||
variant("skala", default=False, description="Build with Skala support")
|
||||
variant("host", default=True, description="Build with host integrators")
|
||||
variant("tests", default=False, description="Build with testing framework (Catch2)")
|
||||
variant("pic", default=True, description="Build position independent code")
|
||||
|
||||
def cmake_args(self):
|
||||
args = [
|
||||
self.define("GAUXC_ENABLE_OPENMP", self.spec.satisfies("+openmp")),
|
||||
self.define("GAUXC_ENABLE_MPI", self.spec.satisfies("+mpi")),
|
||||
self.define("GAUXC_ENABLE_CUDA", self.spec.satisfies("+cuda")),
|
||||
self.define("GAUXC_ENABLE_HDF5", self.spec.satisfies("+hdf5")),
|
||||
self.define("GAUXC_ENABLE_C", self.spec.satisfies("+c")),
|
||||
self.define("GAUXC_ENABLE_FORTRAN", self.spec.satisfies("+fortran")),
|
||||
self.define("GAUXC_ENABLE_ONEDFT", self.spec.satisfies("+skala")),
|
||||
self.define("GAUXC_ENABLE_HOST", self.spec.satisfies("+host")),
|
||||
self.define("GAUXC_ENABLE_TESTS", self.spec.satisfies("+tests")),
|
||||
self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"),
|
||||
]
|
||||
return args
|
||||
|
||||
def install(self, spec, prefix):
|
||||
super().install(spec, prefix)
|
||||
if self.spec.satisfies("+skala"):
|
||||
target_dir = self.prefix.share.gauxc.join("onedft_models")
|
||||
mkdirp(target_dir)
|
||||
print(target_dir)
|
||||
install(join_path(self.skala_file, self.skala_file), target_dir)
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
|
||||
from spack_repo.builtin.build_systems.cmake import CMakePackage, generator
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class Integratorxx(CMakePackage):
|
||||
"""Reuseable density functional theory (DFT) grid library."""
|
||||
|
||||
homepage = "https://github.com/wavefunction91/IntegratorXX"
|
||||
git = "https://github.com/wavefunction91/IntegratorXX.git"
|
||||
url = "https://github.com/wavefunction91/IntegratorXX/archive/refs/tags/v1.0.0.tar.gz"
|
||||
|
||||
maintainers("awvwgk", "mkrack")
|
||||
|
||||
license("BSD-3-Clause")
|
||||
|
||||
version("master", branch="master")
|
||||
version("1.0.0", sha256="d2826439d14b3f716ffd57a07d1d407de029a80c0e0446998b8f1339d5085b9c")
|
||||
|
||||
depends_on("cxx", type="build")
|
||||
depends_on("cmake@3.20:", type="build")
|
||||
depends_on("ninja@1.10:", type="build")
|
||||
|
||||
generator("ninja")
|
||||
|
||||
variant("pic", default=True, description="Build position independent code")
|
||||
|
||||
def cmake_args(self):
|
||||
args = [self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic")]
|
||||
return args
|
||||
Loading…
Add table
Add a link
Reference in a new issue