From 96f3c76052139ee420c7a2c758ef1ee3681928c4 Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Mon, 13 Nov 2023 11:29:55 -0700 Subject: 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 Co-authored-by: eugeneswalker --- var/spack/repos/builtin/packages/dealii/package.py | 130 +++++++++++++-------- 1 file 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) ) -- cgit v1.2.3-70-g09d2