From 853a7b2567dfd3f6fb268e509445bd9b54961a0e Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Fri, 4 Oct 2024 11:54:42 -0700 Subject: WarpX: 24.10 (#46763) * WarpX: 24.10 This updates WarpX and dependencies for the 24.10 release. New features: - EB runtime control: we can now compile with EB on by default, because it is not an incompatible binary option anymore - Catalyst2 support: AMReX/WarpX 24.09+ support Catalyst2 through the existing Conduit bindings * Fix Typo in Variant Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com> * Improve Python Dep Version Ranges * Add Missing `-DWarpX_CATALYST` * AMReX: Missing CMake Options for Vis --------- Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com> --- var/spack/repos/builtin/packages/amrex/package.py | 57 ++++++++++++++++++---- .../repos/builtin/packages/py-amrex/package.py | 16 ++++-- .../builtin/packages/py-picmistandard/package.py | 16 ++---- var/spack/repos/builtin/packages/warpx/package.py | 51 ++++++++++++++----- 4 files changed, 103 insertions(+), 37 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/amrex/package.py b/var/spack/repos/builtin/packages/amrex/package.py index cd5b9e9cba..724b5130c1 100644 --- a/var/spack/repos/builtin/packages/amrex/package.py +++ b/var/spack/repos/builtin/packages/amrex/package.py @@ -120,7 +120,20 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): description="Real precision (double/single)", values=("single", "double"), ) - variant("eb", default=False, description="Build Embedded Boundary classes") + variant("ascent", default=False, description="Enable Ascent in situ visualization") + variant( + "catalyst", + default=False, + description="Enable Catalyst2 in situ visualization", + when="@24.09:", + ) + variant( + "conduit", + default=False, + description="Enable Conduit for data exchange (in situ visualization)", + ) + variant("eb", default=True, description="Build Embedded Boundary classes", when="@24.10:") + variant("eb", default=False, description="Build Embedded Boundary classes", when="@:24.09") variant("fortran", default=False, description="Build Fortran API") variant("linear_solvers", default=True, description="Build linear solvers") variant("amrdata", default=False, description="Build data services") @@ -136,9 +149,20 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): # Build dependencies depends_on("mpi", when="+mpi") - depends_on("sundials@4.0.0:4.1.0 +ARKODE +CVODE", when="@19.08:20.11 +sundials") - depends_on("sundials@5.7.0: +ARKODE +CVODE", when="@21.07:22.04 +sundials") - depends_on("sundials@6.0.0: +ARKODE +CVODE", when="@22.05: +sundials") + with when("+ascent"): + depends_on("ascent") + depends_on("ascent +cuda", when="+cuda") + depends_on("ascent +mpi", when="+mpi") + with when("+conduit"): + depends_on("conduit") + depends_on("conduit +mpi", when="+mpi") + with when("+catalyst"): + depends_on("libcatalyst@2.0: +conduit") + depends_on("libcatalyst +mpi", when="+mpi") + with when("+sundials"): + depends_on("sundials@4.0.0:4.1.0 +ARKODE +CVODE", when="@19.08:20.11") + depends_on("sundials@5.7.0: +ARKODE +CVODE", when="@21.07:22.04") + depends_on("sundials@6.0.0: +ARKODE +CVODE", when="@22.05:") for arch in CudaPackage.cuda_arch_values: depends_on( "sundials@5.7.0: +ARKODE +CVODE +cuda cuda_arch=%s" % arch, @@ -158,9 +182,10 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): when="@22.05: +sundials +rocm amdgpu_target=%s" % tgt, ) - depends_on("cuda@9.0.0:", when="@:22.04 +cuda") - depends_on("cuda@10.0.0:", when="@22.05: +cuda") - depends_on("cuda@11.0.0:", when="@22.12: +cuda") + with when("+cuda"): + depends_on("cuda@9.0.0:", when="@:22.04") + depends_on("cuda@10.0.0:", when="@22.05:") + depends_on("cuda@11.0.0:", when="@22.12:") depends_on("python@2.7:", type="build", when="@:20.04") depends_on("cmake@3.5:", type="build", when="@:18.10") depends_on("cmake@3.13:", type="build", when="@18.11:19.03") @@ -175,9 +200,10 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): depends_on("rocrand", type="build", when="+rocm") depends_on("hiprand", type="build", when="+rocm") depends_on("rocprim", type="build", when="@21.05: +rocm") - depends_on("hypre@2.18.2:", type="link", when="@:21.02 +hypre") - depends_on("hypre@2.19.0:", type="link", when="@21.03: ~cuda +hypre") - depends_on("hypre@2.20.0:", type="link", when="@21.03: +cuda +hypre") + with when("+hypre"): + depends_on("hypre@2.18.2:", type="link", when="@:21.02") + depends_on("hypre@2.19.0:", type="link", when="@21.03: ~cuda") + depends_on("hypre@2.20.0:", type="link", when="@21.03: +cuda") depends_on("petsc", type="link", when="+petsc") depends_on("intel-oneapi-mkl", type=("build", "link"), when="+sycl") @@ -187,6 +213,14 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): conflicts("%gcc@8.1.0:8.2.0", when="@21.01:21.02") # Check options compatibility + conflicts( + "+ascent", when="~conduit", msg="AMReX Ascent support needs Conduit interfaces (+conduit)" + ) + conflicts( + "+catalyst", + when="~conduit", + msg="AMReX Catalyst2 support needs Conduit interfaces (+conduit)", + ) conflicts( "+sundials", when="@19.08:20.11 ~fortran", @@ -274,6 +308,9 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): "-DUSE_XSDK_DEFAULTS=ON", self.define_from_variant("AMReX_SPACEDIM", "dimensions"), self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + self.define_from_variant("AMReX_ASCENT", "ascent"), + self.define_from_variant("AMReX_CATALYST", "catalyst"), + self.define_from_variant("AMReX_CONDUIT", "conduit"), self.define_from_variant("AMReX_MPI", "mpi"), self.define_from_variant("AMReX_OMP", "openmp"), "-DXSDK_PRECISION:STRING=%s" % self.spec.variants["precision"].value.upper(), diff --git a/var/spack/repos/builtin/packages/py-amrex/package.py b/var/spack/repos/builtin/packages/py-amrex/package.py index 0aed567373..60f8687445 100644 --- a/var/spack/repos/builtin/packages/py-amrex/package.py +++ b/var/spack/repos/builtin/packages/py-amrex/package.py @@ -11,7 +11,7 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage): """AMReX Python Bindings with pybind11""" homepage = "https://amrex-codes.github.io/amrex/" - url = "https://github.com/AMReX-Codes/pyamrex/archive/refs/tags/24.08.tar.gz" + url = "https://github.com/AMReX-Codes/pyamrex/archive/refs/tags/24.10.tar.gz" git = "https://github.com/AMReX-Codes/pyamrex.git" maintainers("ax3l", "RTSandberg", "sayerhs", "WeiqunZhang") @@ -19,7 +19,12 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage): license("BSD-3-Clause-LBNL") version("develop", branch="development") - version("24.08", sha256="e7179d88261f64744f392a2194ff2744fe323fe0e21d0742ba60458709a1b47e") + version("24.10", sha256="dc1752ed3fbd5113dcfdbddcfe6c3c458e572b288ac9d41ed3ed7db130591d74") + version( + "24.08", + sha256="e7179d88261f64744f392a2194ff2744fe323fe0e21d0742ba60458709a1b47e", + deprecated=True, + ) version( "24.04", sha256="ab85695bb9644b702d0fc84e77205d264d27ba94999cab912c8a3212a7eb77fc", @@ -32,7 +37,7 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage): deprecated=True, ) - for v in ["24.08", "24.04", "24.03"]: + for v in ["24.10", "24.08", "24.04", "24.03"]: depends_on("amrex@{0}".format(v), when="@{0}".format(v), type=("build", "link")) variant( @@ -60,10 +65,11 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage): depends_on("cxx", type="build") - depends_on("cmake@3.20:", type="build") + depends_on("cmake@3.20:3", type="build", when="@:24.08") + depends_on("cmake@3.24:3", type="build", when="@24.09:") depends_on("python@3.8:", type=("build", "run")) depends_on("py-mpi4py@2.1.0:", type=("build", "run"), when="+mpi") - depends_on("py-numpy@1.15.0:1", type=("build", "run")) + depends_on("py-numpy@1.15:", type=("build", "run")) depends_on("py-packaging@23:", type="build") depends_on("py-pip@23:", type="build") depends_on("py-setuptools@42:", type="build") diff --git a/var/spack/repos/builtin/packages/py-picmistandard/package.py b/var/spack/repos/builtin/packages/py-picmistandard/package.py index fd0998176f..b35dc0a4ee 100644 --- a/var/spack/repos/builtin/packages/py-picmistandard/package.py +++ b/var/spack/repos/builtin/packages/py-picmistandard/package.py @@ -11,11 +11,12 @@ class PyPicmistandard(PythonPackage): homepage = "https://picmi-standard.github.io" git = "https://github.com/picmi-standard/picmi.git" - pypi = "picmistandard/picmistandard-0.29.0.tar.gz" + pypi = "picmistandard/picmistandard-0.30.0.tar.gz" maintainers("ax3l", "dpgrote", "RemiLehe") version("master", branch="master") + version("0.30.0", sha256="28b892b242e0cc044ad987d6bdc12811fe4a478d5096d6bc5989038ee9d9dab6") version("0.29.0", sha256="dc0bf3ddd3635df9935ac569b3085de387150c4f8e9851897078bb12d123dde8") version("0.28.0", sha256="aa980b0fb49fc3ff9c7e32b5927b3700c4660aefbf96567bac1f8c9c93bb7831") version("0.26.0", sha256="b22689f576d064bf0cd8f435621e912359fc2ee9347350eab845d2d36ebb62eb") @@ -49,14 +50,7 @@ class PyPicmistandard(PythonPackage): deprecated=True, ) - depends_on("python@3.6:", type=("build", "run")) - depends_on("py-numpy@1.15:", type=("build", "run")) - depends_on("py-scipy@1.5:", type=("build", "run")) + depends_on("python@3.8:", type=("build", "run")) + depends_on("py-numpy@1.15:1", type=("build", "run")) + depends_on("py-scipy@1.5:1", type=("build", "run")) depends_on("py-setuptools", type="build") - - @property - def build_directory(self): - if self.spec.satisfies("@develop") or self.spec.satisfies("@0.0.16"): - return "PICMI_Python" - else: - return "./" diff --git a/var/spack/repos/builtin/packages/warpx/package.py b/var/spack/repos/builtin/packages/warpx/package.py index 5b13827d25..82a8610c4f 100644 --- a/var/spack/repos/builtin/packages/warpx/package.py +++ b/var/spack/repos/builtin/packages/warpx/package.py @@ -16,7 +16,7 @@ class Warpx(CMakePackage, PythonExtension): """ homepage = "https://ecp-warpx.github.io" - url = "https://github.com/ECP-WarpX/WarpX/archive/refs/tags/24.08.tar.gz" + url = "https://github.com/ECP-WarpX/WarpX/archive/refs/tags/24.10.tar.gz" git = "https://github.com/ECP-WarpX/WarpX.git" maintainers("ax3l", "dpgrote", "EZoni", "RemiLehe") @@ -26,7 +26,12 @@ class Warpx(CMakePackage, PythonExtension): # NOTE: if you update the versions here, also see py-warpx version("develop", branch="development") - version("24.08", sha256="8da1f2967f613a65a295260260aa4f081ac1d1b7c1d6987d294e02b86099df08") + version("24.10", sha256="1fe3a86bf820a2ecef853cdcd9427fba4e0cb1efb05326da7dc9dbf94551202f") + version( + "24.08", + sha256="8da1f2967f613a65a295260260aa4f081ac1d1b7c1d6987d294e02b86099df08", + deprecated=True, + ) version( "23.08", sha256="67695ff04b83d1823ea621c19488e54ebaf268532b0e5eb4ea8ad293d7ab3ddc", @@ -177,6 +182,12 @@ class Warpx(CMakePackage, PythonExtension): variant("app", default=True, description="Build the WarpX executable application") variant("ascent", default=False, description="Enable Ascent in situ visualization") + variant( + "catalyst", + default=False, + description="Enable Catalyst2 in situ visualization", + when="@24.09:", + ) variant("sensei", default=False, description="Enable SENSEI in situ visualization") variant( "compute", @@ -201,7 +212,8 @@ class Warpx(CMakePackage, PythonExtension): description="Number of spatial dimensions", when="@23.06:", ) - variant("eb", default=False, description="Embedded boundary support (in development)") + variant("eb", default=True, description="Embedded boundary support", when="@24.10:") + variant("eb", default=False, description="Embedded boundary support", when="@:24.09") # Spack defaults to False but pybind11 defaults to True (and IPO is highly # encouraged to be used) variant( @@ -233,7 +245,7 @@ class Warpx(CMakePackage, PythonExtension): depends_on("cxx", type="build") - for v in ["24.08", "develop"]: + for v in ["24.10", "24.08", "develop"]: depends_on( f"amrex@{v} build_system=cmake +linear_solvers +pic +particles +shared +tiny_profile", when=f"@{v}", @@ -241,13 +253,20 @@ class Warpx(CMakePackage, PythonExtension): ) depends_on("py-amrex@{0}".format(v), when="@{0} +python".format(v), type=("build", "run")) - depends_on("ascent", when="+ascent") - depends_on("ascent +cuda", when="+ascent compute=cuda") - depends_on("ascent +mpi", when="+ascent +mpi") depends_on("boost@1.66.0: +math", when="+qedtablegen") depends_on("cmake@3.15.0:", type="build") depends_on("cmake@3.18.0:", type="build", when="@22.01:") depends_on("cmake@3.20.0:", type="build", when="@22.08:") + depends_on("cmake@3.24.0:", type="build", when="@24.09:") + with when("+ascent"): + depends_on("ascent", when="+ascent") + depends_on("ascent +cuda", when="+ascent compute=cuda") + depends_on("ascent +mpi", when="+ascent +mpi") + depends_on("amrex +ascent +conduit") + with when("+catalyst"): + depends_on("libcatalyst@2.0: +conduit") + depends_on("libcatalyst +mpi", when="+mpi") + depends_on("amrex +catalyst +conduit") with when("dims=1"): depends_on("amrex dimensions=1") with when("dims=2"): @@ -314,7 +333,8 @@ class Warpx(CMakePackage, PythonExtension): depends_on("py-mpi4py@2.1.0:", type=("build", "run"), when="+mpi") depends_on("py-periodictable@1.5:1", type=("build", "run")) depends_on("py-picmistandard@0.28.0", type=("build", "run"), when="@23.11:24.07") - depends_on("py-picmistandard@0.29.0", type=("build", "run"), when="@24.08:") + depends_on("py-picmistandard@0.29.0", type=("build", "run"), when="@24.08") + depends_on("py-picmistandard@0.30.0", type=("build", "run"), when="@24.09:") depends_on("py-pip@23:", type="build") depends_on("py-setuptools@42:", type="build") depends_on("py-pybind11@2.12.0:", type=("build", "link")) @@ -373,6 +393,7 @@ class Warpx(CMakePackage, PythonExtension): # variants self.define_from_variant("WarpX_APP", "app"), self.define_from_variant("WarpX_ASCENT", "ascent"), + self.define_from_variant("WarpX_CATALYST", "catalyst"), self.define_from_variant("WarpX_SENSEI", "sensei"), "-DWarpX_COMPUTE={0}".format(spec.variants["compute"].value.upper()), "-DWarpX_DIMS={0}".format(";".join(spec.variants["dims"].value).upper()), @@ -466,9 +487,17 @@ class Warpx(CMakePackage, PythonExtension): install_test_root(self) if post_install else self.stage.source_path, self.examples_src_dir, ) - inputs_nD = {"1": "inputs_1d", "2": "inputs_2d", "3": "inputs_3d", "rz": "inputs_rz"} - if spec.satisfies("@:21.12"): - inputs_nD["rz"] = "inputs_2d_rz" + if spec.satisfies("@:24.09"): + inputs_nD = {"1": "inputs_1d", "2": "inputs_2d", "3": "inputs_3d", "rz": "inputs_rz"} + if spec.satisfies("@:21.12"): + inputs_nD["rz"] = "inputs_2d_rz" + else: + inputs_nD = { + "1": "inputs_test_1d_laser_acceleration", + "2": "inputs_base_2d", + "3": "inputs_base_3d", + "rz": "inputs_base_rz", + } inputs = join_path(examples_dir, inputs_nD[dim]) cli_args = [inputs, "max_step=50", "diag1.intervals=10"] -- cgit v1.2.3-70-g09d2