A discretization module providing an implementation of mathematical abstractions to solve PDEs on parallel computers including local grid adaptivity, dynamic load balancing, and higher order discretization schemes.
|Maintainer:||The dune-fem team
DUNE-FEM is a discretization module based on DUNE containing all the building blocks required to implement efficient solvers for a wide range of (systems of non linear) partial differential equations. DUNE-FEM can also be used through an extensive Python interface which brings all components of DUNE-FEM and the DUNE core modules to Python.
In addition to building DUNE-FEM from source there is also a fully functional Docker development environment available,
DUNE-FEM provides interfaces for:
- Discrete function spaces and functions
- Linear operators and inverse linear operators
- Methods for solving non-linear equations and time dependent problems
- MPI and multithread based parallelization
- Additional grid views e.g. for removing parts of the grid (filtering) or replacing geometry information
In addition DUNE-FEM provides many auxiliary classes for
- Flexible parameter input
- Data output including checkpointing
- Computation of eoc tables, timers for subroutines, and much more…
Efficient strategies for parallelization, adaptivity, and load balancing is a central aspect in the construction of DUNE-FEM. Both are handled by central classes and require very little input from the user. To increase efficiency we try to use caching as much as possible, e.g., for communication patterns in parallel computations and of base function sets in quadrature points on the reference elements. All this is done transparently from the user but can be turned off anywhere in the code.
To measure efficiency we have used a Discontinuous Galerkin method for the compressible Navier-Stokes equation to compute both parallel scale up and FLOP performance. The code showed a parallel efficiency close to one up to 16K processors and we measured 5 GFLOPs on an Intel Core i7 QM 720 @ 1.6 GHz which is about 41 percent of the FLOPs we measured for LINPACK on the same machine.
DUNE-FEM does not only provide interfaces but also comes with realizations of these interfaces:
- Discrete function spaces:
- Arbitrary order spaces with Lagrange basis functions and orthonormal basis functions
- Arbitrary order Lagrange spaces
- p-adptive DG and Lagrange spaces
- spaces for reduced basis methods
- Discrete function implementations:
- Discrete function spaces especially build to allow for very efficient grid refinement and coarsening
- Discrete function based on the block vectors provided by dune-istl
- Different approaches to extend scalar discrete function spaces to product spaces
- Inverse linear operators:
- DUNE-FEM provides some build in iterative solvers, e.g., cg, gmres, and bicgstab
- There are bindings for dune-istl, umfpack, and petsc
- Time step methods:
- SSP Runge-Kutta methods (explicit, implicit, and IMEX)
- Multistep methods
DUNE-FEM has been used for a wide range of applications: + Higher order methods for conservation laws (both finite-volume and discontinuous Galerkin) + Convection dominated convection-diffusion equations (mostly Discontinuous Galerkin) + Higher order methods for parabolic and elliptic problems (both conforming and Discontinuous Galerkin) + Hamilton Jacobi equations (different methods used) + Two-phase flow in porous media (finite-volume and Discontinuous Galerkin) + Reduced basis methods
Most methods have been tested for both problems formulated in Euclidean space and on surfaces including moving surfaces and also moving domains.
Documentation and Tutorial
The DUNE-FEM-HOWTO module contains a step by step introduction to DUNE-FEM. It is a good starting point for your own project.
A tutorial on using the Python front end is also available. In addition to introducing all the basic concepts of DUNE, the tutorial contains a number of individual Python script/Jupyter notebooks showing how to solve different types of equations which provide a good starting point for projects. This tutorial can be read independently of the C++ howto.
The code documentation of DUNE-FEM master is genereated using Doxygen.
There is one main publication describing some of the underlying principals and giving some examples and we ask all users of DUNE-FEM to cite in publications using DUNE-FEM:
A. Dedner, R. Klöfkorn, M. Nolte, M. Ohlberger: “A generic interface for parallel and adaptive scientific computing: Abstraction principles and the DUNE-FEM module”. Computing Vol. 90, No. 3, pp. 165–196, 2011 November 2010.
The full repository is hosted on our GitLab instance. The master branch is the current trunk version. In order to use a stable release, please check out the corresponding branch.
The last DUNE-FEM stable releases are also available as tar balls: + DUNE-FEM-1.3.1.tar.gz - compatible with DUNE-2.2.1 + DUNE-FEM-1.4.0.tar.gz - compatible with DUNE-2.3.1 + DUNE-FEM-2.4.1.tar.gz - compatible with DUNE-2.4.1
All the known issues of DUNE-FEM can be found on the online bug traker. Please use it to report any bug.
- Andreas Dedner (Warwick Mathematics Institute, University of Warwick, UK)
- Christoph Gersbacher (Abteilung für Angewandte Mathematik, Universität Freiburg)
- Robert Klöfkorn (NORCE Norwegian Research Centre AS, Norway)
- Martin Nolte (Abteilung für Angewandte Mathematik, Universität Freiburg)
- Martin Alkämper (Institut für Angewandte Analysis und Numerische Simulation, Universität Stuttgart)
- Claus-Justus Heine (Institut für Angewandte Analysis und Numerische Simulation, Universität Stuttgart)
- Tobias Malkmus (Abteilung für Angewandte Mathematik, Universität Freiburg)
- Janick Gerstenberger (Abteilung für Angewandte Mathematik, Universität Freiburg)
- Marco Agnese (Applied Mathematics and Mathematical Physics, Imperial College London)
- Stefan Wierling (Institut für Angewandte Mathematik, Universität Münster)