.. !split

Preface
%%%%%%%

This book gives a concise and gentle introduction to finite element
programming in Python based on the popular FEniCS software library.
FEniCS can be programmed in both C++ and Python, but this tutorial
focuses exclusively on Python programming, since this is the simplest
and most effective approach for beginners. After having digested the
examples in this tutorial, the reader should be able to learn more
from the FEniCS documentation, the numerous demo programs that come
with the software, and the comprehensive FEniCS book *Automated
Solution of Differential Equations by the Finite Element Method*
[Ref01]_. This tutorial is a further development of the opening
chapter in [Ref01]_.

We thank Johan Hake, Kent-Andre Mardal, and Kristian Valen-Sendstad
for many helpful discussions during the preparation of the first
version of this tutorial for the FEniCS book [Ref01]_. We are
particularly thankful to Professor Douglas Arnold for very valuable
feedback on early versions of the text.  Øystein Sørensen pointed out
numerous typos and contributed with many helpful comments. Many errors
and typos were also reported by Mauricio Angeles, Ida Drøsdal,
Miroslav Kuchta, Hans Ekkehard Plesser, Marie Rognes, Hans Joachim
Scroll, Glenn Terje Lines, Simon Funke, Matthew Moelter, and Magne
Nordaas. Ekkehard Ellmann as well as two anonymous reviewers provided
a series of suggestions and improvements.  Special thanks go to
Benjamin Kehlet for all his work with the ``mshr`` tool and for quickly
implementing our requests for this tutorial.

Comments and corrections can be reported as *issues* for the
`Git repository of this book <https://github.com/hplgit/fenics-tutorial/>`__,
or via email
to ``logg@chalmers.se``.

