|View of grid for defining discrete functions|
|Function and function spaces|
|Adaptation and Parallelization|
|Input and output|
The dune-fem module is based on the dune-grid interface library. extending the grid interface by a number of discretization algorithms for solving non-linear systems of partial differential equations.
The main notion is that of a "spatial discrete operator" which models a mapping between two discrete function spaces: . This operator might for example be a second order elliptic operator, a first order hyperbolic operator, or a projector operator. Basic operators can be combined to construct more complex operators. In addition to standard vector space operations, the most flexible construction process is the pass concept, which implements the nesting of operators allowing to define operators of the form
build from `simple' discrete operators
and a projection . By inverting the discrete operator using non-linear or linear solvers (see Linear solver) or by plugging into an ode solver a wide range of applications can be tackled (http://www.mathematik.uni-freiburg.de/IAM/homepages/mario/postscript/paper_bddko.pdf).
Here is a short list of available simple operators:
By combining these operators in the fashion describt above and using (non)-linear solvers or ode time stepping schemes, very complex problem can be solved, e.g., non-linear elliptic and parabolic problems, advection diffusion or even dispersion equations. Available solvers at this time are
Discrete operators are constructed by choosing a continuous function space, a set of base functions, and a view of the underlying grid which determines that part of the dune grid on which the functions are to be defined. Implementations for discontinuous and Lagrange finite element spaces are available so far.
Handling of the degrees of freedom (dof) on locally adapted and parallel grids - including dynamic load balancing - is automatically performed by the Dune::DofManager so that very little additional coding is required from the user. The Dune::AdaptiveLeafIndexSet implements an efficient reorganization of the dofs during adaptation and grid reorganization. To use this feature the Dune::AdaptationManager should be used.
For handling parallel tasks the Dune::CommunicationManager is available which performs the required communication for a given set of discrete functions. Mostly the operators, the ode, the linear, and the non-linear solvers are implemented for use in a parallel environment so that the step from serial to parallel is almost effortless for the user.
Quadratures are available from the dune-grid module and for efficiency caching is performed for the basis functions at the quadrature points.
Output routines of simulation results are available for Grape and in vtk - as used for example by paraview. Furthermore checkpointing of the data and the underlying grid structure can be used.