FEniCS: update of packages to support 2019.1.0 (#21207)

This commit is contained in:
emai-imcs 2021-03-05 15:27:35 +01:00 committed by GitHub
parent 3b1b51e90d
commit 71dd8ed265
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 168 additions and 114 deletions

View File

@ -0,0 +1,36 @@
From 3d3916e01f22c20eb4aa80d1ed784402a17422f6 Mon Sep 17 00:00:00 2001
Date: Thu, 10 Sep 2020 23:16:31 +0200
Subject: [PATCH] fixed compilation errors by adding the algorithm header
---
dolfin/geometry/IntersectionConstruction.cpp | 1 +
dolfin/mesh/MeshFunction.h | 1 +
2 files changed, 2 insertions(+)
diff --git a/dolfin/geometry/IntersectionConstruction.cpp b/dolfin/geometry/IntersectionConstruction.cpp
index 765dbb674..fe72ee5f6 100644
--- a/dolfin/geometry/IntersectionConstruction.cpp
+++ b/dolfin/geometry/IntersectionConstruction.cpp
@@ -18,6 +18,7 @@
// First added: 2014-02-03
// Last changed: 2017-12-12
+#include <algorithm> // fix compiling problem with min_element
#include <iomanip>
#include <dolfin/mesh/MeshEntity.h>
#include "predicates.h"
diff --git a/dolfin/mesh/MeshFunction.h b/dolfin/mesh/MeshFunction.h
index 08cbc824f..6d4a22f6e 100644
--- a/dolfin/mesh/MeshFunction.h
+++ b/dolfin/mesh/MeshFunction.h
@@ -26,6 +26,7 @@
#include <map>
#include <vector>
+#include <algorithm> // EM: fix for compile error, line 652
#include <memory>
#include <unordered_set>
--
2.25.1

View File

@ -10,26 +10,43 @@ class Fenics(CMakePackage):
"""FEniCS is organized as a collection of interoperable components
that together form the FEniCS Project. These components include
the problem-solving environment DOLFIN, the form compiler FFC, the
finite element tabulator FIAT, the just-in-time compiler Instant,
the code generation interface UFC, the form language UFL and a
range of additional components."""
finite element tabulator FIAT, the just-in-time compiler Instant / Dijitso,
the code generation interface UFC, the form language UFL and a range of
additional components."""
homepage = "http://fenicsproject.org/"
url = "https://bitbucket.org/fenics-project/dolfin/downloads/dolfin-1.6.0.tar.gz"
base_url = "https://bitbucket.org/fenics-project/{pkg}/downloads/{pkg}-{version}.tar.gz"
git = "https://bitbucket.org/fenics-project/dolfin.git"
url = "https://bitbucket.org/fenics-project/dolfin/downloads/dolfin-2019.1.0.post0.tar.gz"
python_components = ['ufl', 'ffc', 'fiat', 'instant']
version('2019.1.0.post0', sha256='61abdcdb13684ba2a3ba4afb7ea6c7907aa0896a46439d3af7e8848483d4392f')
version('2018.1.0.post1', sha256='425cc49b90e0f5c2ebdd765ba9934b1ada97e2ac2710d982d6d267a5e2c5982d')
# Pre 2018.1.0 versions are deprecated due to expected compatibility issues
version('2017.2.0.post0',
sha256='d3c40cd8c1c882f517999c25ea4220adcd01dbb1d829406fce99b1fc40184c82',
deprecated=True)
version('2016.2.0',
sha256='c6760996660a476f77889e11e4a0bc117cc774be0eec777b02a7f01d9ce7f43d',
deprecated=True)
version('1.6.0',
sha256='67f66c39983a8c5a1ba3c0787fa9b9082778bc7227b25c7cad80dc1299e0a201',
deprecated=True)
dolfin_versions = ['2019.1.0', '2018.1.0', '2017.2.0', '2016.2.0', '1.6.0']
variant('python', default=True, description='Compile with Python interface')
variant('hdf5', default=True, description='Compile with HDF5')
variant('parmetis', default=True, description='Compile with ParMETIS')
variant('scotch', default=True, description='Compile with Scotch')
variant('petsc', default=True, description='Compile with PETSc')
variant('slepc', default=True, description='Compile with SLEPc')
variant('trilinos', default=True, description='Compile with Trilinos')
variant('petsc4py', default=True, description='Use PETSC4py')
variant('slepc4py', default=True, description='Use SLEPc4py')
variant('trilinos', default=False, description='Compile with Trilinos')
variant('suite-sparse', default=True,
description='Compile with SuiteSparse solvers')
variant('vtk', default=False, description='Compile with VTK')
variant('qt', default=False, description='Compile with QT')
variant('zlib', default=False, description='Compile with ZLIB')
variant('mpi', default=True,
description='Enables the distributed memory support')
variant('openmp', default=True,
@ -43,135 +60,105 @@ class Fenics(CMakePackage):
values=('Debug', 'Release', 'RelWithDebInfo',
'MinSizeRel', 'Developer'))
# not part of spack list for now
# variant('petsc4py', default=True, description='Uses PETSc4py')
# variant('slepc4py', default=True, description='Uses SLEPc4py')
# variant('pastix', default=True, description='Compile with Pastix')
# Conflics for PETSC4PY / SLEPC4PY
conflicts('+petsc4py', when='~python')
conflicts('+petsc4py', when='~petsc')
conflicts('+slepc4py', when='~python')
conflicts('+slepc4py', when='~slepc')
patch('petsc-3.7.patch', when='@1.6.1^petsc@3.7:')
patch('petsc-version-detection.patch', when='@:1.6.1')
patch('hdf5~cxx-detection.patch')
# Patches
# patch('petsc-3.7.patch', when='petsc@3.7:')
patch('petsc-version-detection.patch', when='@1.6.0')
patch('hdf5~cxx-detection.patch', when='@:1.6.0')
extends('python')
patch('header_fix.patch', when='@2019.1.0.post0')
patch('petsc_3_11.patch', when='@2018.1.0.post1')
# enable extension support for fenics package
extends('python', when='+python')
# fenics python package dependencies
for ver in dolfin_versions:
wver = '@' + ver
depends_on('py-fenics-fiat{0}'.format(wver), type=('build', 'run'), when=wver + '+python')
if(Version(ver) < Version('2018.1.0')):
depends_on('py-fenics-instant{0}'.format(wver), type=('build', 'run'), when=wver + '+python')
else:
depends_on('py-fenics-dijitso{0}'.format(wver), type=('build', 'run'), when=wver + '+python')
depends_on('py-fenics-ufl{0}'.format(wver), type=('build', 'run'), when=wver + '+python')
if ver in ['2019.1.0', '2017.2.0']:
wver = '@' + ver + '.post0'
depends_on('py-fenics-ffc{0}'.format(wver), type=('build', 'run'), when=wver + '+python')
# package dependencies
depends_on('python@3.5:', type=('build', 'run'), when='+python')
depends_on('eigen@3.2.0:')
depends_on('pkgconfig', type='build')
depends_on('zlib', when='+zlib')
for ver in dolfin_versions:
if Version(ver) == Version('2019.1.0'):
depends_on('boost+filesystem+program_options+system+iostreams+timer+regex+chrono')
else:
depends_on('boost+filesystem+program_options+system+iostreams+timer+regex+chrono@1.68.0')
depends_on('mpi', when='+mpi')
# FIXME: next line fixes concretization with petsc
depends_on('hdf5+hl+fortran', when='+hdf5+petsc')
depends_on('hdf5+hl', when='+hdf5~petsc')
depends_on('parmetis@4.0.2:', when='+parmetis')
depends_on('metis+real64', when='+parmetis')
depends_on('parmetis', when='+parmetis')
depends_on('scotch~metis', when='+scotch~mpi')
depends_on('scotch+mpi~metis', when='+scotch+mpi')
depends_on('petsc@3.4:', when='+petsc')
depends_on('slepc@3.4:', when='+slepc')
depends_on('petsc', when='+petsc')
depends_on('slepc', when='+slepc')
depends_on('py-petsc4py@3.6:', when='+petsc+python')
depends_on('trilinos', when='+trilinos')
depends_on('vtk', when='+vtk')
depends_on('suite-sparse', when='+suite-sparse')
depends_on('qt', when='+qt')
depends_on('py-ply', type=('build', 'run'))
depends_on('py-six', type=('build', 'run'))
depends_on('py-numpy', type=('build', 'run'))
depends_on('py-sympy', type=('build', 'run'))
depends_on('swig@3.0.3:', type=('build', 'run'))
depends_on('cmake@2.8.12:', type='build')
depends_on('py-pybind11@2.2.4', type=('build', 'run'))
depends_on('cmake@3.17.3:', type='build')
depends_on('py-setuptools', type='build')
depends_on('py-setuptools', type='build', when='+python')
depends_on('py-pkgconfig', type=('build', 'run'), when='+python')
depends_on('py-sphinx@1.0.1:', when='+doc', type='build')
releases = [
{
'version': '2016.1.0',
'sha256': '6228b4d641829a4cd32141bfcd217a1596a27d5969aa00ee64ebba2b1c0fb148',
'resources': {
'ffc': '52430ce4c7d57ce1b81eb5fb304992247c944bc6a6054c8b6f42bac81702578d',
'fiat': '851723126a71bc1ae2dc4ad6e9330bd9b54d52db390dcbbc1f3c759fb49c6aeb',
'instant': '7bf03c8a7b61fd1e432b8f3a0405410ae68892ebb1a62a9f8118e8846bbeb0c6',
'ufl': '8dccfe10d1251ba48a4d43a4c6c89abe076390223b500f4baf06f696294b8dd0',
}
},
{
'version': '1.6.0',
'sha256': '67eaac5fece6e71da0559b4ca8423156f9e99a952f0620adae449ebebb6695d1',
'resources': {
'ffc': '382e7713fe759694e5f07506b144eeead681e169e5a34c164ef3da30eddcc1c6',
'fiat': '858ea3e936ad3b3558b474ffccae8a7b9dddbaafeac77e307115b23753cb1cac',
'instant': '2347e0229531969095911fdb1de30bd77bdd7f81521ba84d81b1b4a564fc906c',
'ufl': 'c75c4781e5104504f158cb42cd87aceffa9052e8e9db6e9764e6a5b6115d7f73',
}
},
]
for release in releases:
version(release['version'], release['sha256'], url=base_url.format(
pkg='dolfin', version=release['version']))
for rname, sha256 in release['resources'].items():
resource(name=rname,
url=base_url.format(pkg=rname, **release),
sha256=sha256,
destination='depends',
when='@{version}'.format(**release),
placement=rname)
def cmake_is_on(self, option):
return 'ON' if option in self.spec else 'OFF'
def cmake_args(self):
return [
'-DDOLFIN_ENABLE_DOCS:BOOL={0}'.format(
self.cmake_is_on('+doc')),
'-DBUILD_SHARED_LIBS:BOOL={0}'.format(
self.cmake_is_on('+shared')),
'-DDOLFIN_SKIP_BUILD_TESTS:BOOL=ON',
'-DDOLFIN_ENABLE_OPENMP:BOOL={0}'.format(
self.cmake_is_on('+openmp')),
'-DDOLFIN_ENABLE_CHOLMOD:BOOL={0}'.format(
self.cmake_is_on('suite-sparse')),
'-DDOLFIN_ENABLE_HDF5:BOOL={0}'.format(
self.cmake_is_on('hdf5')),
'-DDOLFIN_ENABLE_MPI:BOOL={0}'.format(
self.cmake_is_on('mpi')),
'-DDOLFIN_ENABLE_PARMETIS:BOOL={0}'.format(
self.cmake_is_on('parmetis')),
'-DDOLFIN_ENABLE_PASTIX:BOOL={0}'.format(
self.cmake_is_on('pastix')),
'-DDOLFIN_ENABLE_PETSC:BOOL={0}'.format(
self.cmake_is_on('petsc')),
'-DDOLFIN_ENABLE_PETSC4PY:BOOL={0}'.format(
self.cmake_is_on('py-petsc4py')),
'-DDOLFIN_ENABLE_PYTHON:BOOL={0}'.format(
self.cmake_is_on('python')),
'-DDOLFIN_ENABLE_QT:BOOL={0}'.format(
self.cmake_is_on('qt')),
'-DDOLFIN_ENABLE_SCOTCH:BOOL={0}'.format(
self.cmake_is_on('scotch')),
'-DDOLFIN_ENABLE_SLEPC:BOOL={0}'.format(
self.cmake_is_on('slepc')),
'-DDOLFIN_ENABLE_SLEPC4PY:BOOL={0}'.format(
self.cmake_is_on('py-slepc4py')),
'-DDOLFIN_ENABLE_SPHINX:BOOL={0}'.format(
self.cmake_is_on('py-sphinx')),
'-DDOLFIN_ENABLE_TRILINOS:BOOL={0}'.format(
self.cmake_is_on('trilinos')),
'-DDOLFIN_ENABLE_UMFPACK:BOOL={0}'.format(
self.cmake_is_on('suite-sparse')),
'-DDOLFIN_ENABLE_VTK:BOOL={0}'.format(
self.cmake_is_on('vtk')),
'-DDOLFIN_ENABLE_ZLIB:BOOL={0}'.format(
self.cmake_is_on('zlib')),
self.define_from_variant('BUILD_SHARED_LIBS', 'shared'),
self.define('DOLFIN_SKIP_BUILD_TESTS', True),
self.define_from_variant('DOLFIN_ENABLE_OPENMP', 'openmp'),
self.define_from_variant('DOLFIN_ENABLE_CHOLMOD', 'suite-sparse'),
self.define_from_variant('DOLFIN_ENABLE_HDF5', 'hdf5'),
self.define_from_variant('DOLFIN_ENABLE_MPI', 'mpi'),
self.define_from_variant('DOLFIN_ENABLE_PARMETIS', 'parmetis'),
self.define_from_variant('DOLFIN_ENABLE_PETSC', 'petsc'),
self.define_from_variant('DOLFIN_ENABLE_PETSC4PY', 'petsc4py'),
self.define_from_variant('DOLFIN_ENABLE_PYTHON', 'python'),
self.define_from_variant('DOLFIN_ENABLE_QT', 'qt'),
self.define_from_variant('DOLFIN_ENABLE_SCOTCH', 'scotch'),
self.define_from_variant('DOLFIN_ENABLE_SLEPC', 'slepc'),
self.define_from_variant('DOLFIN_ENABLE_SLEPC4PY', 'slepc4py'),
self.define_from_variant('DOLFIN_ENABLE_DOCS', 'doc'),
self.define_from_variant('DOLFIN_ENABLE_SPHINX', 'doc'),
self.define_from_variant('DOLFIN_ENABLE_TRILINOS', 'trilinos'),
self.define_from_variant('DOLFIN_ENABLE_UMFPACK', 'suite-sparse'),
self.define_from_variant('DOLFIN_ENABLE_VTK', 'vtk'),
self.define_from_variant('DOLFIN_ENABLE_ZLIB', 'zlib'),
]
@run_after('build')
def build_python_components(self):
for package in self.python_components:
with working_dir(join_path('depends', package)):
setup_py('build')
# set environment for bulding python interface
def setup_build_environment(self, env):
env.set('DOLFIN_DIR', self.prefix)
def setup_run_environment(self, env):
env.set('DOLFIN_DIR', self.prefix)
# build python interface of dolfin
@run_after('install')
def install_python_components(self):
for package in self.python_components:
with working_dir(join_path('depends', package)):
setup_py('install', '--prefix={0}'.format(self.prefix))
def install_python_interface(self):
if '+python' in self.spec:
with working_dir('python'):
setup_py('install', '--single-version-externally-managed',
'--root=/', '--prefix={0}'.format(self.prefix))

View File

@ -0,0 +1,31 @@
diff --git a/dolfin/la/PETScOptions.h b/dolfin/la/PETScOptions.h
index 37e5054b3..5ae24e6f5 100644
--- a/dolfin/la/PETScOptions.h
+++ b/dolfin/la/PETScOptions.h
@@ -22,7 +22,7 @@
#include <string>
#include <boost/lexical_cast.hpp>
-#include <petscoptions.h>
+#include <petscsys.h>
#include <dolfin/common/SubSystemsManager.h>
#include <dolfin/log/log.h>
#include "PETScObject.h"
diff --git a/dolfin/nls/PETScSNESSolver.cpp b/dolfin/nls/PETScSNESSolver.cpp
index b3e1d62c5..43923ca7b 100644
--- a/dolfin/nls/PETScSNESSolver.cpp
+++ b/dolfin/nls/PETScSNESSolver.cpp
@@ -48,7 +48,10 @@ PETScSNESSolver::_methods
= { {"default", {"default SNES method", ""}},
{"newtonls", {"Line search method", SNESNEWTONLS}},
{"newtontr", {"Trust region method", SNESNEWTONTR}},
+#if PETSC_VERSION_LT(3,9,0)
+ // SNESTEST functionality removed in petsc 3.9
{"test", {"Tool to verify Jacobian approximation", SNESTEST}},
+#endif
{"ngmres", {"Nonlinear generalised minimum residual method",
SNESNGMRES}},
{"nrichardson", {"Richardson nonlinear method (Picard iteration)",
diff --git a/petsc_3_11.patch b/petsc_3_11.patch
new file mode 100644
index 000000000..e69de29bb