The FEniCS core libraries have undergone a major redevelopment to bring new functionality, improved performance and better underpinning software engineering. The FEniCS Project is now approximately 15 years old, and over that time our understanding has developed and the available tools have changed significantly. It became clear that to position FEniCS at the leading edge that a major reorganisation was required. The following requirements were identified:
- Compact, modular core designed to be extensible and to support custom additions
- Reduced public interface that could be kept more stable
- Proper namespacing
- Follow established standards and conventions wherever possible (design, packaging, testing, etc)
- Properly separated C++ and Python interfaces
- Simplified software engineering
- Distributed memory parallel design throughout
- Improved documentation
- Faster just-in-time compilation
- Support for modern Python JIT tools, e.g. numba
- Simple implementation of fast user ‘kernels’ from Python
- Provide just one way to perform an operation wherever possible
Also, development is shifting to Github, which provides a better environment for development and for user contributions.
New core functionality
- Block systems [completed]
- Complex number support [completed]
- Higher order geometry (quadratic and higher) in parallel [completed]
- Support for user-defined tabulation kernels (element matrices and vectors) [completed]
- Support for user-defined dofmaps [completed]
- Complete support for quadrilateral and hexahedral elements [completed]
- Simpler interface for meshes created by (py)gmsh [completed]
- Efficient field (coefficient) evaluation in Python [completed]
- Mixed geometry meshes (e.g. quads/triangles hex/prism/pyramid/tet)
Functionality no longer supported in core package
Multiple linear algebra backends via a common interface
Interfacing all linear algebra backends via a common interface introduced considerable complexity and provided limited flexibility. The new design works with raw data arrays for vectors and functional approach for matrix assembly. This allows users to inject the backend of their choice..
Time integration with the multistage module of dolfin may be re-implemented as an add-on.
Multi-mesh or cut-cell methods will not form part of the core package, but may be re-implemented as an add-on.
Adaptive solvers and adaptive meshing may be re-implemented as an add-on.
VTK format (PVD) and XDMF will continue to be supported. SVG, XML, X3D, and RAW will no longer be supported.
Development is taking place on GitHub under the dolfinx and ffcx repositories. The current versions of dolfinx and ffcx are described as ‘experimental’, however, they are largely functional (although some features are still awaiting reimplementation). The UFL, FIAT and dijitso projects are relatively stable, and have been kept on Bitbucket at present. However, it is likely that they will move to GitHub in the next year.
We have released a maintenance release of the current stable FEniCS Project, with the release number 2019.1.0. There may be another update as 2019.2.0. The first “alpha” release of dolfinx, ffcx and basix took place in May 2021.
Future of current stable FEniCS packages
We know that a number of users and developers are wondering about the future of the current stable FEniCS packages. Overall, the current stable FEniCS branches will see much less development and less maintenance in the future.
Going forward, we
- encourage new (and old) developers to engage with the FEniCS-X development;
- encourage users and developers to discuss potential features/bug fixes on the FEniCS Slack Channel before making a pull request to stable FEniCS packages.
- will maintain the build system and continuous integration of the stable FEniCS components
- will accept high quality pull requests and bug fixes into the stable FEniCS components, but on a less regular basis
- may release later (after 2019.1.0) versions of the stable FEniCS packages but on a less regular basis.