# Block course "Simulation and High-Performance Computing"

**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