Hi there! My name is Adrian Kummerländer. I am a software developer by vocation and a mathematician by degree, currently pursuing a doctorate at LBRG in the intersection between HPC and LBM. On these pages you will find articles covering some of my experiences in software development and related tinkerings as well as repositories and information on some of my personal projects. If you have any comments or questions feel free to reach out. I hope you will find something here worth your time.
» Benefiting from deliberately failing linkage
December 26, 2023 | Adrian KummerländerRealizing that I have not written anything here for two years lets just start writing again1: Compilation times for template-heavy C++ codebases such as the one at the center of my daily life can be a real pain. This mostly got worse since I started to really get my hands dirty in its depths during the extensive refactoring towards SIMD and GPU support2. The current sad high point in compilation times was reached when compiling the first GPU-enabled simulation cases: More than 100 seconds for a single compile on my not too shabby system. This article will detail how I significantly reduced this on the build system level while gaining useful features. ↪
» Reproducible development environment for Teensy
October 11, 2021 | Adrian KummerländerSo for a change of scenery I recently started to mess around with microcontrollers again. Since the last time that I had any real contact with this area was probably around a decade ago — programming an ASURO robot — I started basically from scratch. Driven by the goal of building and programming a fancy mechanical keyboard (as it seems to be the trendy thing to do) I chose the Arduino-compatible Teensy 4.0 board. While I appreciate the rich and accessible software ecosystem for this platform, I don't really want to use some special IDE, applying amongst other things1 weird non-standard preprocessing to my code. In this vein it would also be nice to use my accustomed Nix-based toolchain which leads me to this article. ↪
» Noise and Ray Marching
September 26, 2021 | Adrian KummerländerLiterateLB's volumetric visualization functionality relies on a simple ray marching implementation to sample both the 3D textures produced by the simulation side of things and the signed distance functions that describe the obstacle geometry. While this produces surprisingly nice looking results in many cases, some artifacts of the visualization algorithm are visible depending on the viewport and sample values. Extending the ray marching code to utilize a noise function is one possibility of mitigating such issues that I want to explore in this article. ↪
» Publications and talks
October 24, 2022 at 11:12 | Adrian KummerländerToday my first paper on implicit propagation in directly addressed grids was accepted for publication in Concurrency and Computation. It will soon be available as open access under DOI 10.1002/cpe.7509
.
In other news, the annual report of our cluster usage Advances in Computational Process Engineering using Lattice Boltzmann Methods on High Performance Computers for Solving Fluid Flow Problems was accepted for publication in the annual proceedings on High Performance Computing in Science and Engineering by the High Performance Computing Center Stuttgart (HLRS). In this context I was also offered the opportunity of presenting it in person at the 25th Results and Review Workshop.
If you are interested in more details along those lines, I will give a talk on Lattice Boltzmann Performance Engineering in OpenLB at the Helmholtz HiRSE seminar on December 1st.
» Released OpenLB 1.5
April 14, 2022 at 12:00 | Adrian KummerländerToday we released OpenLB 1.5 which marks a major step forwards by including both support for usage of GPUs and for vectorization on CPUs. These performance focused improvements are the result of major refactoring efforts that spanned both a significant fraction of my time as a student and most of my first months as a doctoral student.
For some further information check out the performance section of the OpenLB website. A recent video augments this by some pretty visuals produced on HoreKa’s GPU partition.
» Submitted my first paper
August 4, 2021 at 15:30 | Adrian KummerländerToday I submitted the full paper of my talk at the 32nd ParCFD conference for publication.
There we consider the LBM algorithm’s propagation step as a transformation of the space filling curve used as the memory bijection. Specifically, a neighborhood distance invariance property is utilized to derive the existing Shift-Swap-Streaming (SSS) scheme as well as a new Periodic Shift (PS) pattern.
A special focus is placed on SIMD friendly implementation via virtual memory mapping on both CPU and GPU targets.
Both patterns are evaluated in detailed benchmarks. PS is found to provide consistent bandwidth-related performance while imposing minimal restrictions on the collision implementation.
The preprint is available on Researchgate as well as directly (PDF).
» Molecular Dynamics Simulation of the Benzene Dimer
March 31, 2021 at 20:05 | Adrian KummerländerOne of the last lectures for my master’s degree was on numerical simulation in molecular dynamics. For the examination project I developed a GPU MD code capable of reproducing certain preferred configurations the benzene dimer.
» Just-in-time volumetric CFD visualization
July 24, 2020 at 14:15 | Adrian KummerländerFor my seminar talk I wrote another LBM solver as a literate Org-document using CUDA and SymPy. The main focus was on just-in-time volumetric visualizations of the simulations performed by this code. While this is not ready to publish yet, check out the following impressions:
Further videos are available on my YouTube channel. e.g. a Taylor-Couette flow:
» Visualizing the velocity distribution of a hard sphere gas
March 24, 2020 at 21:42 | Adrian KummerländerThe velocity distribution of a system of colliding hard sphere particles quickly evolves into the Maxwell-Boltzmann distribution. One example of this surprisingly quick process can be seen in the following video: