summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Arndt <arndtd@ornl.gov>2023-11-13 11:29:55 -0700
committerGitHub <noreply@github.com>2023-11-13 12:29:55 -0600
commit96f3c76052139ee420c7a2c758ef1ee3681928c4 (patch)
tree8c91b93106246f5bde3280b84594f4aa69281458
parent9c74eda61f2b2848d6b24e8ce7d142746a6ee300 (diff)
downloadspack-96f3c76052139ee420c7a2c758ef1ee3681928c4.tar.gz
spack-96f3c76052139ee420c7a2c758ef1ee3681928c4.tar.bz2
spack-96f3c76052139ee420c7a2c758ef1ee3681928c4.tar.xz
spack-96f3c76052139ee420c7a2c758ef1ee3681928c4.zip
dealii: add v9.5.0, v9.5.1 (#40747)
* dealii: 9.5.0 * kokkos+cuda_lambda * dealii ^kokkos@3.7: require +cuda +cuda_lambda +wrapper * Added 9.5.1, try ~cgal when +cuda * Forward Cuda architecture request * Remove workaround * Try not enforcing the Kokkos compiler * Enforce using nvcc_wrapper with Trilinos+Cuda * Don't define CMAKE_*_COMPILER to point to MPI wrappers * Use the same compiler as Trilinos/Kokkos * Only check for Trilinos compiler * Disable Trilinos+Cuda * Disable Cuda support * Try CUDA build without ninja * Combined examples and examples_compile * Use f-string for cuda_arch * p -> _package * Indentation * Fix up f-string --------- Co-authored-by: Luca Heltai <luca.heltai@sissa.it> Co-authored-by: eugeneswalker <eugenesunsetwalker@gmail.com>
-rw-r--r--var/spack/repos/builtin/packages/dealii/package.py130
1 files changed, 84 insertions, 46 deletions
diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py
index df6f514134..1e9b3acb19 100644
--- a/var/spack/repos/builtin/packages/dealii/package.py
+++ b/var/spack/repos/builtin/packages/dealii/package.py
@@ -23,9 +23,13 @@ class Dealii(CMakePackage, CudaPackage):
# only add for immediate deps.
transitive_rpaths = False
- generator("ninja")
+ # FIXME nvcc_wrapper (used for +clang) doesn't handle response files
+ # correctly when ninja is used. Those are used automatically if paths get too long.
+ generator("make")
version("master", branch="master")
+ version("9.5.1", sha256="a818b535e6488d3aef7853311657c7b4fadc29a9abe91b7b202b131aad630f5e")
+ version("9.5.0", sha256="a81f41565f0d3a22d491ee687957dd48053225da72e8d6d628d210358f4a0464")
version("9.4.2", sha256="45a76cb400bfcff25cc2d9093d9a5c91545c8367985e6798811c5e9d2a6a6fd4")
version("9.4.1", sha256="bfe5e4bf069159f93feb0f78529498bfee3da35baf5a9c6852aa59d7ea7c7a48")
version("9.4.0", sha256="238677006cd9173658e5b69cdd1861f800556982db6005a3cc5eb8329cc1e36c")
@@ -70,10 +74,11 @@ class Dealii(CMakePackage, CudaPackage):
values=("default", "11", "14", "17"),
)
variant("doc", default=False, description="Compile with documentation")
- variant("examples", default=True, description="Compile tutorial programs")
+ variant("examples", default=True, description="Compile and install tutorial programs")
variant("int64", default=False, description="Compile with 64 bit indices support")
variant("mpi", default=True, description="Compile with MPI")
variant("optflags", default=False, description="Compile using additional optimization flags")
+ variant("platform-introspection", default=True, description="Enable platform introspection")
variant("python", default=False, description="Compile with Python bindings")
# Package variants
@@ -81,11 +86,12 @@ class Dealii(CMakePackage, CudaPackage):
variant("arborx", default=True, description="Compile with Arborx support")
variant("arpack", default=True, description="Compile with Arpack and PArpack (only with MPI)")
variant("adol-c", default=True, description="Compile with ADOL-C")
- variant("cgal", default=True, when="@9.4:", description="Compile with CGAL")
+ variant("cgal", default=True, when="@9.4:~cuda", description="Compile with CGAL")
variant("ginkgo", default=True, description="Compile with Ginkgo")
variant("gmsh", default=True, description="Compile with GMSH")
variant("gsl", default=True, description="Compile with GSL")
variant("hdf5", default=True, description="Compile with HDF5 (only with MPI)")
+ variant("kokkos", default=True, when="@9.5:", description="Compile with Kokkos")
variant("metis", default=True, description="Compile with Metis")
variant("muparser", default=True, description="Compile with muParser")
variant("nanoflann", default=False, description="Compile with Nanoflann")
@@ -98,14 +104,15 @@ class Dealii(CMakePackage, CudaPackage):
variant("slepc", default=True, description="Compile with Slepc (only with Petsc and MPI)")
variant("symengine", default=True, description="Compile with SymEngine")
variant("simplex", default=True, description="Compile with Simplex support")
- # TODO @9.3: enable by default, when we know what to do
- # variant('taskflow', default=False,
- # description='Compile with multi-threading via Taskflow')
- # TODO @9.3: disable by default
- # (NB: only if tbb is removed in 9.3, as planned!!!)
+ variant(
+ "taskflow",
+ default=True,
+ when="@9.6:",
+ description="Compile with multi-threading via Taskflow",
+ )
variant("threads", default=True, description="Compile with multi-threading via TBB")
variant("trilinos", default=True, description="Compile with Trilinos (only with MPI)")
- variant("platform-introspection", default=True, description="Enable platform introspection")
+ variant("vtk", default=True, when="@9.6:", description="Compile with VTK")
# Required dependencies: Light version
depends_on("blas")
@@ -179,6 +186,8 @@ class Dealii(CMakePackage, CudaPackage):
# TODO: next line fixes concretization with petsc
depends_on("hdf5+mpi+hl+fortran", when="+hdf5+mpi+petsc")
depends_on("hdf5+mpi+hl", when="+hdf5+mpi~petsc")
+ depends_on("kokkos@3.7:", when="@9.5:+kokkos~trilinos")
+ depends_on("kokkos@3.7:+cuda+cuda_lambda+wrapper", when="@9.5:+kokkos~trilinos+cuda")
# TODO: concretizer bug. The two lines mimic what comes from PETSc
# but we should not need it
depends_on("metis@5:+int64", when="+metis+int64")
@@ -198,7 +207,7 @@ class Dealii(CMakePackage, CudaPackage):
depends_on("sundials@:3~pthread", when="@9.0:9.2+sundials")
depends_on("sundials@5:5.8", when="@9.3:9.3.3+sundials")
depends_on("sundials@5:", when="@9.3.4:+sundials")
- # depends_on('taskflow', when='@9.3:+taskflow')
+ depends_on("taskflow", when="@9.6:+taskflow")
depends_on("trilinos gotype=int", when="+trilinos@12.18.1:")
# TODO: next line fixes concretization with trilinos and adol-c
depends_on("trilinos~exodus", when="@9.0:+adol-c+trilinos")
@@ -222,12 +231,11 @@ class Dealii(CMakePackage, CudaPackage):
# do not require +rol to make concretization of xsdk possible
depends_on("trilinos+amesos+aztec+epetra+ifpack+ml+muelu+sacado", when="+trilinos")
depends_on("trilinos~hypre", when="+trilinos+int64")
- # TODO: temporary disable Tpetra when using CUDA due to
- # namespace "Kokkos::Impl" has no member "cuda_abort"
- depends_on(
- "trilinos@master+rol~amesos2~ifpack2~intrepid2~kokkos~tpetra~zoltan2",
- when="+trilinos+cuda",
- )
+ for _arch in CudaPackage.cuda_arch_values:
+ arch_str = f"+cuda cuda_arch={_arch}"
+ trilinos_spec = f"trilinos +wrapper {arch_str}"
+ depends_on(trilinos_spec, when=f"@9.5:+trilinos {arch_str}")
+ depends_on("vtk", when="@9.6:+vtk")
# Explicitly provide a destructor in BlockVector,
# otherwise deal.II may fail to build with Intel compilers.
@@ -296,44 +304,60 @@ class Dealii(CMakePackage, CudaPackage):
msg="CGAL requires the C++ standard to be set explicitly to 17 or later.",
)
+ conflicts(
+ "cxxstd=14",
+ when="@9.6:",
+ msg="Deal.II 9.6 onwards requires the C++ standard to be set to 17 or later.",
+ )
+
# Interfaces added in 8.5.0:
- for p in ["gsl", "python"]:
+ for _package in ["gsl", "python"]:
conflicts(
- "+{0}".format(p),
+ "+{0}".format(_package),
when="@:8.4.2",
msg="The interface to {0} is supported from version 8.5.0 "
"onwards. Please explicitly disable this variant "
- "via ~{0}".format(p),
+ "via ~{0}".format(_package),
)
# Interfaces added in 9.0.0:
- for p in ["assimp", "gmsh", "nanoflann", "scalapack", "sundials", "adol-c"]:
+ for _package in ["assimp", "gmsh", "nanoflann", "scalapack", "sundials", "adol-c"]:
conflicts(
- "+{0}".format(p),
+ "+{0}".format(_package),
when="@:8.5.1",
msg="The interface to {0} is supported from version 9.0.0 "
"onwards. Please explicitly disable this variant "
- "via ~{0}".format(p),
+ "via ~{0}".format(_package),
)
# interfaces added in 9.1.0:
- for p in ["ginkgo", "symengine"]:
+ for _package in ["ginkgo", "symengine"]:
conflicts(
- "+{0}".format(p),
+ "+{0}".format(_package),
when="@:9.0",
msg="The interface to {0} is supported from version 9.1.0 "
"onwards. Please explicitly disable this variant "
- "via ~{0}".format(p),
+ "via ~{0}".format(_package),
)
# interfaces added in 9.3.0:
- for p in ["simplex", "arborx"]: # , 'taskflow']:
+ for _package in ["simplex", "arborx"]:
conflicts(
- "+{0}".format(p),
+ "+{0}".format(_package),
when="@:9.2",
msg="The interface to {0} is supported from version 9.3.0 "
"onwards. Please explicitly disable this variant "
- "via ~{0}".format(p),
+ "via ~{0}".format(_package),
+ )
+
+ # interfaces added after 9.5.0:
+ for _package in ["vtk", "taskflow"]:
+ conflicts(
+ "+{0}".format(_package),
+ when="@:9.5",
+ msg="The interface to {0} is supported from version 9.6.0 "
+ "onwards. Please explicitly disable this variant "
+ "via ~{0}".format(_package),
)
# Interfaces removed in 9.3.0:
@@ -346,18 +370,29 @@ class Dealii(CMakePackage, CudaPackage):
# Check that the combination of variants makes sense
# 64-bit BLAS:
- for p in ["openblas", "intel-mkl", "intel-parallel-studio+mkl"]:
+ for _package in ["openblas", "intel-mkl", "intel-parallel-studio+mkl"]:
conflicts(
- "^{0}+ilp64".format(p), when="@:8.5.1", msg="64bit BLAS is only supported from 9.0.0"
+ "^{0}+ilp64".format(_package),
+ when="@:8.5.1",
+ msg="64bit BLAS is only supported from 9.0.0",
)
# MPI requirements:
- for p in ["arpack", "hdf5", "netcdf", "p4est", "petsc", "scalapack", "slepc", "trilinos"]:
+ for _package in [
+ "arpack",
+ "hdf5",
+ "netcdf",
+ "p4est",
+ "petsc",
+ "scalapack",
+ "slepc",
+ "trilinos",
+ ]:
conflicts(
- "+{0}".format(p),
+ "+{0}".format(_package),
when="~mpi",
msg="To enable {0} it is necessary to build deal.II with "
- "MPI support enabled.".format(p),
+ "MPI support enabled.".format(_package),
)
# Optional dependencies:
@@ -432,6 +467,7 @@ class Dealii(CMakePackage, CudaPackage):
# Examples / tutorial programs
options.append(self.define_from_variant("DEAL_II_COMPONENT_EXAMPLES", "examples"))
+ options.append(self.define_from_variant("DEAL_II_COMPILE_EXAMPLES", "examples"))
# Enforce the specified C++ standard
if spec.variants["cxxstd"].value != "default":
@@ -478,9 +514,6 @@ class Dealii(CMakePackage, CudaPackage):
if "+mpi" in spec:
options.extend(
[
- self.define("CMAKE_C_COMPILER", spec["mpi"].mpicc),
- self.define("CMAKE_CXX_COMPILER", spec["mpi"].mpicxx),
- self.define("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc),
self.define("MPI_C_COMPILER", spec["mpi"].mpicc),
self.define("MPI_CXX_COMPILER", spec["mpi"].mpicxx),
self.define("MPI_Fortran_COMPILER", spec["mpi"].mpifc),
@@ -499,6 +532,9 @@ class Dealii(CMakePackage, CudaPackage):
self.define("CUDA_HOST_COMPILER", spec["mpi"].mpicxx),
]
)
+ # Make sure we use the same compiler that Trilinos uses
+ if "+trilinos" in spec:
+ options.extend([self.define("CMAKE_CXX_COMPILER", spec["trilinos"].kokkos_cxx)])
# Python bindings
if spec.satisfies("@8.5.0:"):
@@ -542,23 +578,25 @@ class Dealii(CMakePackage, CudaPackage):
# Optional dependencies for which library names are the same as CMake
# variables:
for library in (
+ "arborx",
+ "assimp",
+ "cgal",
+ "ginkgo",
+ "gmsh",
"gsl",
"hdf5",
+ "metis",
+ "muparser",
+ "nanoflann",
"p4est",
"petsc",
"slepc",
- "trilinos",
- "metis",
"sundials",
- "nanoflann",
- "assimp",
- "gmsh",
- "muparser",
"symengine",
- "ginkgo",
- "arborx",
- "cgal",
- ): # 'taskflow'):
+ "taskflow",
+ "trilinos",
+ "vtk",
+ ):
options.append(
self.define_from_variant("DEAL_II_WITH_{0}".format(library.upper()), library)
)