Peano
Loading...
Searching...
No Matches
package.py
Go to the documentation of this file.
1# Copyright Spack Project Developers. See COPYRIGHT file for details.
2#
3# SPDX-License-Identifier: (Apache-2.0 OR MIT)
4
5import os
6
7from spack.package import *
8
9
10class Exahype2(CMakePackage, CudaPackage):
11 """ExaHyPE 2 - ExaHyPE is an open source simulation engine to solve
12 hyperbolic PDE systems. It is built on top of dynamically
13 adaptive Cartesian meshes and offers support for Finite Volume,
14 Runge-Kutta Discontinuous Galerkin and ADER-DG discretisations.
15 ExaHyPE is written in a way that most computer science aspects
16 as well as most of the numerics are hidden away from the user:
17 Users plug in user functions for their PDE formulation
18 (such as flux functions and eigenvalues) into the engine and
19 then delegate all further work to ExaHyPE.
20 """
21
22 homepage = "www.peano-framework.org"
23 url = "https://gitlab.lrz.de/hpcsoftware/Peano"
24 git = "https://gitlab.lrz.de/hpcsoftware/Peano.git"
25
26 maintainers("hpcsoftware")
27
28 version("muc", branch="muc/exahype")
29
30 variant("multithreading", default=True, description="Build with multithreading (OpenMP) support")
31 variant("mpi", default=True, description="Build with Message Passing Interface (MPI) support")
32 variant("hdf5", default=True, description="Build with HDF5 support")
33 variant("netcdf", default=True, description="Build with NetCDF support")
34
35 depends_on("python")
36 depends_on("py-pip")
37
38 depends_on('gsl@2.8')
39 depends_on('libxsmm@1.17 +generator')
40 depends_on('easi@1.6.1 jit=lua')
41
42 depends_on("mpi", when="+mpi")
43
44 depends_on("hdf5@1.14.6 -fortran -java +threadsafe ~mpi +shared +cxx +hl", when="~mpi +hdf5")
45 depends_on("hdf5@1.14.6 -fortran -java +threadsafe +mpi +shared +cxx +hl", when="+mpi +hdf5")
46
47 depends_on("netcdf-c@4.9.2 +shared ~mpi", when="~mpi +netcdf")
48 depends_on("netcdf-c@4.9.2 +shared +mpi", when="+mpi +netcdf")
49 depends_on("netcdf-cxx4@4.3.1 +shared +pic", when="+netcdf")
50
51 depends_on("cuda@11:", when="+cuda")
52
53 conflicts(
54 "cuda_arch=none",
55 when="+cuda",
56 msg="A value for cuda_arch must be specified. Add cuda_arch=XX",
57 )
58
59 variant(
60 "gpu_backend",
61 default="cuda",
62 description="GPU accelerator backend",
63 values=("sycl", "cuda", "kokkos"),
64 when="+cuda",
65 )
66
67
68 def cmake_args(self):
69 args = [
70 "-DENABLE_EXAHYPE=ON",
71 "-DENABLE_TOOLBOX_LOADBALANCING=ON",
72 "-DENABLE_TOOLBOX_BLOCKSTRUCTURED=ON",
73 "-DENABLE_TOOLBOX_PARTICLES=ON",
74 "-DENABLE_TOOLBOX_CURVI=ON",
75 "-DWITH_EASI=ON",
76 "-DWITH_LIBXSMM=OFF",
77 self.define_from_variant("WITH_MULTITHREADING", "multithreading"),
78 self.define_from_variant("WITH_MPI", "mpi"),
79 self.define_from_variant("WITH_HDF5", "hdf5"),
80 self.define_from_variant("WITH_NETCDF", "netcdf"),
81 ]
82
83 if self.spec.satisfies("+cuda"):
84 cuda_arch = self.spec.variants["cuda_arch"].value[0]
85 gpu_backend = self.spec.variants["gpu_backend"].value
86 args.append(f"-DWITH_GPU={gpu_backend}")
87 args.append(f"-DWITH_GPU_ARCH=sm_{cuda_arch}")
88
89 return args
90
91
92 def install(self, spec, prefix):
93 super(Exahype2, self).install(spec, prefix)
94
95 python_exe = Executable(spec['python'].command.path)
96
97 requirements_path = join_path(self.stage.source_path, 'requirements.txt')
98 if os.path.exists(requirements_path):
99 python_exe('-m', 'pip', 'install', '--prefix=' + prefix, '-r', requirements_path)
100
101
102 def setup_run_environment(self, env):
103 env.set("PEANO_SRC_ROOT_DIR", self.spec.prefix)
104 env.set("PEANO_CMAKE_BUILD_DIR", self.spec.prefix)
105 env.prepend_path("PYTHONPATH", self.spec.prefix + "/python")
106 env.prepend_path("PYTHONPATH", join_path(self.spec.prefix, "lib", "python" + str(self.spec["python"].version.up_to(2)), "site-packages"))
ExaHyPE 2 - ExaHyPE is an open source simulation engine to solve hyperbolic PDE systems.
Definition package.py:10
setup_run_environment(self, env)
Definition package.py:102
cmake_args(self)
Definition package.py:68
install(self, spec, prefix)
Definition package.py:92