From 3f4398dd6707bdd6090c2e733f8bad85bb978120 Mon Sep 17 00:00:00 2001 From: Matthew Archer <36638242+ma595@users.noreply.github.com> Date: Thu, 19 May 2022 19:22:09 +0100 Subject: fenicsx: update to v0.4 (#30661) * Fix for xtensor-xsimd * Add sha256 for all new releases * renamed ufcx package * Update sha for ffcx * fixed hashes and modified fenics-dolfinx to depend on ufcx * cleaned and fixed dependency types * use spec.satisfies in cmake_args * bumped to ufcx@0.4.1 * address PR comments * fix hashes * update parmetis in cmake_args to reflect default setting * update versions * renamed ufcx package * fixed hashes and modified fenics-dolfinx to depend on ufcx * cleaned and fixed dependency types * use spec.satisfies in cmake_args * bumped to ufcx@0.4.1 * address PR comments * fix hashes * update parmetis in cmake_args to reflect default setting * update versions * Add dependency fix * bump basix to 0.4.2 and address PR comments * Versioning fixes * Use xtensor-0.24: and loosen pybind11 * Add conflicts for partitioners * Updates on partitioners * use define_from_variant * Tidy up some dependencies * Work on multi-variants for graph partitioners * Fix KaHIP issue. KaHIP changed the name of its library from 'interface' to 'kahip'. Pin earlier versions of DOLFINx to earlier verisons of KaHIP for proper detection. Co-authored-by: Chris Richardson Co-authored-by: Garth N. Wells --- .../repos/builtin/packages/fenics-basix/package.py | 3 +- .../builtin/packages/fenics-dolfinx/package.py | 80 +++++++++++++++------- .../repos/builtin/packages/fenics-ufcx/package.py | 23 +++++++ .../builtin/packages/py-fenics-basix/package.py | 2 + .../builtin/packages/py-fenics-dolfinx/package.py | 17 +++-- .../builtin/packages/py-fenics-ffcx/package.py | 3 + .../builtin/packages/py-fenics-ufl/package.py | 3 +- var/spack/repos/builtin/packages/ufcx/package.py | 22 ------ 8 files changed, 98 insertions(+), 55 deletions(-) create mode 100644 var/spack/repos/builtin/packages/fenics-ufcx/package.py delete mode 100644 var/spack/repos/builtin/packages/ufcx/package.py (limited to 'var') diff --git a/var/spack/repos/builtin/packages/fenics-basix/package.py b/var/spack/repos/builtin/packages/fenics-basix/package.py index fc323ee188..78ca708655 100644 --- a/var/spack/repos/builtin/packages/fenics-basix/package.py +++ b/var/spack/repos/builtin/packages/fenics-basix/package.py @@ -15,6 +15,7 @@ class FenicsBasix(CMakePackage): maintainers = ["mscroggs", "chrisrichardson", "garth-wells"] version("main", branch="main") + version("0.4.2", sha256="a54f5e442b7cbf3dbb6319c682f9161272557bd7f42e2b8b8ccef88bc1b7a22f") version("0.3.0", sha256="9b148fd2a5485c94011fc6ca977ebdef0e51782a62b3654fc044f35b60e2bd07") version("0.2.0", sha256="e1ec537737adb283717060221635092474e3f2b5b5ba79dfac74aa496bec2fcb") version("0.1.0", sha256="2ab41fe6ad4f6c42f01b17a6e7c39debb4e0ae61c334d1caebee78b741bca4e7") @@ -27,6 +28,6 @@ class FenicsBasix(CMakePackage): @property def root_cmakelists_dir(self): - if self.spec.satisfies("@main"): + if self.spec.satisfies("@0.4.0:"): return "cpp" return self.stage.source_path diff --git a/var/spack/repos/builtin/packages/fenics-dolfinx/package.py b/var/spack/repos/builtin/packages/fenics-dolfinx/package.py index 5e3deb6780..6987e0a689 100644 --- a/var/spack/repos/builtin/packages/fenics-dolfinx/package.py +++ b/var/spack/repos/builtin/packages/fenics-dolfinx/package.py @@ -15,13 +15,34 @@ class FenicsDolfinx(CMakePackage): maintainers = ["chrisrichardson", "garth-wells", "nate-sime"] version("main", branch="main") + version("0.4.1", sha256="68dcf29a26c750fcea5e02d8d58411e3b054313c3bf6fcbc1d0f08dd2851117f") version("0.3.0", sha256="4857d0fcb44a4e9bf9eb298ba5377abdee17a7ad0327448bdd06cce73d109bed") version("0.2.0", sha256="4c9b5a5c7ef33882c99299c9b4d98469fb7aa470a37a91bc5be3bb2fc5b863a4") version("0.1.0", sha256="0269379769b5b6d4d1864ded64402ecaea08054c2a5793c8685ea15a59af5e33") - variant("kahip", default=False, description="kahip support") - variant("parmetis", default=False, description="parmetis support") - variant("slepc", default=False, description="slepc support") + # Graph partitioner variants + variant('partitioners', + description='Graph partioning', + default=('parmetis',), + values=('kahip', 'parmetis', 'scotch'), + multi=True, + when='@0.4.0:') + variant("kahip", default=False, when="@0.1.0:0.3.0", description="kahip support") + variant("parmetis", default=False, when="@0.1.0:0.3.0", + description="parmetis support") + + # Graph partitioner dependencies for @0.4.0: + depends_on('kahip@3.12:', when="partitioners=kahip @main") + depends_on('kahip@3.11', when="partitioners=kahip @:0.4.1") + depends_on('parmetis', when="partitioners=parmetis") + depends_on('scotch+mpi', when="partitioners=scotch") + + # Graph partitioner dependencies for "@0.1.0:0.3.0" + depends_on('kahip', when="+kahip") + depends_on('parmetis', when="+parmetis") + depends_on('scotch+mpi', when="@0.1.0:0.3.0") + + variant("slepc", default=True, description="slepc support") variant("adios2", default=False, description="adios2 support") depends_on("cmake@3.18:", type="build") @@ -32,25 +53,25 @@ class FenicsDolfinx(CMakePackage): depends_on("petsc+mpi+shared") depends_on("petsc+mpi+shared@3.15.0:", when="@0.1.0") - depends_on("scotch+mpi") - depends_on("xtensor@0.23.10:", type=("build", "link")) - depends_on("kahip", when="+kahip") - depends_on("parmetis", when="+parmetis") + depends_on("xtl@0.7.2:") + depends_on("xtensor@0.23.10:") + depends_on("slepc", when="+slepc") - depends_on("adios2", when="+adios2") + depends_on("adios2+mpi", when="+adios2") - depends_on("py-fenics-ffcx", type=("build", "run")) - depends_on("py-fenics-ffcx@main", type=("build", "run"), when="@main") + depends_on("fenics-ufcx@main", when="@main") + depends_on("fenics-ufcx@0.4.2", when="@0.4.1") depends_on("py-fenics-ffcx@0.3.0", type=("build", "run"), when="@0.3.0") depends_on("py-fenics-ffcx@0.2.0", type=("build", "run"), when="@0.2.0") depends_on("py-fenics-ffcx@0.1.0", type=("build", "run"), when="@0.1.0") - depends_on("fenics-basix", type=("build", "link")) - depends_on("fenics-basix@main", type=("build", "link"), when="@main") - depends_on("fenics-basix@0.3.0", type=("build", "link"), when="@0.3.0") - depends_on("fenics-basix@0.2.0", type=("build", "link"), when="@0.2.0") - depends_on("fenics-basix@0.1.0", type=("build", "link"), when="@0.1.0") + depends_on("fenics-basix") + depends_on("fenics-basix@main", when="@main") + depends_on("fenics-basix@0.4.2", when="@0.4.1") + depends_on("fenics-basix@0.3.0", when="@0.3.0") + depends_on("fenics-basix@0.2.0", when="@0.2.0") + depends_on("fenics-basix@0.1.0", when="@0.1.0") conflicts('%gcc@:8', msg='Improved C++17 support required') @@ -58,16 +79,23 @@ class FenicsDolfinx(CMakePackage): def cmake_args(self): args = [ - "-DDOLFINX_SKIP_BUILD_TESTS=True", - "-DDOLFINX_ENABLE_KAHIP=%s" % ( - 'ON' if "+kahip" in self.spec else 'OFF'), - "-DDOLFINX_ENABLE_PARMETIS=%s" % ( - 'ON' if "+parmetis" in self.spec else 'OFF'), - "-DDOLFINX_ENABLE_SLEPC=%s" % ( - 'ON' if "+slepc" in self.spec else 'OFF'), - "-DDOLFINX_ENABLE_ADIOS2=%s" % ( - 'ON' if "+adios2" in self.spec else 'OFF'), - "-DPython3_ROOT_DIR=%s" % self.spec['python'].home, - "-DPython3_FIND_STRATEGY=LOCATION", + self.define('DOLFINX_SKIP_BUILD_TESTS', True), + self.define_from_variant('DOLFINX_ENABLE_SLEPC', 'slepc'), + self.define_from_variant('DOLFINX_ENABLE_ADIOS2', 'adios2'), ] + + if self.spec.satisfies('@0.4.0:'): + args += [ + self.define('DOLFINX_ENABLE_KAHIP', 'partitioners=kahip' in self.spec), + self.define('DOLFINX_ENABLE_PARMETIS', + 'partitioners=parmetis' in self.spec), + self.define('DOLFINX_ENABLE_SCOTCH', 'partitioners=scotch' in self.spec) + ] + + if self.spec.satisfies('@:0.3.0'): + args.append(self.define_from_variant('DOLFINX_ENABLE_KAHIP', 'kahip')) + args.append(self.define_from_variant('DOLFINX_ENABLE_PARMETIS', 'parmetis')) + args.append(self.define('Python3_ROOT_DIR', self.spec['python'].home)) + args.append(self.define('Python3_FIND_STRATEGY', 'LOCATION')) + return args diff --git a/var/spack/repos/builtin/packages/fenics-ufcx/package.py b/var/spack/repos/builtin/packages/fenics-ufcx/package.py new file mode 100644 index 0000000000..c426ec5c39 --- /dev/null +++ b/var/spack/repos/builtin/packages/fenics-ufcx/package.py @@ -0,0 +1,23 @@ +# 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 import * + + +class FenicsUfcx(CMakePackage): + """FFCx provides the ufcx.h interface header for finite element kernels, + used by DOLFINx. ufcx.h can be installed from the FFCx repo without + making it dependent on Python. + """ + + homepage = 'https://github.com/FEniCS/ffcx' + git = 'https://github.com/FEniCS/ffcx.git' + url = 'https://github.com/FEniCS/ffcx/archive/v0.4.2.tar.gz' + maintainers = ['ma595'] + + version('main', branch='main') + version('0.4.2', sha256='3be6eef064d6ef907245db5b6cc15d4e603762e68b76e53e099935ca91ef1ee4') + + root_cmakelists_dir = 'cmake' diff --git a/var/spack/repos/builtin/packages/py-fenics-basix/package.py b/var/spack/repos/builtin/packages/py-fenics-basix/package.py index 8d1f178e3f..c58d8ae357 100644 --- a/var/spack/repos/builtin/packages/py-fenics-basix/package.py +++ b/var/spack/repos/builtin/packages/py-fenics-basix/package.py @@ -16,11 +16,13 @@ class PyFenicsBasix(PythonPackage): maintainers = ["chrisrichardson", "mscroggs", "garth-wells"] version("main", branch="main") + version("0.4.2", sha256="a54f5e442b7cbf3dbb6319c682f9161272557bd7f42e2b8b8ccef88bc1b7a22f") version("0.3.0", sha256="9b148fd2a5485c94011fc6ca977ebdef0e51782a62b3654fc044f35b60e2bd07") version("0.2.0", sha256="e1ec537737adb283717060221635092474e3f2b5b5ba79dfac74aa496bec2fcb") version("0.1.0", sha256="2ab41fe6ad4f6c42f01b17a6e7c39debb4e0ae61c334d1caebee78b741bca4e7") depends_on("fenics-basix@main", type=("build", "run"), when="@main") + depends_on("fenics-basix@0.4.2", type=("build", "run"), when="@0.4.2") depends_on("fenics-basix@0.3.0", type=("build", "run"), when="@0.3.0") depends_on("fenics-basix@0.2.0", type=("build", "run"), when="@0.2.0") depends_on("fenics-basix@0.1.0", type=("build", "run"), when="@0.1.0") diff --git a/var/spack/repos/builtin/packages/py-fenics-dolfinx/package.py b/var/spack/repos/builtin/packages/py-fenics-dolfinx/package.py index 62ab266244..b0b26a5b24 100644 --- a/var/spack/repos/builtin/packages/py-fenics-dolfinx/package.py +++ b/var/spack/repos/builtin/packages/py-fenics-dolfinx/package.py @@ -16,6 +16,7 @@ class PyFenicsDolfinx(PythonPackage): maintainers = ["chrisrichardson", "garth-wells", "nate-sime"] version("main", branch="main") + version("0.4.1", sha256="68dcf29a26c750fcea5e02d8d58411e3b054313c3bf6fcbc1d0f08dd2851117f") version("0.3.0", sha256="4857d0fcb44a4e9bf9eb298ba5377abdee17a7ad0327448bdd06cce73d109bed") version("0.2.0", sha256="4c9b5a5c7ef33882c99299c9b4d98469fb7aa470a37a91bc5be3bb2fc5b863a4") version("0.1.0", sha256="0269379769b5b6d4d1864ded64402ecaea08054c2a5793c8685ea15a59af5e33") @@ -25,27 +26,33 @@ class PyFenicsDolfinx(PythonPackage): depends_on("pkgconfig", type=("build", "run")) depends_on('python@3.7:', type=('build', 'run')) depends_on("py-setuptools", type="build") + depends_on("fenics-dolfinx@main", when="@main") + depends_on("fenics-dolfinx@0.4.1", when="@0.4.1") depends_on("fenics-dolfinx@0.3.0", when="@0.3.0") depends_on("fenics-dolfinx@0.2.0", when="@0.2.0") depends_on("fenics-dolfinx@0.1.0", when="@0.1.0") depends_on("fenics-basix@main", type=("build", "link"), when="@main") + depends_on("fenics-basix@0.4.2", type=("build", "link"), when="@0.4.1") depends_on("fenics-basix@0.3.0", type=("build", "link"), when="@0.3.0") depends_on("fenics-basix@0.2.0", type=("build", "link"), when="@0.2.0") depends_on("fenics-basix@0.1.0", type=("build", "link"), when="@0.1.0") - depends_on("py-numpy@:1.20.3", type=("build", "run")) - depends_on("py-mpi4py", type=("build", "run")) - depends_on("py-petsc4py", type=("build", "run")) - depends_on("py-pybind11@2.6.2:2.7", type=("build", "run")) - depends_on("xtensor@0.23.10:", type="build") depends_on("py-fenics-ffcx@main", type="run", when="@main") + depends_on("py-fenics-ffcx@0.4.2", type="run", when="@0.4.1") depends_on("py-fenics-ffcx@0.3.0", type="run", when="@0.3.0") depends_on("py-fenics-ffcx@0.2.0", type="run", when="@0.2.0") depends_on("py-fenics-ffcx@0.1.0", type="run", when="@0.1.0") depends_on("py-fenics-ufl@main", type="run", when="@main") + depends_on("py-fenics-ufl@2022.1.0", type="run", when="@0.4.1") depends_on("py-fenics-ufl@2021.1.0", type="run", when="@0.1:0.3.99") + depends_on("py-numpy@:1.20.3", type=("build", "run")) + depends_on("py-mpi4py", type=("build", "run")) + depends_on("py-petsc4py", type=("build", "run")) + depends_on("py-pybind11@2.6.2:", type=("build", "run")) + depends_on("xtensor@0.23.10:", type="build") + depends_on("py-cffi", type="run") depends_on("py-numpy", type="run") diff --git a/var/spack/repos/builtin/packages/py-fenics-ffcx/package.py b/var/spack/repos/builtin/packages/py-fenics-ffcx/package.py index 03d0c4311e..8f4cf3150c 100644 --- a/var/spack/repos/builtin/packages/py-fenics-ffcx/package.py +++ b/var/spack/repos/builtin/packages/py-fenics-ffcx/package.py @@ -15,6 +15,7 @@ class PyFenicsFfcx(PythonPackage): maintainers = ["chrisrichardson", "garth-wells"] version('main', branch='main') + version('0.4.2', sha256='3be6eef064d6ef907245db5b6cc15d4e603762e68b76e53e099935ca91ef1ee4') version('0.3.0', sha256='33fa1a0cc5762f360033c25a99ec9462be933f8ba413279e35cd2c3b5c3e6096') version('0.2.0', sha256='562a704163a6427e0341d267e69b8bf55d8f53d673829170b443191577e8d9b6') version('0.1.0', sha256='98a47906146ac892fb4a358e04cbfd04066f12d0a4cdb505a6b08ff0b1a17e89') @@ -27,9 +28,11 @@ class PyFenicsFfcx(PythonPackage): depends_on('py-cffi', type='run') depends_on('py-fenics-ufl@main', type='run', when='@main') + depends_on('py-fenics-ufl@2022.1.0', type='run', when='@0.4.2') depends_on('py-fenics-ufl@2021.1.0', type='run', when='@0.1.0:0.3') depends_on('py-fenics-basix@main', type='run', when='@main') + depends_on('py-fenics-basix@0.4.2', type='run', when='@0.4.2') depends_on('py-fenics-basix@0.3.0', type='run', when='@0.3.0') depends_on('py-fenics-basix@0.2.0', type='run', when='@0.2.0') depends_on('py-fenics-basix@0.1.0', type='run', when='@0.1.0') diff --git a/var/spack/repos/builtin/packages/py-fenics-ufl/package.py b/var/spack/repos/builtin/packages/py-fenics-ufl/package.py index 190d41bc47..fa86887ee9 100644 --- a/var/spack/repos/builtin/packages/py-fenics-ufl/package.py +++ b/var/spack/repos/builtin/packages/py-fenics-ufl/package.py @@ -16,9 +16,10 @@ class PyFenicsUfl(PythonPackage): homepage = "https://fenicsproject.org/" url = "https://github.com/FEniCS/ufl/archive/2019.1.0.tar.gz" git = "https://github.com/FEniCS/ufl.git" - maintainers = ["js947", "chrisrichardson", "garth-wells"] + maintainers = ["chrisrichardson", "garth-wells"] version("main", branch="main") + version('2022.1.0', sha256='48359903d47fb397900d105fe4a60b459c50bbf9d9da78beb9accb54e4e4acaf') version('2021.1.0', sha256='130fdc09bb7fcd39dcd2618426912b8a25a03431d94575711068b38c666b4337') version('2019.1.0', sha256='46ac0df4e96327be10b9576d2b8fa8b2c4ca62d3c681d407f5718b162d3ca22d') version('2018.1.0', sha256='b0d4c2f43f396fd5609317b70d55b53b89c649962fc8a593f4e0e21607da211d') diff --git a/var/spack/repos/builtin/packages/ufcx/package.py b/var/spack/repos/builtin/packages/ufcx/package.py deleted file mode 100644 index fa1b0e487f..0000000000 --- a/var/spack/repos/builtin/packages/ufcx/package.py +++ /dev/null @@ -1,22 +0,0 @@ -# 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 import * - - -class Ufcx(CMakePackage): - """FFCx provides the ufcx.h interface header for finite element kernels, - used by DOLFINx. ufcx.h can be installed from the FFCx repo without - making it dependent on Python. - """ - - homepage = 'https://github.com/FEniCS/ffcx' - git = 'https://github.com/FEniCS/ffcx.git' - url = 'https://github.com/FEniCS/ffcx/archive/refs/heads/main.zip' - maintainers = ['ma595'] - - version('main', branch='main') - - root_cmakelists_dir = 'cmake' -- cgit v1.2.3-60-g2f50