NGSolve 24#

Authors: Schöberl, Neunteufel, Pechstein, Lederer, Lehrenfeld, Lackner, Hochsteger, Wess, Weggler, Stocker, Gopalakrishnan, Bonetti, Zerbinati, …. ?

This material are updated tutorials for the 2024 NGSolve-usermeeting.

Downlaod notebooks:

It contains

  • a compressed beginner’s tutorial

  • advanced NGSolve tutorials for

    • solid and structural mechanics

    • computational fluid dynamics

    • electromagnetics: TEAM benchmarks

  • linked tutorials for add-on packages

    • boundary element methods

    • space-time tent-pitching methods

    • Trefftz methods

    • primal/dual cell method

    • NGSolve-PETSc interface

There co-exists other tutorials and teaching material, with some overlap:

  • The NGSolve i-tutorials. They form kind of reference material for specific topics and methods. There, methods are explained on simple model cases, most often on the unit-squares.

  • The NGSolve i-FEM lecture notes. This material is written primarily for teaching finite element methods using NGSolve.

In the NGS24 material we focus on application areas. People with a background in a certain engineering discipline find how to formulate domain specific problems in the generic NGSolve language, and see what kind of solvers are approriate for their problems.

Emphasis is given also to large scale problems, with scalable preconditioners and solvers. For MPI-parallel computing we show how to solve problems using PETSc via the ngsPETSc interface.

NGSolve Jupyter-blitz:



10:00 - 10:45

App-dev (Chris,Matthias)

Room 2

BEM (Lucy)


CutFEM (Christoph)

Room 4

DiffGeo (Michi N)

Room 3

Preformance (Joachim)


PETSc (Umberto)

Room 4

Trefftz (Paul)

Room 2

Waves (Markus)

Room 3


BEM, Trefftz, CutFEM, Trefftz, PETSc, Waves: see add-on packages

DiffGeo: material Performance: TaskManager MPI GPU Lukas’ NgsAMG

Installing Parallel NGSolve#

Traditionally, NGSolve is installed using the Python package installer pip. Instructions for installing with conda are found below.

Install Python, version 3.8 or later. If you can start python3, but not python, you can set an alias: alias -g python='python3'

You may want to install NGSolve into a fresh virtual environment

python3 -m venv ngs24
source ngs24/bin/activate
python -m venv ngs24

Install NGSolve#

It is easy to install NGSolve using

python -m pip install numpy scipy matplotlib jupyter ipyparallel scikit-build
python -m pip install --upgrade ngsolve webgui_jupyter_widgets

If you need latest pre-releases:

python -m pip install --upgrade --pre ngsolve webgui_jupyter_widgets

To check the installation of NGSolve run in the console:

python -c "import ngsolve; print(ngsolve.__version__)"

solve a first example:

python -m ngsolve.demos.intro.poisson

solve a first example with the legacy Netgen gui:

python -i -c "import netgen.gui; import ngsolve.demos.intro.poisson"

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

Install MPI and mpi4py (optional)#

If you have mpi installed you are certainly able to use it.

supported are openmpi4, openmpi5, mpich. A quick way to install mpi is using binaries from conda:

python -m pip install -i openmpi    

install openmpi: either binaries from conda, or compile yourself:

python -m pip install -i openmpi

installation from source: openmpi 4.1.6, version 5.0.x not supported

curl --output openmpi-4.1.6.tar.bz2
tar -xzf openmpi-4.1.6.tar.bz2
cd openmpi-4.1.6
make all 
sudo make all install

install Intel-MPI:

pip install impi_rt impi-devel

not supported is MS-MPI

Then, install mpi4py, version 4, many thanks to Lisandro Dalcin.

python -m pip install -i --no-cache-dir mpi4py==4.0.0.dev0

test it using

mpiexec -n 2 python -c "from mpi4py import MPI; print (MPI.get_vendor()); c=MPI.COMM_WORLD; print ('I am', c.rank, 'out of', c.size)"

and then mpi-parallel NGSolve: (NEEDS THE NEXT UPDATE)

mpiexec -n 4 python -m ngsolve.demos.mpi.mpi_poisson

Install PETSc (optional, needs mpi):#

Support for Linux and MacOS. Windows support with WSL only.

Install PETSc as a source wheel:

export PETSC_CONFIGURE_OPTIONS="--with-fc=0 --with-debugging=0 --download-hypre \
         COPTFLAGS=\"-O2\" CXXOPTFLAGS=\"-O2\" "
python -m pip install --upgrade --no-deps --force-reinstall --no-cache-dir petsc petsc4py

The NGSolve-PETSc interface (U. Zerbinati, S. Zampini):

python -m pip install git git+

Install Hypre (optional, needs mpi):#

See ngsHypre

You are installing regular releases of NGSolve:

python -m pip install git+
mpiexec -np 4  python -m ngs_hypre.demos.example1

You are using pre-releases, or compile NGSolve yourself:

python -m pip install scikit-build-core pybind11_stubgen toml
pip3 install --no-build-isolation git+
mpirun -np 4  python3 -m ngs_hypre.demos.example1

Installing using conda#

(DRAFT DRAFT) The quickest path to a parallel NGSolve is using conda. Conda-forge provides binary packages for MPI and PETSc for many platforms and versions (TODO: list versions). Install anaconda (or mini-conda), and run something like

source ~/miniconda3/bin/activate 
conda install mpi4py petsc4py
python -m pip install --pre --upgrade ngsolve

then, test the installation using …

(not yet working properly)

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 explanation

  • If you have conflicts with other packages, you may install NGSolve in a virtual environment.

  • 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
  • Visual Studio Code and Pylance: When working in a virtual environment with vscode and pylance you might have some issues:

    Import "ngsolve" could not be resolved Pylance (reportMissingImports)

    To fix this access the settings of vscode and add the following lines to the settings.json file and add:

        "python.analysis.extraPaths": [
            "<path to the virtual environment>/lib/python3.10/site-packages",