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>
This commit is contained in:
Axel Huebl 2024-10-04 11:54:42 -07:00 committed by GitHub
parent 1756aeb45a
commit 853a7b2567
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 103 additions and 37 deletions

View File

@ -120,7 +120,20 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage):
description="Real precision (double/single)", description="Real precision (double/single)",
values=("single", "double"), 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("fortran", default=False, description="Build Fortran API")
variant("linear_solvers", default=True, description="Build linear solvers") variant("linear_solvers", default=True, description="Build linear solvers")
variant("amrdata", default=False, description="Build data services") variant("amrdata", default=False, description="Build data services")
@ -136,9 +149,20 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage):
# Build dependencies # Build dependencies
depends_on("mpi", when="+mpi") depends_on("mpi", when="+mpi")
depends_on("sundials@4.0.0:4.1.0 +ARKODE +CVODE", when="@19.08:20.11 +sundials") with when("+ascent"):
depends_on("sundials@5.7.0: +ARKODE +CVODE", when="@21.07:22.04 +sundials") depends_on("ascent")
depends_on("sundials@6.0.0: +ARKODE +CVODE", when="@22.05: +sundials") 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: for arch in CudaPackage.cuda_arch_values:
depends_on( depends_on(
"sundials@5.7.0: +ARKODE +CVODE +cuda cuda_arch=%s" % arch, "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, when="@22.05: +sundials +rocm amdgpu_target=%s" % tgt,
) )
depends_on("cuda@9.0.0:", when="@:22.04 +cuda") with when("+cuda"):
depends_on("cuda@10.0.0:", when="@22.05: +cuda") depends_on("cuda@9.0.0:", when="@:22.04")
depends_on("cuda@11.0.0:", when="@22.12: +cuda") 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("python@2.7:", type="build", when="@:20.04")
depends_on("cmake@3.5:", type="build", when="@:18.10") depends_on("cmake@3.5:", type="build", when="@:18.10")
depends_on("cmake@3.13:", type="build", when="@18.11:19.03") 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("rocrand", type="build", when="+rocm")
depends_on("hiprand", type="build", when="+rocm") depends_on("hiprand", type="build", when="+rocm")
depends_on("rocprim", type="build", when="@21.05: +rocm") depends_on("rocprim", type="build", when="@21.05: +rocm")
depends_on("hypre@2.18.2:", type="link", when="@:21.02 +hypre") with when("+hypre"):
depends_on("hypre@2.19.0:", type="link", when="@21.03: ~cuda +hypre") depends_on("hypre@2.18.2:", type="link", when="@:21.02")
depends_on("hypre@2.20.0:", type="link", when="@21.03: +cuda +hypre") 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("petsc", type="link", when="+petsc")
depends_on("intel-oneapi-mkl", type=("build", "link"), when="+sycl") 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") conflicts("%gcc@8.1.0:8.2.0", when="@21.01:21.02")
# Check options compatibility # 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( conflicts(
"+sundials", "+sundials",
when="@19.08:20.11 ~fortran", when="@19.08:20.11 ~fortran",
@ -274,6 +308,9 @@ def cmake_args(self):
"-DUSE_XSDK_DEFAULTS=ON", "-DUSE_XSDK_DEFAULTS=ON",
self.define_from_variant("AMReX_SPACEDIM", "dimensions"), self.define_from_variant("AMReX_SPACEDIM", "dimensions"),
self.define_from_variant("BUILD_SHARED_LIBS", "shared"), 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_MPI", "mpi"),
self.define_from_variant("AMReX_OMP", "openmp"), self.define_from_variant("AMReX_OMP", "openmp"),
"-DXSDK_PRECISION:STRING=%s" % self.spec.variants["precision"].value.upper(), "-DXSDK_PRECISION:STRING=%s" % self.spec.variants["precision"].value.upper(),

View File

@ -11,7 +11,7 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage):
"""AMReX Python Bindings with pybind11""" """AMReX Python Bindings with pybind11"""
homepage = "https://amrex-codes.github.io/amrex/" 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" git = "https://github.com/AMReX-Codes/pyamrex.git"
maintainers("ax3l", "RTSandberg", "sayerhs", "WeiqunZhang") maintainers("ax3l", "RTSandberg", "sayerhs", "WeiqunZhang")
@ -19,7 +19,12 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage):
license("BSD-3-Clause-LBNL") license("BSD-3-Clause-LBNL")
version("develop", branch="development") version("develop", branch="development")
version("24.08", sha256="e7179d88261f64744f392a2194ff2744fe323fe0e21d0742ba60458709a1b47e") version("24.10", sha256="dc1752ed3fbd5113dcfdbddcfe6c3c458e572b288ac9d41ed3ed7db130591d74")
version(
"24.08",
sha256="e7179d88261f64744f392a2194ff2744fe323fe0e21d0742ba60458709a1b47e",
deprecated=True,
)
version( version(
"24.04", "24.04",
sha256="ab85695bb9644b702d0fc84e77205d264d27ba94999cab912c8a3212a7eb77fc", sha256="ab85695bb9644b702d0fc84e77205d264d27ba94999cab912c8a3212a7eb77fc",
@ -32,7 +37,7 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage):
deprecated=True, 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")) depends_on("amrex@{0}".format(v), when="@{0}".format(v), type=("build", "link"))
variant( variant(
@ -60,10 +65,11 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage):
depends_on("cxx", type="build") 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("python@3.8:", type=("build", "run"))
depends_on("py-mpi4py@2.1.0:", type=("build", "run"), when="+mpi") 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-packaging@23:", type="build")
depends_on("py-pip@23:", type="build") depends_on("py-pip@23:", type="build")
depends_on("py-setuptools@42:", type="build") depends_on("py-setuptools@42:", type="build")

View File

@ -11,11 +11,12 @@ class PyPicmistandard(PythonPackage):
homepage = "https://picmi-standard.github.io" homepage = "https://picmi-standard.github.io"
git = "https://github.com/picmi-standard/picmi.git" 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") maintainers("ax3l", "dpgrote", "RemiLehe")
version("master", branch="master") version("master", branch="master")
version("0.30.0", sha256="28b892b242e0cc044ad987d6bdc12811fe4a478d5096d6bc5989038ee9d9dab6")
version("0.29.0", sha256="dc0bf3ddd3635df9935ac569b3085de387150c4f8e9851897078bb12d123dde8") version("0.29.0", sha256="dc0bf3ddd3635df9935ac569b3085de387150c4f8e9851897078bb12d123dde8")
version("0.28.0", sha256="aa980b0fb49fc3ff9c7e32b5927b3700c4660aefbf96567bac1f8c9c93bb7831") version("0.28.0", sha256="aa980b0fb49fc3ff9c7e32b5927b3700c4660aefbf96567bac1f8c9c93bb7831")
version("0.26.0", sha256="b22689f576d064bf0cd8f435621e912359fc2ee9347350eab845d2d36ebb62eb") version("0.26.0", sha256="b22689f576d064bf0cd8f435621e912359fc2ee9347350eab845d2d36ebb62eb")
@ -49,14 +50,7 @@ class PyPicmistandard(PythonPackage):
deprecated=True, deprecated=True,
) )
depends_on("python@3.6:", type=("build", "run")) depends_on("python@3.8:", type=("build", "run"))
depends_on("py-numpy@1.15:", type=("build", "run")) depends_on("py-numpy@1.15:1", type=("build", "run"))
depends_on("py-scipy@1.5:", type=("build", "run")) depends_on("py-scipy@1.5:1", type=("build", "run"))
depends_on("py-setuptools", type="build") 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 "./"

View File

@ -16,7 +16,7 @@ class Warpx(CMakePackage, PythonExtension):
""" """
homepage = "https://ecp-warpx.github.io" 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" git = "https://github.com/ECP-WarpX/WarpX.git"
maintainers("ax3l", "dpgrote", "EZoni", "RemiLehe") maintainers("ax3l", "dpgrote", "EZoni", "RemiLehe")
@ -26,7 +26,12 @@ class Warpx(CMakePackage, PythonExtension):
# NOTE: if you update the versions here, also see py-warpx # NOTE: if you update the versions here, also see py-warpx
version("develop", branch="development") version("develop", branch="development")
version("24.08", sha256="8da1f2967f613a65a295260260aa4f081ac1d1b7c1d6987d294e02b86099df08") version("24.10", sha256="1fe3a86bf820a2ecef853cdcd9427fba4e0cb1efb05326da7dc9dbf94551202f")
version(
"24.08",
sha256="8da1f2967f613a65a295260260aa4f081ac1d1b7c1d6987d294e02b86099df08",
deprecated=True,
)
version( version(
"23.08", "23.08",
sha256="67695ff04b83d1823ea621c19488e54ebaf268532b0e5eb4ea8ad293d7ab3ddc", sha256="67695ff04b83d1823ea621c19488e54ebaf268532b0e5eb4ea8ad293d7ab3ddc",
@ -177,6 +182,12 @@ class Warpx(CMakePackage, PythonExtension):
variant("app", default=True, description="Build the WarpX executable application") variant("app", default=True, description="Build the WarpX executable application")
variant("ascent", default=False, description="Enable Ascent in situ visualization") 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("sensei", default=False, description="Enable SENSEI in situ visualization")
variant( variant(
"compute", "compute",
@ -201,7 +212,8 @@ class Warpx(CMakePackage, PythonExtension):
description="Number of spatial dimensions", description="Number of spatial dimensions",
when="@23.06:", 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 # Spack defaults to False but pybind11 defaults to True (and IPO is highly
# encouraged to be used) # encouraged to be used)
variant( variant(
@ -233,7 +245,7 @@ class Warpx(CMakePackage, PythonExtension):
depends_on("cxx", type="build") depends_on("cxx", type="build")
for v in ["24.08", "develop"]: for v in ["24.10", "24.08", "develop"]:
depends_on( depends_on(
f"amrex@{v} build_system=cmake +linear_solvers +pic +particles +shared +tiny_profile", f"amrex@{v} build_system=cmake +linear_solvers +pic +particles +shared +tiny_profile",
when=f"@{v}", 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("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("boost@1.66.0: +math", when="+qedtablegen")
depends_on("cmake@3.15.0:", type="build") depends_on("cmake@3.15.0:", type="build")
depends_on("cmake@3.18.0:", type="build", when="@22.01:") 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.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"): with when("dims=1"):
depends_on("amrex dimensions=1") depends_on("amrex dimensions=1")
with when("dims=2"): 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-mpi4py@2.1.0:", type=("build", "run"), when="+mpi")
depends_on("py-periodictable@1.5:1", type=("build", "run")) 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.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-pip@23:", type="build")
depends_on("py-setuptools@42:", type="build") depends_on("py-setuptools@42:", type="build")
depends_on("py-pybind11@2.12.0:", type=("build", "link")) depends_on("py-pybind11@2.12.0:", type=("build", "link"))
@ -373,6 +393,7 @@ def cmake_args(self):
# variants # variants
self.define_from_variant("WarpX_APP", "app"), self.define_from_variant("WarpX_APP", "app"),
self.define_from_variant("WarpX_ASCENT", "ascent"), self.define_from_variant("WarpX_ASCENT", "ascent"),
self.define_from_variant("WarpX_CATALYST", "catalyst"),
self.define_from_variant("WarpX_SENSEI", "sensei"), self.define_from_variant("WarpX_SENSEI", "sensei"),
"-DWarpX_COMPUTE={0}".format(spec.variants["compute"].value.upper()), "-DWarpX_COMPUTE={0}".format(spec.variants["compute"].value.upper()),
"-DWarpX_DIMS={0}".format(";".join(spec.variants["dims"].value).upper()), "-DWarpX_DIMS={0}".format(";".join(spec.variants["dims"].value).upper()),
@ -466,9 +487,17 @@ def _get_input_options(self, dim, post_install):
install_test_root(self) if post_install else self.stage.source_path, install_test_root(self) if post_install else self.stage.source_path,
self.examples_src_dir, self.examples_src_dir,
) )
inputs_nD = {"1": "inputs_1d", "2": "inputs_2d", "3": "inputs_3d", "rz": "inputs_rz"} if spec.satisfies("@:24.09"):
if spec.satisfies("@:21.12"): inputs_nD = {"1": "inputs_1d", "2": "inputs_2d", "3": "inputs_3d", "rz": "inputs_rz"}
inputs_nD["rz"] = "inputs_2d_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]) inputs = join_path(examples_dir, inputs_nD[dim])
cli_args = [inputs, "max_step=50", "diag1.intervals=10"] cli_args = [inputs, "max_step=50", "diag1.intervals=10"]