You are here

Theory and practice of Finite Element Methods

Course Type: 
PhD Course
Academic Year: 
March - June
40 h

This is a shared course between the SISSA PhD track
on Mathematical Analysis, Modeling, and Applications
( and the Master in High Performance Computing
( It is a course that follows two parallel lines:
theory of finite element methods (graduate students level, ~20 hours) and
practice of finite element methods (mhpc students levels, ~20 hours).

The goal of the course is to provide to the students advanced
analysis tools for finite element methods, as well as 
state-of-the-art programming knowledge for the actual implementation part.

The theory ranges from basic FEM and functional analysis arguments, like
Lax-Milgram, Cea, and Bramble Hilbert lemmas, to more advanced topics,
like inf-sup conditions and a-posteriori error analysis.

The goal of the practice part is to enable a PhD or MHPC student working on
numerical analysis of PDEs to implement a state-of-the-art adaptive finite
element code, that runs in parallel, using modern C++ libraries. The 
implementation will be based on the `deal.II` library (

What you will learn:

  • Advanced Finite Element theory
  • How to use a modern C++ IDE, to build and debug your codes
  • How to use a large FEM library to solve complex PDE problems
  • How to properly document your code using Doxygen
  • How to use a proper Git workflow to develop your applications
  • How to leverage GitHub actions, google tests, and docker images to test and deploy your application
  • How hybrid parallelisation (threads + MPI + GPU) works in real life FEM applications

Useful links

Course classroom on GitHub (for assignments/exercises)

Course slides, notes, materials, and codes:

Course recordings:

Detailed program

  1. Practical Introduction to Galerkin methods
  2. Implementation of a serial Poisson solver
    1. Introduction to tools (Python VS C++/IDE)
    2. Paraview
    3. [C++] Triangulation
    4. [C++] Elementary FiniteElement types
    5. [C++] Degrees of Freedom
    6. [C++] ParameterHandler and ParsedFunction
    7. [C++] Different types of boundary conditions
    8. [C++] Curved geometries, high order mappings
  3. Lax-Milgram Lemma, Cea’s Lemma, Bramble-Hilbert Lemma, Nitsche's trick
  4. Construction of Manufactured solutions
    1. [C++] Working on successively (uniformly) refined grids
    2. [C++] Studying the convergence rates of FEM codes
    3. [C++] ConvergenceTable
  5. Petrov-Galerkin finite element methods (BNB condition)
  6. Mixed and hybrid finite element methods
  7. Ladyzhhenskaya, Brezzi, Babuska VS Lax Milgram
  8. A priori error estimates for Mixed Problems
    1. [C++] Mixed Laplace Problem (Raviar Thomas FEM)
    2. [C++] Stokes problem
    3. [C++] Convergence analysis of Stokes problem
  9. A posteriori Error Analysis (Poisson)
    1. [C++] Adaptive Finite Element Methods
    2. [C++] Convergence Analysis for AFEM

If time permits:

  1. Time dependent and non-linear problems
    1. [C++] Navier-Stokes
  2. Parallelization techniques
    1. [C++] Shared memory parallelization
    2. [C++] Distributed memory parallelization
    3. [C++] Parallel problems
    4. [C++] From step-4 to step-40
  3. Preconditioning techniques
    1. [C++] Multigrid methods
    2. [C++] Block preconditioning

Implementation will be done using the deal.II library (

Zoom (sign in to get password)
Next Lectures: 

Sign in