FEniCS Project
The FEniCS Project is a collection of free and open-source software components with the common goal to enable automated solution of differential equations. The components provide scientific computing tools for working with computational meshes,
finite-element variational formulations of ordinary and partial differential equations, and numerical linear algebra.
Design and components
The FEniCS Project is designed as an umbrella project for a collection of interoperable components. The core components are- UFL, a domain-specific language embedded in Python for specifying finite element discretizations of differential equations in terms of finite element variational forms;
- FIAT, the finite element backend of FEniCS, a Python module for generation of arbitrary order finite element basis functions on simplices;
- FFC, a compiler for finite element variational forms taking UFL code as input and generating UFC output;
- UFC, a C++ interface consisting of low-level functions for evaluating and assembling finite element variational forms;
- Instant, a Python module for inlining C and C++ code in Python;
- DOLFIN, a C++/Python library providing data structures and algorithms for finite element meshes, automated finite element assembly, and numerical linear algebra.
As of May 2022, DOLFINx is the recommended user-interface of the FEniCS project.
History
The FEniCS Project was initiated in 2003 as a research collaboration between the University of Chicago and Chalmers University of Technology. The following institutions are currently, or have been, actively involved in the development of the project- Argonne National Laboratory
- Chalmers University of Technology
- Charles University
- Delft University of Technology
- Royal Institute of Technology
- Simula Research Laboratory
- University of Cambridge
- University of Chicago
- University of Luxembourg
[|DOLFINx]
Since 2019, the core components of the FEniCS project have received a major refactoring. resulting in . DOLFINx supports many new features not available in the old DOLFIN interface, including:- Arbitrary degree finite elements on interval, triangle, quadrilateral, tetrahedral and hexahedral cells, including unstructured meshes without special ordering;
- Meshes with flat or curved cells;
- Custom partitioning of cells across multiple processes;
- Parallel IO via Gmsh, VTK,, and ;
- Assembly and solvers using different floating point scalar types, including complex types;
- Assembly of custom element kernels written using Numba;
- Interpolation of functions into arbitrary function spaces;
- Interpolation between function spaces built on different meshes, including meshes using non-affine geometry;
- Ability to non-intrusively support different linear algebra backends, e.g., NumPy, PETSc, Trilinos, and Eigen;
- User-defined finite elements.