10 DOLFIN: a C++/Python finite element library
By Anders Logg, Garth N. Wells and Johan Hake
DOLFIN is a C++/Python library that functions as the main user interface of FEniCS. In this
chapter, we review the functionality of DOLFIN. We also discuss the implementation of some key
features of DOLFIN in detail. For a general discussion on the design and implementation of DOLFIN,
we refer to Logg and Wells (2010).
10.1 Overview
A large part of the functionality of FEniCS is implemented as part of DOLFIN. It provides a problem
solving environment for models based on partial differential equations and implements core parts
of the functionality of FEniCS, including data structures and algorithms for computational meshes
and finite element assembly. To provide a simple and consistent user interface, DOLFIN wraps the
functionality of other FEniCS components and external software, and handles the communication
between these components.
Figure 10.1 presents an overview of the relationships between the components of FEniCS and
external software. The software map presented in the figure shows a user application implemented
on top of the DOLFIN user interface, either in C++ or in Python. User applications may also be devel-
oped using FEniCS Apps, a collection of solvers implemented on top of FEniCS/DOLFIN. DOLFIN
itself functions as both a user interface and a core component of FEniCS. All communication between
a user program, other core components of FEniCS and external software is routed through wrapper
layers that are implemented as part of the DOLFIN user interface. In particular, variational forms ex-
pressed in the UFL form language (Chapter 17) are passed to the form compiler FFC (Chapter 11) or
SFC (Chapter 15) to generate UFC code (Chapter 16), which can then be used by DOLFIN to assemble
linear systems. In the case of FFC, this code generation depends on the finite element backend FIAT
(Chapter 13), the just-in-time compilation utility Instant (Chapter 14) and the optional optimizing
backend FErari (Chapter 12). Finally, the plotting capabilities provided by DOLFIN are implemented
by Viper. Some of this communication is exposed to users of the DOLFIN C++ interface, which
requires a user to explicitly generate UFC code from a UFL form file by calling a form compiler on
the command-line.
DOLFIN also relies on external software for important functionality such as the linear algebra
libraries PETSc, Trilinos, uBLAS and MTL4, and the mesh partitioning libraries ParMETIS and
SCOTCH (Pellegrini).
A. Logg et al., Automated Solution of Differential Equations by the Finite Element Method, Lecture Notes
in Computational Science and Engineering 84, DOI 10.1007/978-3-642-23099-8__10,
© Springer-Verlag Berlin Heidelberg 2012
173