\chapter{Introduction}

\Dumux aims to be a generic framework for simulation of multiphase
fluid flow and transport processes in porous media using contiuum
mechanical approaches.  At the same time, \Dumux aims to deliver
top-notch computational performance, high flexibility, a sound
software architecture and the ability to run on anything from single
processor systems to highly parallel supercomputers with specialized
hardware architectures.

The means to achieve these somewhat contradictory goals are the
thorough use of object oriented design in conjunction with template
programming. These requirements lead to C++ as the implementation
language.

One of the more complex issues when dealing with parallel continuum
models is managing the grids used for the spatial discretization of
the physical model. To date, no generic and efficient approach exists
for all possible cases, so \Dumux is build on top of DUNE, the
\textbf{D}istributed and \textbf{U}nified \textbf{N}umerics
\textbf{E}nvironment~\cite{DUNE-HP}. DUNE provides a generic interface
to many existing grid management libraries such as UG~\cite{UG-HP},
ALBERTA~\cite{ALBERTA-HP}, ALU-Grid~\cite{ALUGRID-HP} and a few
more. DUNE also extensively uses template programming in order to
achieve minimal overhead when accessing the underlying grid
libraries\footnote{In fact, the performance penalty resulting from the
  use of DUNE's grid interface is usually
  negligible~\cite{BURRI2006}.}.
\begin{figure}[hbt]
  \centering 
  \includegraphics[width=.5\linewidth, keepaspectratio]{EPS/dunedesign}
  \caption{
    \label{fig:dune-design}
    A high-level overview on DUNE's design as available on the project's
    web site~\cite{DUNE-HP}.
  }
\end{figure}

DUNE's grid interface is independent of the spatial dimension of the
underlying grid. For this purpose, it uses the concept of
co-dimensional entities. Roughly speaking, an entity of co-dimension
$0$ constitutes a cell, co-dimension $1$ entities are faces between
cells, co-dimension $1$ are edges, and so on until co-dimension $n$
which are the cell's vertices.  The DUNE grid interface generally
assumes that all entities are convex polytopes, which means that it
must be possible to express each entity as the convex hull of a set of
vertices. For efficiency, all entities are further expressed in terms
of so-called reference elements which are transformed to the actual
spatial incarnation within the grid by a so-called geometry
function\footnote{The same approach is also used by \texttt{dune-disc} for
  finite element shape functions.}. Here, a reference element for an
entity can be thought of as a prototype for the actual grid
entity. For example, if we used a grid that used hexahedrons as cells,
the reference element for each cell would be the unit cube $[0, 1]^3$
and the geometry function would scale and translate the cube so that
it matches the grid's cell. For a more thorough description of DUNE's
grid definition, see~\cite{BASTIAN2008}.

In addition to the grid interface, DUNE also provides quite a few
additional modules, of which the \texttt{dune-pdelab},
\texttt{dune-localfunctions} and \texttt{dune-istl} modules are the
most relevant in the context of this handbook.  \texttt{dune-pdelab}
provides a toolbox for discretization and includes matrix assemblers
for translating local stiffness matrices into a global linear system
of equations and much more, while \texttt{dune-localfunctions}
provides a set of generic finite element shape
functions. \texttt{dune-istl} is the \textbf{I}terative
\textbf{S}olver \textbf{T}emplate \textbf{L}ibrary and provides
generic, highly optimized linear algebra routines for solving the
generated systems.

\Dumux comes in form of an additional module \texttt{dumux}. 
It depends on the DUNE core modules 
\texttt{dune-common}, \texttt{dune-grid}, \texttt{dune-istl}, \texttt{dune-localfunctions}, as well as from 
the discretization module \texttt{dune-pdelab}. 
The main intention of \Dumux is to provide a framework for easy and efficient 
implementation of new physical models for porous media flow problems, 
ranging from problem formulation, the selection of 
spatial and temporal discretization schemes, as well as nonlinear solvers,  
up to general concepts for model coupling.  
Moreover, \Dumux includes ready to use numerical models and a few example applications. 

