From 42bac83c2ee31b3dcabb49dbe48961af4832187d Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 1 Dec 2023 07:13:56 -0700 Subject: LAMMPS updates (#40879) * lammps: add new stable version 20230802.1 * lammps: add missing potential download for +mesont * lammps: fix python package install * Update var/spack/repos/builtin/packages/lammps/package.py Co-authored-by: Adam J. Stewart * lammps: py-numpy and py-mpi4py should be build and run deps * lammps: add new 20231121 release - MPIIO package has been removed -> disable mpiio variant - LAMMPS_EXCEPTIONS is now always on -> disable exceptions variant - CMake 3.16+ is now required - Kokkos 4.1.0 is now supported --------- Co-authored-by: Adam J. Stewart --- var/spack/repos/builtin/packages/lammps/package.py | 72 ++++++++++++++++++---- 1 file changed, 59 insertions(+), 13 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py index b2d3d11133..85374ce78b 100644 --- a/var/spack/repos/builtin/packages/lammps/package.py +++ b/var/spack/repos/builtin/packages/lammps/package.py @@ -3,13 +3,14 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) import datetime as dt +import os import archspec from spack.package import * -class Lammps(CMakePackage, CudaPackage, ROCmPackage): +class Lammps(CMakePackage, CudaPackage, ROCmPackage, PythonExtension): """LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel Simulator. """ @@ -28,10 +29,16 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): # marked deprecated=True # * patch releases older than a stable release should be marked deprecated=True version("develop", branch="develop") + version("20231121", sha256="704d8a990874a425bcdfe0245faf13d712231ba23f014a3ebc27bc14398856f1") + version( + "20230802.1", + sha256="0e5568485e5ee080412dba44a1b7a93f864f1b5c75121f11d528854269953ed0", + preferred=True, + ) version( "20230802", sha256="48dc8b0b0583689e80ea2052275acbc3e3fce89707ac557e120db5564257f7df", - preferred=True, + deprecated=True, ) version( "20230615", @@ -343,6 +350,7 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): ) stable_versions = { + "20230802.1", "20230802", "20220623.4", "20220623.3", @@ -437,7 +445,7 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): "mofff": {"when": "@20210702:"}, "molecule": {"default": True}, "molfile": {"when": "@20210702:"}, - "mpiio": {}, + "mpiio": {"when": "@:20230802.1"}, "netcdf": {"when": "@20210702:"}, "openmp-package": {}, "opt": {}, @@ -530,7 +538,12 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): variant("ffmpeg", default=False, description="Build with ffmpeg support") variant("openmp", default=True, description="Build with OpenMP") variant("opencl", default=False, description="Build with OpenCL") - variant("exceptions", default=False, description="Build with lammps exceptions") + variant( + "exceptions", + default=False, + description="Build with lammps exceptions", + when="@:20230802.1", + ) variant( "cuda_mps", default=False, @@ -563,6 +576,7 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): multi=False, ) + depends_on("cmake@3.16:", when="@20231121:") depends_on("mpi", when="+mpi") depends_on("mpi", when="+mpiio") depends_on("fftw-api@3", when="+kspace") @@ -602,11 +616,14 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): depends_on("plumed", when="+plumed") depends_on("eigen@3:", when="+user-smd") depends_on("eigen@3:", when="+machdyn") - depends_on("py-cython", when="+mliap+python") - depends_on("py-cython", when="+ml-iap+python") - depends_on("py-numpy", when="+python") - depends_on("py-mpi4py", when="+python+mpi") - depends_on("py-setuptools", when="@20220217:+python", type="build") + depends_on("py-cython", when="+mliap+python", type="build") + depends_on("py-cython", when="+ml-iap+python", type="build") + depends_on("py-pip", when="+python", type="build") + depends_on("py-wheel", when="+python", type="build") + depends_on("py-build", when="+python", type="build") + depends_on("py-numpy", when="+python", type=("build", "run")) + depends_on("py-mpi4py", when="+python+mpi", type=("build", "run")) + depends_on("py-setuptools@42:", when="@20220217:+python", type=("build", "run")) depends_on("n2p2@2.1.4:", when="+user-hdnnp") depends_on("n2p2@2.1.4:", when="+ml-hdnnp") depends_on("n2p2+shared", when="+lib ^n2p2") @@ -686,8 +703,8 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): # Older LAMMPS does not compile with Kokkos 4.x conflicts( "^kokkos@4:", - when="@:20230802", - msg="LAMMPS is incompatible with Kokkos 4.x until @20230802", + when="@:20230802.1", + msg="LAMMPS is incompatible with Kokkos 4.x until @20230802.1", ) patch("lib.patch", when="@20170901") @@ -706,6 +723,16 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): ) patch("hip_cmake.patch", when="@20220623:20221222 ~kokkos+rocm") + # Add large potential files + resource( + name="C_10_10.mesocnt", + url="https://download.lammps.org/potentials/C_10_10.mesocnt", + sha256="923f600a081d948eb8b4510f84aa96167b5a6c3e1aba16845d2364ae137dc346", + expand=False, + placement={"C_10_10.mesocnt": "potentials/C_10_10.mesocnt"}, + when="+mesont", + ) + root_cmakelists_dir = "cmake" def cmake_args(self): @@ -723,6 +750,7 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): self.define_from_variant("{}_MPI".format(mpi_prefix), "mpi"), self.define_from_variant("BUILD_OMP", "openmp"), self.define("ENABLE_TESTING", self.run_tests), + self.define("DOWNLOAD_POTENTIALS", False), ] if "~kokkos" in spec: # LAMMPS can be build with the GPU package OR the KOKKOS package @@ -824,6 +852,9 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): if "+rocm" in spec: args.append(self.define("CMAKE_CXX_COMPILER", spec["hip"].hipcc)) + if "+python" in spec: + args.append(self.define("Python_EXECUTABLE", spec["python"].command.path)) + return args def setup_build_environment(self, env): @@ -833,5 +864,20 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage): def setup_run_environment(self, env): env.set("LAMMPS_POTENTIALS", self.prefix.share.lammps.potentials) if "+python" in self.spec: - env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib) - env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib64) + if self.spec.platform == "darwin": + env.prepend_path("DYLD_FALLBACK_LIBRARY_PATH", self.prefix.lib) + env.prepend_path("DYLD_FALLBACK_LIBRARY_PATH", self.prefix.lib64) + else: + env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib) + env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib64) + + @run_after("install") + def install_python(self): + # do LAMMPS Python package installation using pip + if self.spec.satisfies("@20230328: +python"): + with working_dir("python"): + os.environ["LAMMPS_VERSION_FILE"] = join_path( + self.stage.source_path, "src", "version.h" + ) + args = std_pip_args + ["--prefix=" + self.prefix, "."] + pip(*args) -- cgit v1.2.3-70-g09d2