# Block course "Simulation and high-performance computing"

Simulations play an important role in many fields of science, engineering, and economics. Based on suitable models, e.g., laws of nature, powerful computers can be used to predict a system's behaviour.

On one hand, simulations can save costs by performing experiments in a computer instead of in real life. On the other hand, they can offer insights into phenomena that are not accessible to experiments, i.e., the prediction of the world's climate.

The block course provides the participants with an introduction to the basic principles of typical computer simulations, both regarding mathematics and implemenation. A close cooperation with the computing center allows the participants to run their codes on high-performance systems.

**Organizers:** Prof. Dr. Steffen Börm, Christina Börst M.Ed.

**Place and time:** Seminar room 306/307, Westring 383, Monday, 16th of September, to Friday, 27th of September, 2019

**Application:** Please send an e-mail to Steffen Börm

**Required:** Higher mathematics (e.g., differentiation and integration, polynomials, matrices and vectors); C programming

**Lecture notes** (currently incomplete) are available in a PDF file.

The first week is dedicated to fundamental numerical methods.

- Monday, 16th of September, 2019:

09:00 - 09:15 Opening

09:15 - 10:30 Lecture: Timestepping for ordinary differential equations

10:30 - 12:00 Programming exercise: Simulation of a spring-mass system; simulation of a multi-body system

13:00 - 14:30 Lecture: Timestepping methods for special applications

14:30 - 16:00 Programming exercise: energy-conserving timestepping - Tuesday, 17th of September, 2019:

09:00 - 10:30 Lecture: Higher-order methods

10:30 - 12:00 Programming exercise: Quadrature and Romberg quadrature applied to the normal distribution

13:00 - 14:30 Lecture: Runge-Kutta methods and multi-step methods for ordinary differential equations

14:30 - 16:00 Programming exercise: Simulation of a multi-body system, simulation of a predator-prey system - Wednesday, 18th of September, 2019:

09:00 - 10:30 Lecture: Finite difference methods for partial differential equations

10:30 - 12:00 Programming exercise: Numerical treatment of the potential equation

13:00 - 14:30 Lecture: LR decomposition and BLAS

14:30 - 16:00 Programming exercise: Solving the two-dimensional potential equation with band matrices and BLAS - Thursday, 19th of September, 2019:

09:00 - 10:30 Lecture: Method of lines for the heat equation and the wave equation

10:30 - 12:00 Programming exercise: Simulation of the wave equation with the method of lines and Runge-Kutta or Crank-Nicolson timestepping

13:00 - 14:30 Lecture: Iterations

14:30 - 16:00 Programming exercise: Nonlinear regression, more example of nonlinear equations - Friday, 20th of September, 2019:

09:00 - 10:30 Lecture: Krylov methods for linear systems of equations

10:30 - 12:00 Programming exercise: Two-dimensional wave equation with Crank-Nicolson and a CG solver

13:00 - 14:30 Lecture: Non-local force fields

14:30 - 16:00 Programming exercise: Two-dimensional wave equation with a multigrid solver

In the second week, we focus on how these numerical methods can be implemented efficiently on modern computers.

- Monday, 23rd of September, 2019:

09:00 - 10:30 Lecture: Multithreading and OpenMP

10:30 - 12:00 Programming exercise: Parallel operations for two-dimensional grid functions

13:00 - 14:30 Lecture: Tasks

14:30 - 16:00 Programming exercise: Task-parallel LR factorization - Tuesday, 24th of September, 2019:

09:00 - 10:30 Lecture: Vectorization (concepts, auto-vectorization)

10:30 - 12:00 Programming exercise: Vectorized quadrature, vectorized linear algebra

13:00 - 14:30 Lecture: Explicit vectorization (AVX, intrinsics)

14:30 - 16:00 Programming exercise: Simulation of a many-body system - Wednesday, 25th of September, 2019:

09:00 - 10:30 Lecture: Computing with graphics cards (CUDA)

10:30 - 12:00 Programming exercise: Simulator of a many-body system with GPGPU acceleration

13:00 - 14:30 Lecture: Streams, blocks, and shared memory

14:30 - 16:00 Programming exercise: Quadrature with GPGPU acceleration, reduction operations - Thursday, 26th of September, 2019:

09:00 - 10:30 Lecture: Message passing and MPI

10:30 - 12:00 Programming exercise: Distributed two-dimensional grid functions

13:00 - 14:30 Lecture: Collective communication

14:30 - 16:00 Programming exercise: Two-dimensional domain decomposition methods - Friday, 27th of September, 2019:

09:00 - 10:30 Lecture: Computing resources at the University's computing center

10:30 - 12:00 Programming exercise: Using the systems of the computing center

13:00 - 14:30 Closing remarks, discussion