This is the webpage for the Imperial College London Mathematics module MATH96063/MATH97017/MATH97095 Finite Elements: numerical analysis and implementation. There’s an introductory video explaining what the module is about online here.

Other people are welcome to make use of the material here. The authors welcome feedback and would particularly appreciate an email if this material is used to teach anywhere.

# Weekly material¶

The numerical analysis and implementation parts of the module run in parallel. Each has videos and exercises embedded in its notes. This table indicates the progress that you should make through each component each week.

Week |
Numerical analysis |
Implementation |
---|---|---|

1 |
Up to and including Definition 1.10. |
Do the background tutorials and installation work given under Software tools and The implementation exercise. |

2 |
Up to and including Exercise 2.6. |
Up to the end of Section 1. |

3 |
Up to and including Definition 2.19. |
Up to and including Exercise 2.47. |

4 |
Up to and including Exercise 2.36. |
Up to and including Exercise 2.50. |

5 |
Up to and including Definition 3.13. |
Up to the end of Section 2. |

6 |
Up to and including Lemma 3.23. |
Up to and including Exercise 4.44. |

7 |
Up to and including Exercise 4.36. |
Up to the end of Section 4. |

8 |
Up to the end of Section 4. |
Up to the end of Section 5. |

9 |
Up to and including Theorem 5.23. |
Up to the end of Section 7. |

10 |
Up to the end of Section 5. For MSc, 4th year MSci and MRes students - read the mastery material. |
Time for the mastery exercise, (catch up time for year 3). |

A PDF version of the course notes is available here.

# Part 1: Numerical analysis¶

The theory part of the module will be led by Prof. Colin Cotter. The material is presented by means of a set of lecture notes, with lecture videos interspersed in the notes.

The text for this part of the module is Brenner and Scott *The
Mathematical Theory of Finite Element Methods*. Imperial College has
fortunately paid for PDF access to this book, so it is accessible from
the Imperial College network at Springer Link.

However, this course has the material rearranged to synchronise the content better between the lecture notes and the implementation exercise.

## Lecture notes:¶

## Past exam papers¶

Please note that for 2015-2018, there was no mastery component in the examination, and so there were four questions. From 2019 on there are four questions plus one mastery question for 4th year/Masters credits.

# Part 2: Implementation¶

The implementation part of the module aims to give the students a deeper understanding of the finite element method through writing software to solve finite element problems in one and two dimensions.

This part of the module will be taught by Dr David Ham. The key to this part of the module is to build up a working finite element implementation over the course of the term, and thereby to gain a practical understanding of the method.

The starting point for the implementation method is the skeleton code, an outline of a simple finite element library written in Python. Many of the critical algorithms in the skeleton code are left unimplemented, it will be your task to implement them over the course of the term.

Each chapter of the implementation describes how a part of the finite element method is implemented. Along the way are videos which explain the text, or walk through the algorithms presented. Also interspersed in the text are exercises, typically requiring you to implement the algorithm just presented. We will look at how to do this in more detail presently.

- Software tools
- The implementation exercise

Implementation exercise contents:

- 1. Numerical quadrature
- 1.1. Exact and incomplete quadrature
- 1.2. Examples in one dimension
- 1.3. Reference elements
- 1.4. Python implementations of reference elements
- 1.5. Quadrature rules on reference elements
- 1.6. Legendre-Gauß quadrature in one dimension
- 1.7. Extending Legendre-Gauß quadrature to two dimensions
- 1.8. Implementing quadrature rules in Python

- 2. Constructing finite elements
- 2.1. A worked example
- 2.2. Types of node
- 2.3. The Lagrange element nodes
- 2.4. Solving for basis functions
- 2.5. Implementing finite elements in Python
- 2.6. Implementing the Lagrange Elements
- 2.7. Tabulating basis functions
- 2.8. Gradients of basis functions
- 2.9. Interpolating functions to the finite element nodes

- 3. Meshes
- 4. Function spaces: associating data with meshes
- 5. Functions in finite element spaces
- 6. Assembling and solving finite element problems
- 7. Dirichlet boundary conditions
- 8. Nonlinear problems
- 9. Mixed problems
- 10. References