MATH 664-600: Computational Software for Large-Scale PDE
Solvers
Lecturer: Asst. Prof. Wolfgang Bangerth;
Blocker Bldg., Room 507D;
(979) 845 6393.
Course Outline
The course is intended to bring students to a level where they can
be active users or, participants in and developers of projects that aim at the
large-scale solution of partial differential equations by the finite
element method, possibly using parallel and distributed computing. One
of the most important lessons learned over the past decade is that due
to their size such software can't be written from scratch for each new
project, and must instead build on existing software libraries that
handle most of what constitutes the finite element method as well as
linear algebra and parallel communication. Applications then only
have to implement things like bilinear forms, outer nonlinear solution
loops, and linear solvers specialized to the application.
In the course, students will be taught how to build such software
on top of existing libraries, in particular the deal.II adaptive
finite element library as well as the PETSc parallel linear algebra
library. The first part of the course will be used to review the basic
mathematical concepts used in this software, such as finite element
theory and iterative solvers. The rest of the course will be used for
projects in which students are guided through the implementation of
solvers for applications from their particular field. Part of this
will be teaching the use of software engineering practices, such as
the use of revision control management systems (e.g., CVS or
Subversion), writing documentation, and writing tests for automated
testsuites. Projects will be picked according to the field of
research of a student or her interests. The goal is the
development of a code that a) helps in the research of a
student, and b) may be used as the starting point for future
generations of students.
An outline of the topics to be covered is as follows:
- Basics of finite element implementations
- Basics of iterative solvers for large linear systems
- Basics of iterative nonlinear solvers
- Use of existing software libraries for partial differential
equations and linear algebra
- Parallelization strategies for distributed computing and
challenges to parallelization, such as adaptivity
(depending whether there is demand for this topic)
- Collaborative software development, e.g. the use of CVS or
subversion
- Software engineering practices for large-scale software,
e.g. automated build and test systems, tools for documentation
This course is intended for students in the engineering
disciplines as well as students of mathematics involved in
research in numerics. Feedback from the involved groups would therefore be
appreciated, and I will make efforts to incorporate suggestions on
other topics that might be of importance to these groups.
Prerequisites
- Knowledge of the finite element method. This is covered by MATH
610, though we will probably need little of the theory developed
there. An engineering equivalent of this course would definitely be
sufficient. Good students of MATH 609 should also be able to read up
quickly on how the finite element method works, though they may lack
an understanding of why.
- Basics of iterative solvers. MATH 609 covers some of this
material, and MATH 639 covers it in detail. Good students of MATH 609
should do fine, though.
- Good knowledge of C++. Students without adequate C++ programming
skills will not be able to benefit from this course, and in contrast
to content material, the experience needed to write programs can't be
taught in a few classes at the beginning of the semester. All
successful large-scale software packages are written in advanced
programming languages, and students should have experience in
object-oriented programming and preferrably the use of templates in
C++.
Literature
To the best of my knowledge, there isn't much in terms of books on
writing large-scale software for finite element simulations. What is
there often treats a single software package; for example, there are
books about FEMLAB and DiffPack, two commercial finite element
packages. For the two packages to be used in class, there are no such
books, but PETSc comes with a manual of several hundred pages, and
deal.II has several thousand pages of documentation. They can be found
at
If anyone knows of books on the implementation of the finite element
method that seem relevant to this course, I would be interested in
learning about them.
For the other topics, there are good books. There is a plethora of
books about the theory of finite elements; for iterative solvers of
linear and nonlinear systems, the following books are commonly
referenced:
- Y. Saad, "Iterative Methods for Sparse Linear Systems" (an
exhaustive book on the theory of iterative solvers)
- R. Barrett et al., "Templates for the Solution of Linear Systems"
(a short book explaining the implementation of a variety of linear
solvers)
- C. T. Kelley, "Iterative Methods for Linear and Nonlinear
Equations"
The use of Subversion is explained in
Other software design techniques such as unit testing and automated
build systems are treated in many Computer Science texts, but what is
needed will also be covered in class.
|