This is a shared course between the SISSA PhD track

on Mathematical Analysis, Modeling, and Applications

(math.sissa.it) and the Master in High Performance Computing

(www.mhpc.it). 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 (www.dealii.org).

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

- Practical Introduction to Galerkin methods
- Implementation of a serial Poisson solver
- Introduction to tools (Python VS C++/IDE)
- Paraview
- [C++] Triangulation
- [C++] Elementary FiniteElement types
- [C++] Degrees of Freedom
- [C++] ParameterHandler and ParsedFunction
- [C++] Different types of boundary conditions
- [C++] Curved geometries, high order mappings

- Lax-Milgram Lemma, Cea’s Lemma, Bramble-Hilbert Lemma, Nitsche's trick
- Construction of Manufactured solutions
- [C++] Working on successively (uniformly) refined grids
- [C++] Studying the convergence rates of FEM codes
- [C++] ConvergenceTable

- Petrov-Galerkin finite element methods (BNB condition)
- Mixed and hybrid finite element methods
- Ladyzhhenskaya, Brezzi, Babuska VS Lax Milgram
- A priori error estimates for Mixed Problems
- [C++] Mixed Laplace Problem (Raviar Thomas FEM)
- [C++] Stokes problem
- [C++] Convergence analysis of Stokes problem

- A posteriori Error Analysis (Poisson)
- [C++] Adaptive Finite Element Methods
- [C++] Convergence Analysis for AFEM

If time permits:

- Time dependent and non-linear problems
- [C++] Navier-Stokes

- Parallelization techniques
- [C++] Shared memory parallelization
- [C++] Distributed memory parallelization
- [C++] Parallel problems
- [C++] From step-4 to step-40

- Preconditioning techniques
- [C++] Multigrid methods
- [C++] Block preconditioning

Implementation will be done using the deal.II library (www.dealii.org).