# An Interactive Introduction to the Finite Element Method#

TU Wien, Institute of Analysis and Scientific Computing

The finite element method is a powerful tool for computer simulation of problems in engineering and sciences. Such problems are often described mathematically by means of partial differential equations, which are then discretized on a mesh.

Finite element methods are in the intersection of mathematics, engineering, and scientific computing. Thus it is natural that there are very different courses teaching finite elements, from very theoretical courses never touching the computer, to very applied classes running commercial programmes without teaching the methods behind.

In this class we follow an approach in between: We aim explaining the mathematical theory, and giving students the possibility to try all methods on the computer. For this we are using the open source finite element package Netgen/NGSolve, which can be conveniently used via its Python frontend in jupyter-notebooks.

This lecture is given in this form the first time in summer term 24. If you have suggestions for improvements, or found some errors, please send them per mail to the author. Many section are still in draft version, and will be cleaned as the class proceeds.

If you like the material, show it by giving a star on github.

## Literature#

Lecture notes Schöberl and Faustmann+Schöberl (available in TU-Wien TUWEL)

Books:

D.Braess: Finite Elements. Theory, Fast Solvers, and Applications in Solid Mechanics

C. Johnson: Numerical solution of partial differential equations by the finite element method

D.Boffi, F.Brezzi, M.Fortin: Mixed Finite Element Methods and Applications

S.Brenner, R.Scott: The Mathematical Theory of Finite Element Methods

A. Ern, J.-L.Guermond: Finite Elements I-III

## Installing NGSolve#

Install a recent Python. Then it should be easy to install NGSolve using

```
pip install jupyter numpy scipy matplotlib
pip install --pre ngsolve
pip install webgui_jupyter_widgets
```

To check the installation of NGSolve run in the console:

```
python3 -c "import ngsolve; print(ngsolve.__version__)"
```

Then, open jupyter-notebook (or jupyter-lab or VS Code), create a new notebook, create and execute a cell with

```
from ngsolve import *
from ngsolve.webgui import Draw
Draw (unit_cube.shape);
```

Known issues are

Use pip3 instead of pip if there is no pip

If you get an error like

`externally-managed-environment`

, then either use virtual environments, or add the flag`--break-system-packages`

to the pip command, see explanationIf you have conflicts with other packages, you may install NGSolve in a virtual environment. For example I did

python3 -m venv /Users/joachim/numpde source /Users/joachim/numpde/bin/activate

If NGSolve compuatations are working, but you don’t get the rendering: For jupyter notebook version < 7.0.0 you have to run additionally

jupyter nbextension install --user --py webgui_jupyter_widgets jupyter nbextension enable --user --py webgui_jupyter_widgets

If local installation does not work, there are alternatives:

login to a jupyter server from your browser:

jupyterhub.cerbsim.com

user:**ngshub_xx**

pwd:**solve!xx**

with xx number from 01 to 31run NGSolve online within jupyter-lite:

https://jschoeberl.github.io/iFEM-lite/lab?path=iFEM.ipynb

The first time it might take a few minutes to start, and then again to import ngsolve.

- 38. Stationary Transport Equation
- 39. Instationary Transport Equation
- 40. Nitsche’s Method for boundary and interface conditions
- 41. DG - Methods for elliptic problems
- 42. Hybrid DG for elliptic equations
- 43. Splitting Methods for the time-dependent convection diffusion equation
- 44. Fourth Order Equation
- 45. H(div)-conforming Stokes