summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorpsakievich <psakiev@sandia.gov>2024-04-04 12:54:20 -0600
committerGitHub <noreply@github.com>2024-04-04 12:54:20 -0600
commit6942c7f35ba77034c81eb044bf3e544d36a80c78 (patch)
treeec86c387babb4f3efcf0a2d6470b540360567a2c /var
parent18f0ac0f9475a041f4b5289e40c887e2dbf5a5bb (diff)
downloadspack-6942c7f35ba77034c81eb044bf3e544d36a80c78.tar.gz
spack-6942c7f35ba77034c81eb044bf3e544d36a80c78.tar.bz2
spack-6942c7f35ba77034c81eb044bf3e544d36a80c78.tar.xz
spack-6942c7f35ba77034c81eb044bf3e544d36a80c78.zip
Update exawind packages (#40793)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/amr-wind/package.py33
-rw-r--r--var/spack/repos/builtin/packages/exawind/package.py88
-rw-r--r--var/spack/repos/builtin/packages/hypre/package.py4
-rw-r--r--var/spack/repos/builtin/packages/nalu-wind/package.py76
-rw-r--r--var/spack/repos/builtin/packages/openfast/hub_seg_fault.patch17
-rw-r--r--var/spack/repos/builtin/packages/openfast/package.py1
-rw-r--r--var/spack/repos/builtin/packages/tioga/package.py1
7 files changed, 197 insertions, 23 deletions
diff --git a/var/spack/repos/builtin/packages/amr-wind/package.py b/var/spack/repos/builtin/packages/amr-wind/package.py
index cdd0167946..75a900cab9 100644
--- a/var/spack/repos/builtin/packages/amr-wind/package.py
+++ b/var/spack/repos/builtin/packages/amr-wind/package.py
@@ -20,6 +20,7 @@ class AmrWind(CMakePackage, CudaPackage, ROCmPackage):
license("BSD-3-Clause")
version("main", branch="main", submodules=True)
+ version("0.9.0", tag="v0.9.0", submodules=True)
variant("hypre", default=True, description="Enable Hypre integration")
variant("ascent", default=False, description="Enable Ascent integration")
@@ -31,9 +32,22 @@ class AmrWind(CMakePackage, CudaPackage, ROCmPackage):
variant("shared", default=True, description="Build shared libraries")
variant("tests", default=True, description="Activate regression tests")
variant("tiny_profile", default=False, description="Activate tiny profile")
+ variant("hdf5", default=False, description="Enable HDF5 plots with ZFP compression")
+ variant("umpire", default=False, description="Enable Umpire")
+ variant("sycl", default=False, description="Enable SYCL backend")
+ variant("gpu-aware-mpi", default=False, description="gpu-aware-mpi")
depends_on("hypre~int64@2.20.0:", when="+hypre")
depends_on("hypre+mpi", when="+hypre+mpi")
+ depends_on("hdf5~mpi", when="+hdf5~mpi")
+ depends_on("hdf5+mpi", when="+hdf5+mpi")
+ depends_on("h5z-zfp", when="+hdf5")
+ depends_on("zfp", when="+hdf5")
+ depends_on("hypre+umpire", when="+umpire")
+ depends_on("hypre+sycl", when="+sycl")
+ depends_on("hypre+gpu-aware-mpi", when="+gpu-aware-mpi")
+ depends_on("hypre@2.29.0:", when="@0.9.0:+hypre")
+
for arch in CudaPackage.cuda_arch_values:
depends_on("hypre+cuda cuda_arch=%s" % arch, when="+cuda+hypre cuda_arch=%s" % arch)
for arch in ROCmPackage.amdgpu_targets:
@@ -88,6 +102,13 @@ class AmrWind(CMakePackage, CudaPackage, ROCmPackage):
if "+mpi" in self.spec:
args.append(define("MPI_HOME", self.spec["mpi"].prefix))
+ if "+hdf5" in self.spec:
+ cmake_options.append(self.define("AMR_WIND_ENABLE_HDF5", True))
+ cmake_options.append(self.define("AMR_WIND_ENABLE_HDF5_ZFP", True))
+ # Help AMReX understand if HDF5 is parallel or not.
+ # Building HDF5 with CMake as Spack does, causes this inspection to break.
+ cmake_options.append(self.define("HDF5_IS_PARALLEL", spec.satisfies("+mpi")))
+
if "+cuda" in self.spec:
amrex_arch = [
"{0:.1f}".format(float(i) / 10.0) for i in self.spec.variants["cuda_arch"].value
@@ -100,4 +121,16 @@ class AmrWind(CMakePackage, CudaPackage, ROCmPackage):
targets = self.spec.variants["amdgpu_target"].value
args.append("-DAMReX_AMD_ARCH=" + ";".join(str(x) for x in targets))
+ if "+sycl" in self.spec:
+ cmake_options.append(self.define("AMR_WIND_ENABLE_SYCL", True))
+ requires(
+ "%dpcpp",
+ "%oneapi",
+ policy="one_of",
+ msg=(
+ "AMReX's SYCL GPU Backend requires DPC++ (dpcpp) "
+ "or the oneAPI CXX (icpx) compiler."
+ ),
+ )
+
return args
diff --git a/var/spack/repos/builtin/packages/exawind/package.py b/var/spack/repos/builtin/packages/exawind/package.py
index b7ba5e378d..8ea3720414 100644
--- a/var/spack/repos/builtin/packages/exawind/package.py
+++ b/var/spack/repos/builtin/packages/exawind/package.py
@@ -6,37 +6,93 @@
from spack.package import *
-class Exawind(CMakePackage):
+class Exawind(CMakePackage, CudaPackage, ROCmPackage):
"""Multi-application driver for Exawind project."""
homepage = "https://github.com/Exawind/exawind-driver"
git = "https://github.com/Exawind/exawind-driver.git"
- maintainers("jrood-nrel", "psakievich")
+ maintainers("jrood-nrel")
tags = ["ecp", "ecp-apps"]
+ # Testing is currently always enabled, but should be optional in the future
+ # to avoid cloning the mesh submodule
+ version("master", branch="main", submodules=True)
+ version("1.0.0", tag="v1.0.0", submodules=True)
license("Apache-2.0")
- version("master", branch="main")
+ variant("openfast", default=False, description="Enable OpenFAST integration")
+ variant("hypre", default=True, description="Enable hypre solver")
+ variant("stk_simd", default=False, description="Enable SIMD in STK")
+ variant("umpire", default=False, description="Enable Umpire")
+ variant("tiny_profile", default=False, description="Turn on AMR-wind with tiny profile")
+ variant("sycl", default=False, description="Enable SYCL backend for AMR-Wind")
+ variant("gpu-aware-mpi", default=False, description="gpu-aware-mpi")
- depends_on("trilinos+stk")
- depends_on("tioga+shared~nodegid")
- depends_on("nalu-wind+hypre+openfast+tioga+wind-utils")
- depends_on("amr-wind+hypre+mpi+netcdf+openfast")
- depends_on("openfast+cxx+shared@2.6.0:")
+ conflicts("amr-wind+hypre", when="+sycl")
+
+ for arch in CudaPackage.cuda_arch_values:
+ depends_on("amr-wind+cuda cuda_arch=%s" % arch, when="+cuda cuda_arch=%s" % arch)
+ depends_on("nalu-wind+cuda cuda_arch=%s" % arch, when="+cuda cuda_arch=%s" % arch)
+
+ for arch in ROCmPackage.amdgpu_targets:
+ depends_on("amr-wind+rocm amdgpu_target=%s" % arch, when="+rocm amdgpu_target=%s" % arch)
+ depends_on("nalu-wind+rocm amdgpu_target=%s" % arch, when="+rocm amdgpu_target=%s" % arch)
+
+ depends_on("nalu-wind+tioga")
+ depends_on("amr-wind+netcdf+mpi")
+ depends_on("tioga~nodegid")
depends_on("yaml-cpp@0.6:")
+ depends_on("nalu-wind+openfast", when="+openfast")
+ depends_on("amr-wind+hypre", when="+hypre~sycl")
+ depends_on("amr-wind~hypre", when="~hypre")
+ depends_on("nalu-wind+hypre", when="+hypre")
+ depends_on("nalu-wind~hypre", when="~hypre")
+ depends_on("amr-wind+sycl", when="+sycl")
+ depends_on("nalu-wind+umpire", when="+umpire")
+ depends_on("amr-wind+umpire", when="+umpire")
+ depends_on("amr-wind+tiny_profile", when="+tiny_profile")
+ depends_on("nalu-wind+gpu-aware-mpi", when="+gpu-aware-mpi")
+ depends_on("amr-wind+gpu-aware-mpi", when="+gpu-aware-mpi")
+ depends_on("nalu-wind@2.0.0:", when="@1.0.0:")
+ depends_on("amr-wind@0.9.0:", when="@1.0.0:")
+ depends_on("tioga@1.0.0:", when="@1.0.0:")
def cmake_args(self):
spec = self.spec
- args = [
- self.define("Trilinos_DIR", spec["trilinos"].prefix),
- self.define("TIOGA_DIR", spec["tioga"].prefix),
- self.define("Nalu-Wind_DIR", spec["nalu-wind"].prefix),
- self.define("AMR-Wind_DIR", spec["amr-wind"].prefix),
- self.define("OpenFAST_DIR", spec["openfast"].prefix),
- self.define("YAML-CPP_DIR", spec["yaml-cpp"].prefix),
- ]
+ args = [self.define("MPI_HOME", spec["mpi"].prefix)]
+
+ if "+umpire" in self.spec:
+ args.append(self.define_from_variant("EXAWIND_ENABLE_UMPIRE", "umpire"))
+ args.append(self.define("UMPIRE_DIR", self.spec["umpire"].prefix))
+
+ if spec.satisfies("+cuda"):
+ args.append(self.define("EXAWIND_ENABLE_CUDA", True))
+ args.append(self.define("CUDAToolkit_ROOT", self.spec["cuda"].prefix))
+ args.append(self.define("EXAWIND_CUDA_ARCH", self.spec.variants["cuda_arch"].value))
+
+ if spec.satisfies("+rocm"):
+ targets = self.spec.variants["amdgpu_target"].value
+ args.append(self.define("EXAWIND_ENABLE_ROCM", True))
+ args.append(self.define("CMAKE_CXX_COMPILER", self.spec["hip"].hipcc))
+ args.append(self.define("CMAKE_HIP_ARCHITECTURES", ";".join(str(x) for x in targets)))
+ args.append(self.define("AMDGPU_TARGETS", ";".join(str(x) for x in targets)))
+ args.append(self.define("GPU_TARGETS", ";".join(str(x) for x in targets)))
+
+ if spec.satisfies("^amr-wind+hdf5"):
+ args.append(self.define("H5Z_ZFP_USE_STATIC_LIBS", True))
+
+ if spec.satisfies("^amr-wind+ascent"):
+ args.append(self.define("CMAKE_EXE_LINKER_FLAGS", self.compiler.openmp_flag))
return args
+
+ def setup_build_environment(self, env):
+ if "~stk_simd" in self.spec:
+ env.append_flags("CXXFLAGS", "-DUSE_STK_SIMD_NONE")
+ if "+rocm" in self.spec:
+ env.set("OMPI_CXX", self.spec["hip"].hipcc)
+ env.set("MPICH_CXX", self.spec["hip"].hipcc)
+ env.set("MPICXX_CXX", self.spec["hip"].hipcc)
diff --git a/var/spack/repos/builtin/packages/hypre/package.py b/var/spack/repos/builtin/packages/hypre/package.py
index f61cba9cc0..658259a2b5 100644
--- a/var/spack/repos/builtin/packages/hypre/package.py
+++ b/var/spack/repos/builtin/packages/hypre/package.py
@@ -72,6 +72,7 @@ class Hypre(AutotoolsPackage, CudaPackage, ROCmPackage):
variant("int64", default=False, description="Use 64bit integers")
variant("mixedint", default=False, description="Use 64bit integers while reducing memory use")
variant("complex", default=False, description="Use complex values")
+ variant("gpu-aware-mpi", default=False, description="Use gpu-aware mpi")
variant("mpi", default=True, description="Enable MPI support")
variant("openmp", default=False, description="Enable OpenMP support")
variant("debug", default=False, description="Build debug instead of optimized version")
@@ -300,6 +301,9 @@ class Hypre(AutotoolsPackage, CudaPackage, ROCmPackage):
configure_args.append("--with-magma-lib=%s" % spec["magma"].libs)
configure_args.append("--with-magma")
+ if "+gpu-aware-mpi" in spec:
+ options.append("--enable-gpu-aware-mpi")
+
configure_args.extend(self.enable_or_disable("fortran"))
return configure_args
diff --git a/var/spack/repos/builtin/packages/nalu-wind/package.py b/var/spack/repos/builtin/packages/nalu-wind/package.py
index 7d77c431d1..ba0d96e564 100644
--- a/var/spack/repos/builtin/packages/nalu-wind/package.py
+++ b/var/spack/repos/builtin/packages/nalu-wind/package.py
@@ -15,7 +15,7 @@ def _parse_float(val):
return False
-class NaluWind(CMakePackage, CudaPackage):
+class NaluWind(CMakePackage, CudaPackage, ROCmPackage):
"""Nalu-Wind: Wind energy focused variant of Nalu."""
homepage = "https://nalu-wind.readthedocs.io"
@@ -26,6 +26,7 @@ class NaluWind(CMakePackage, CudaPackage):
tags = ["ecp", "ecp-apps"]
version("master", branch="master")
+ version("2.0.0", tag="v2.0.0")
variant("pic", default=True, description="Position independent code")
variant(
@@ -45,12 +46,31 @@ class NaluWind(CMakePackage, CudaPackage):
variant("hypre", default=True, description="Compile with Hypre support")
variant("trilinos-solvers", default=True, description="Compile with Trilinos Solvers support")
variant("catalyst", default=False, description="Compile with Catalyst support")
+ variant("shared", default=True, description="Build shared libraries")
variant("fftw", default=False, description="Compile with FFTW support")
+ variant("fsi", default=False, description="Enable fluid-structure-interaction models")
variant("boost", default=False, description="Enable Boost integration")
+ variant("gpu-aware-mpi", default=False, description="gpu-aware-mpi")
variant("wind-utils", default=False, description="Build wind-utils")
+ variant("umpire", default=False, description="Enable Umpire")
+ conflicts(
+ "+shared",
+ when="+cuda",
+ msg="invalid device functions are generated with shared libs and cuda",
+ )
+ conflicts(
+ "+shared",
+ when="+rocm",
+ msg="invalid device functions are generated with shared libs and rocm",
+ )
+ conflicts("+cuda", when="+rocm")
+ conflicts("+rocm", when="+cuda")
depends_on("mpi")
depends_on("yaml-cpp@0.5.3:")
+ depends_on("openfast@4.0.0:+cxx+netcdf", when="+fsi")
+ depends_on("trilinos@13.4.1+exodus+zoltan+stk", when="@=2.0.0")
+ depends_on("hypre@2.29.0:", when="@2.0.0:+hypre")
depends_on(
"trilinos@13:+exodus+tpetra+zoltan+stk~superlu-dist~superlu+hdf5+shards~hypre+gtest"
)
@@ -76,12 +96,42 @@ class NaluWind(CMakePackage, CudaPackage):
"hypre@develop +mpi+cuda~int64~superlu-dist cuda_arch={0}".format(_arch),
when="+hypre+cuda cuda_arch={0}".format(_arch),
)
+ for _arch in ROCmPackage.amdgpu_targets:
+ depends_on(
+ "trilinos@13.4.0.2022.10.27: "
+ "~shared+exodus+tpetra+zoltan+stk~superlu-dist~superlu"
+ "+hdf5+shards~hypre+gtest+rocm amdgpu_target={0}".format(_arch),
+ when="+rocm amdgpu_target={0}".format(_arch),
+ )
+ depends_on(
+ "hypre+rocm amdgpu_target={0}".format(_arch),
+ when="+hypre+rocm amdgpu_target={0}".format(_arch),
+ )
+
depends_on("trilinos-catalyst-ioss-adapter", when="+catalyst")
depends_on("fftw+mpi", when="+fftw")
depends_on("nccmp")
# indirect dependency needed to make original concretizer work
depends_on("netcdf-c+parallel-netcdf")
depends_on("boost +filesystem +iostreams cxxstd=14", when="+boost")
+ supported_cxxstd = ["17"]
+ variant(
+ "cxxstd", default="17", values=supported_cxxstd, multi=False, description="cxx standard"
+ )
+ for std in supported_cxxstd:
+ depends_on("trilinos cxxstd=%s" % std, when="cxxstd=%s" % std)
+
+ def setup_build_environment(self, env):
+ if "~stk_simd" in self.spec:
+ env.append_flags("CXXFLAGS", "-DUSE_STK_SIMD_NONE")
+ if "+cuda" in self.spec:
+ env.set("CUDA_LAUNCH_BLOCKING", "1")
+ env.set("CUDA_MANAGED_FORCE_DEVICE_ALLOC", "1")
+ env.set("OMPI_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx)
+ env.set("MPICH_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx)
+ env.set("MPICXX_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx)
+ if "+rocm" in self.spec:
+ env.append_flags("CXXFLAGS", "-fgpu-rdc")
def cmake_args(self):
spec = self.spec
@@ -95,22 +145,26 @@ class NaluWind(CMakePackage, CudaPackage):
self.define_from_variant("ENABLE_CUDA", "cuda"),
self.define_from_variant("ENABLE_WIND_UTILS", "wind-utils"),
self.define_from_variant("ENABLE_BOOST", "boost"),
+ self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"),
+ self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
+ self.define_from_variant("ENABLE_OPENFAST", "openfast"),
+ self.define_from_variant("ENABLE_TIOGA", "tioga"),
+ self.define_from_variant("ENABLE_HYPRE", "hypre"),
+ self.define_from_variant("ENABLE_TRILINOS_SOLVERS", "trilinos-solvers"),
+ self.define_from_variant("ENABLE_PARAVIEW_CATALYST", "catalyst"),
+ self.define_from_variant("ENABLE_FFTW", "fftw"),
+ self.define_from_variant("ENABLE_UMPIRE", "umpire"),
]
- args.append(self.define_from_variant("ENABLE_OPENFAST", "openfast"))
if "+openfast" in spec:
args.append(self.define("OpenFAST_DIR", spec["openfast"].prefix))
- args.append(self.define_from_variant("ENABLE_TIOGA", "tioga"))
if "+tioga" in spec:
args.append(self.define("TIOGA_DIR", spec["tioga"].prefix))
- args.append(self.define_from_variant("ENABLE_HYPRE", "hypre"))
if "+hypre" in spec:
args.append(self.define("HYPRE_DIR", spec["hypre"].prefix))
- args.append(self.define_from_variant("ENABLE_TRILINOS_SOLVERS", "trilinos-solvers"))
- args.append(self.define_from_variant("ENABLE_PARAVIEW_CATALYST", "catalyst"))
if "+catalyst" in spec:
args.append(
self.define(
@@ -118,7 +172,6 @@ class NaluWind(CMakePackage, CudaPackage):
)
)
- args.append(self.define_from_variant("ENABLE_FFTW", "fftw"))
if "+fftw" in spec:
args.append(self.define("FFTW_DIR", spec["fftw"].prefix))
@@ -131,6 +184,15 @@ class NaluWind(CMakePackage, CudaPackage):
]
)
+ if "+umpire" in spec:
+ args.append(self.define("UMPIRE_DIR", spec["umpire"].prefix))
+
+ if "+rocm" in spec:
+ args.append(self.define("CMAKE_CXX_COMPILER", spec["hip"].hipcc))
+ args.append(self.define("ENABLE_ROCM", True))
+ targets = spec.variants["amdgpu_target"].value
+ args.append(self.define("GPU_TARGETS", ";".join(str(x) for x in targets)))
+
if "darwin" in spec.architecture:
args.append(self.define("CMAKE_MACOSX_RPATH", "ON"))
diff --git a/var/spack/repos/builtin/packages/openfast/hub_seg_fault.patch b/var/spack/repos/builtin/packages/openfast/hub_seg_fault.patch
new file mode 100644
index 0000000000..a312f04b8d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfast/hub_seg_fault.patch
@@ -0,0 +1,17 @@
+diff --git a/modules/openfast-library/src/FAST_Solver.f90 b/modules/openfast-library/src/FAST_Solver.f90
+index 364d0b78..10056965 100644
+--- a/modules/openfast-library/src/FAST_Solver.f90
++++ b/modules/openfast-library/src/FAST_Solver.f90
+@@ -607,9 +607,9 @@ SUBROUTINE AD_InputSolve_IfW( p_FAST, u_AD, y_IfW, y_OpFM, ErrStat, ErrMsg )
+ end if
+
+ if (u_AD%rotors(1)%NacelleMotion%NNodes > 0) then
+- u_AD%rotors(1)%InflowOnNacelle(1) = y_OpFM%u(node)
+- u_AD%rotors(1)%InflowOnNacelle(2) = y_OpFM%v(node)
+- u_AD%rotors(1)%InflowOnNacelle(3) = y_OpFM%w(node)
++ u_AD%rotors(1)%InflowOnNacelle(1) = y_OpFM%u(1)
++ u_AD%rotors(1)%InflowOnNacelle(2) = y_OpFM%v(1)
++ u_AD%rotors(1)%InflowOnNacelle(3) = y_OpFM%w(1)
+ node = node + 1
+ else
+ u_AD%rotors(1)%InflowOnNacelle = 0.0_ReKi
diff --git a/var/spack/repos/builtin/packages/openfast/package.py b/var/spack/repos/builtin/packages/openfast/package.py
index d00f560c60..b11038fc70 100644
--- a/var/spack/repos/builtin/packages/openfast/package.py
+++ b/var/spack/repos/builtin/packages/openfast/package.py
@@ -13,6 +13,7 @@ class Openfast(CMakePackage):
git = "https://github.com/OpenFAST/openfast.git"
maintainers("jrood-nrel")
+ patch("hub_seg_fault.patch", when="@2.7:3.2")
license("Apache-2.0")
diff --git a/var/spack/repos/builtin/packages/tioga/package.py b/var/spack/repos/builtin/packages/tioga/package.py
index 8a453c39f9..6fdf41d141 100644
--- a/var/spack/repos/builtin/packages/tioga/package.py
+++ b/var/spack/repos/builtin/packages/tioga/package.py
@@ -20,6 +20,7 @@ class Tioga(CMakePackage):
# The original TIOGA repo has possibly been abandoned,
# so work on TIOGA has continued in the Exawind project
version("develop", git="https://github.com/Exawind/tioga.git", branch="exawind")
+ version("1.0.0", git="https://github.com/Exawind/tioga.git", tag="v1.0.0")
version("master", branch="master")
variant("shared", default=sys.platform != "darwin", description="Build shared libraries")