# Interactive NGSolve Tutorial¶

## What are the i-tutorials ?¶

The i-tutorials are interactive tutorials to NGS-Py, the Python front-end to NGSolve. The i-tutorials are Jupyter notebooks which allow you to explore the features of NGS-Py.

The i-tutorials have been setup for the 2017 NGSolve user meeting. The authors of the sections are Jay Gopalakrishnan (Getting Started), Joachim Schöberl (Advanced Topics), Christoph Lehrenfeld (Time-dependent and non-linear problems), Christoph Wintersteiger (Geometric modeling and mesh generation). Big thanks to Matthias Hochsteger for integrating the Netgen-GUI into Jupyter.

Copyright: The i-tutorials are a part of NGSolve and are covered by the LGPL open source license. You may extend and modify them for your use, but you have to refer to the original source.

We acknowledge support from the TU Wien and by the Austrian Science Foundation FWF within project grant SFB65 Taming Complexity in Partial Differential Systems.

## Installation¶

To work through the i-tutorials, you first have to install

Netgen/NGSolve, see http://www.ngsolve.org/downloads

Jupyter from http://www.jupyter.org. You can use the pip package manager: "pip3 install jupyter"

download and unpack the i-tutorials from here.

To use the webgui visualization within jupyter you need

```
pip3 install webgui_jupyter_widgets
jupyter nbextension install --user --py widgetsnbextension
jupyter nbextension enable --user --py widgetsnbextension
jupyter nbextension install --user --py webgui_jupyter_widgets
jupyter nbextension enable --user --py webgui_jupyter_widgets
```

Some of the tutorials require packages from scipy and matplotlib, so it is a good idea to install them as well:

```
pip3 install scipy matplotlib matplotlib
```

### i-tutorials on Youtube¶

We have recorded the tutorial sessions from the 3rd NGSolve Usermeeting in which most of these tutorial files were presented. You can watch the presentations on the NGSolve Youtube channel.

## Starting¶

You start with the interactive tutorial by opening a terminal, go to the main folder containing the i-tutorials, and start

```
jupyter-notebook index.ipynb
```

# Whetting the Appetite¶

# 1. Getting started¶

# 2. Advanced Topics¶

- 2.1.1 Preconditioners in NGSolve
- 2.1.2 Building blocks for programming preconditioners
- 2.1.3 Multigrid and Multilevel Methods
- 2.1.4 Element-wise BDDC Preconditioner
- 2.1.5 Algebraic Multigrid Methods
- 2.2 Programming an eigenvalue solver
- 2.3
*H(curl)*and*H(div)*function spaces - 2.4 Maxwell’s Equations
- 2.4.1 Maxwell eigenvalue problem
- 2.5 Mixed formulation for second order equations
- 2.6 Stokes equation
- 2.7 Facet spaces and hybrid methods
- 2.8 Discontinuous Galerkin Methods
- 2.9 Fourth order equations
- 2.10 Dual basis functions
- 2.11 Matrix free operator application
- 2.12 Periodic Spaces
- Eigenvalue problem for phase shift
- 2.13 Interface resisitivity
- 2.14 Coupling of FEM with plane waves

# 3. Time-dependent and non-linear problems¶

- 3.1 Parabolic model problem
- 3.2 Incompressible Navier-Stokes equations
- 3.3 Nonlinear problems
- 3.4 Nonlinear minimization problems
- 3.5.1 Operator applications for Discontinuous Galerkin discretizations - linear transport
- 3.5.2 DG for the acoustic wave equation
- 3.6 Scalar PDE on surfaces (with HDG)
- 3.7 DG/HDG splitting
- 3.8 A Nonlinear conservation law: shallow water equation in 2D

# 4. Geometric modeling and mesh generation¶

# 5. MPI - Parallelization and CUDA Support¶

More on PETSc coupling is available by Stefano Zampini and Umberto Zerbinati at https://ngspetsc.readthedocs.io/en/latest/ngsPETSc.html

CUDA Device support:

some more MPI examples:

# 6. Various Topics¶

# 7. Shape- and Topology Optimization¶

Peter Gangl and Kevin Sturm

- 7.1 Shape optimization via the shape derivative
- 7.2 PDE-Constrained Shape Optimization
- 7.3 PDE-Constrained Shape Optimization (semi-automated)
- 7.5 PDE-Constrained Shape Optimization (fully automated)
- 7.6 Topology Optimization based on the Topological Derivative
- 7.7 PDE-Constrained Topology Optimization

# 8. Unfitted Finite Elements¶

Lehrenfeld and the ngsxfem authors

These units require the Add-on ngsxfem to be installed. There are further ngsxfem-tutorials here.

- 8.1 Fundamental concepts of
`ngsxfem`

- 8.2 Integration on level set domains
- 8.3 Unfitted FEM discretizations
- 8.4 Space-time discretizations on fitted geometry
- 8.5 Space-time discretizations on unfitted geometries
- 8.6 Integration over domains described by multiple level sets
- 8.7 Unfitted FEM for domains described by multiple level sets
- 8.8 Cell and basis aggregation in
`ngsxfem`

- 8.9 Unfitted Mixed FEM (using
`HDiv`

FE spaces)