From 2de0e3001609d7a556ec78721acb29c9dd723c3a Mon Sep 17 00:00:00 2001 From: Freifrau von Bleifrei Date: Mon, 18 Sep 2023 20:15:10 +0200 Subject: SeLaLib: add new package (#39847) --- .../repos/builtin/packages/selalib/package.py | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 var/spack/repos/builtin/packages/selalib/package.py (limited to 'var') diff --git a/var/spack/repos/builtin/packages/selalib/package.py b/var/spack/repos/builtin/packages/selalib/package.py new file mode 100644 index 0000000000..23b56afc21 --- /dev/null +++ b/var/spack/repos/builtin/packages/selalib/package.py @@ -0,0 +1,72 @@ +# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * + + +class Selalib(CMakePackage): + """SeLaLib is a modular library for the kinetic and gyrokinetic simulation + of tokamak plasmas by the semi-lagrangian or particle-in-cell methods""" + + homepage = "https://selalib.github.io/selalib" + url = "https://github.com/selalib/selalib" + git = "https://github.com/selalib/selalib" + + maintainers("pnavaro", "freifrauvonbleifrei") + + version("main", branch="main") + + variant("fmempool", default=False, description="Use memory pool") + variant("mpi", default=True, description="Build with MPI support") + variant("openmp", default=True, description="Build with OpenMP support") + variant("compression", default=False, description="Add compression by ZFP") + + requires( + "%gcc@9.0.0:", + "%clang@16.0.0:", + "%intel@18.0:", + "%oneapi@18.0:", + policy="one_of", + msg="SeLaLib requires new-enough Fortran compiler", + ) + + depends_on("cmake@3.6.0:", type=("build")) + depends_on("blas") + depends_on("fftw") + depends_on("fftw+openmp", when="+openmp") + depends_on("fgsl") + depends_on("git", type=("build", "run", "test")) + depends_on("hdf5+fortran+cxx") + with when("+mpi"): + depends_on("mpi") + depends_on("fftw+mpi") + depends_on("hdf5+mpi") + depends_on("python@3.0.0:", type=("build")) + # beware: compiling w/ zfp may throw type mismatch errors + depends_on("zfp+fortran", when="+compression") + + def cmake_args(self): + args = [ + self.define_from_variant("OPENMP_ENABLED", "openmp"), + self.define_from_variant("HDF5_PARALLEL_ENABLED", "mpi"), + self.define_from_variant("USE_FMEMPOOL", "fmempool"), + self.define("FFTW_ENABLED", "ON"), + ] + return args + + def setup_build_environment(self, env): + env.set("FFTW_INCLUDE", self.spec["fftw"].prefix.include) + env.set("FFTW_ROOT", self.spec["fftw"].prefix) + + @run_after("build") + @on_package_attributes(run_tests=True) + def quick_serial_ctest(self): + """quickly run a serial subset of tests for sanity check""" + ctest = which("ctest") + with working_dir(self.build_directory): + ctest("--output-on-failure", "-R", "test_mud2") + ctest("--output-on-failure", "-R", "sparse_grid_4d") + ctest("--output-on-failure", "-R", "scalar_field_2d") + ctest("--output-on-failure", "-R", "maxwell_3d_fem_fft") -- cgit v1.2.3-70-g09d2