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).