DUNE, the Distributed and Unified Numerics Environment is a modular toolbox for solving partial differential equations (PDEs) with grid-based methods. It supports the easy implementation of methods like Finite Elements (FE), Finite Volumes (FV), and also Finite Differences (FD).
DUNE is free software licensed under the GPL (version 2) with a so called “runtime exception” (see license). This licence is similar to the one under which the libstdc++ libraries are distributed. Thus it is possible to use DUNE even in proprietary software.
The underlying idea of DUNE is to create slim interfaces allowing an efficient use of legacy and/or new libraries. Modern C++ programming techniques enable very different implementations of the same concept using a common interface at a very low overhead. Thus DUNE ensures efficiency in scientific computations and supports high-performance computing applications.
Particular highlights are
- a generic grid interface, allowing to interface a range of very different grid implementations
- the Iterative Solver Template Library, featuring an algebraic multigrid preconditioner
- Highlevel interfaces for trial and test functions and generic discretization modules
- Python binding for the full grid interface and a flexible concept to provide bindings for user modules.
DUNE is based on the following main principles:
Separation of data structures and algorithms by abstract interfaces. This provides more functionality with less code and also ensures maintainability and extendability of the framework.
Efficient implementation of these interfaces using generic programming techniques. Static polymorphism allows the compiler to do more optimizations, in particular function inlining, which in turn allows the interface to have very small functions (implemented by one or few machine instructions) without a severe performance penalty. In essence the algorithms are parametrized with a particular data structure and the interface is removed at compile time. Thus the resulting code is as efficient as if it would have been written for the special case.
Reuse of existing finite element packages with a large body of functionality. In particular the finite element codes UG, ALBERTA, and ALUGrid have been adapted to the DUNE framework. Thus, parallel and adaptive meshes with multiple element types and refinement rules are available. All these packages can be linked together in one executable.
The framework consists of a number of modules which are downloadable as separate packages. There is a set of core modules which are used by most other packages. The dune-grid core module already contains some grid implementation and further grid managers are available as extra modules. Main discretization modules providing the infrastructure for solving partial differential equations using DUNE are available as separate modules. The modular structure of DUNE allows to only use a small set of th modules (e.g., only the solver module dune-istl or the module dune-localfunctions containing shape functions without for example using the dune-grid or a full discretization module).