Computational Sciences Center

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, Dipl.-Inf. Sven Christophersen

Place and time: Room 424, Ludewig-Meyn-Straße 4, Monday, 27th of August, to Friday, 7th of September, 2018

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

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

The first week is dedicated to fundamental numerical methods.

  • Monday, 27th of August, 2018:
    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: Implicit timestepping, Crank-Nicolson an leapfrog methods
    14:30 - 16:00 Programming exercise: energy-conserving timestepping
  • Tuesday, 28th of August, 2018:
    09:00 - 10:30 Lecture: Interpolation, extrapolation, numerical integration
    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, 29th of August, 2018:
    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, 30th of August, 2018:
    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, 31st of August, 2018:
    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: Multigrid methods
    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, 3rd of September, 2018:
    09:00 - 10:30 Lecture: Shared-memory parallelization (OpenMP, threads, thread teams, worksharing)
    10:30 - 12:00 Programming exercise: Parallel operations for two-dimensional grid functions
    13:00 - 14:30 Lecture: Synchronisation (locks, tasks)
    14:30 - 16:00 Programming exercise: Task-parallel LR factorization
  • Tuesday, 4th of September, 2018:
    09:00 - 10:30 Lecture: Vectorization (SIMD, Offloading)
    10:30 - 12:00 Programming exercise: Vectorized quadrature, vectorized linear algebra
    13:00 - 14:30 Lecture: Approximation of non-local force fields (many-body systems, tree algorithms)
    14:30 - 16:00 Programming exercise: Simulation of a many-body system
  • Wednesday, 5th of September, 2018:
    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: Thread synchronisation, shared memory
    14:30 - 16:00 Programming exercise: Quadrature with GPGPU acceleration, reduction operations
  • Thursday, 6th of September, 2018:
    09:00 - 10:30 Lecture: Distributed computing (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, 7th of September, 2018:
    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