Scientific software
Scientific software is an essential part of my research: it turns mathematical ideas into methods that can be tested, reused, and extended. My main programming language is C++. Since 2024, Julia has become a second focus, both in teaching and in research software.
My work ranges from long-lived finite-element infrastructure used by several research groups to small, focused libraries developed around a particular mathematical question. Across these different scales, I value correctness, composable abstractions, and software that remains understandable to its next contributor.
Core software ecosystems
C++ · Dune ecosystem
Dune
The Distributed and Unified Numerics Environment is the foundation for much of my current software work. I contribute to core, staging, and extension modules and maintain several modules of my own. Dune’s modular design lets me develop a focused capability such as curved geometry, periodic topology, tensor data structures, mesh comparison, or file I/O. The module does not have to be coupled to one particular discretization framework.
This modularity has been especially productive for my work on high-order surface finite elements. Besides the AMDiS rewrite, dune-curvedgrid and the related modules dune-curvedgeometry, dune-vtk, and dune-gmsh4 are my most important contributions to the ecosystem.
C++ · Finite elements
AMDiS
AMDiS is a finite-element toolbox for rapidly developing and solving systems of partial differential equations. I rewrote the legacy framework as a Dune module, retaining its strongest ideas while redesigning major components from scratch. The parallelization now builds on Dune’s parallel-grid infrastructure. Grid functions, linear algebra, and the generalized finite-element backend are new developments.
The framework continues to evolve through contributions from members of the group. Its more flexible architecture has enabled new applications and has supported several master’s and doctoral projects.
Geometry, grids, and numerical infrastructure
2020 · C++ · Surface finite elements
dune-curvedgrid
A meta-grid that maps the flat geometry of grid elements to curved geometries. Together with dune-curvedgeometry, which represents curved elements through local-function parametrizations, it provides reusable geometric infrastructure for high-order surface finite-element methods. The module has led directly to several developments in my research on surface PDE discretizations.
2025 · C++ · Grid topology
dune-periodic
A Dune module that turns a regular grid into a topologically periodic grid. Periodic domains are required in several material-science and biological-tissue models, where computations represent only a small, repeating part of a much larger system. The project grew from a master’s thesis I supervised. I subsequently developed two production-ready grid-wrapper approaches from its initial implementation.
2024 · C++ · Computational geometry
dune-meshdist
A Dune module for computing the Hausdorff distance between parametrized grids. I developed it for joint work with Ganghui Zhang, where we needed several Hausdorff-distance-based methods to compare numerically evolved surfaces.
2022–present · C++ · Linear algebra
dune-tensor
Flexible dense and sparse tensor data structures based on the std::mdspan interface. The long-term aim is to provide a modern, higher-dimensional alternative to Dune’s traditional vector-and-matrix abstractions and, eventually, integrate it into the core modules. Its development has also informed work on matrix-valued finite elements.
2018,2019 · C++ · Scientific data input and output
dune-vtk, dune-gmsh4
First, a reader and writer for the VTK XML file formats, designed for exchanging and visualizing grid-based scientific data within Dune applications. Second, a grid reader for the Gmsh MSH file format. Both file readers and writers are developed to support curved geometries.
2016 · C++ · Discrete exterior calculus
dune-dec
A Dune module implementing discrete exterior calculus for the numerical solution of partial differential equations, including surface PDEs.
Julia packages
These packages are part of a newer strand of my software work. Teaching introductory programming with Julia led me to use the language for compact, reusable research tools as well. I also maintain BibFormatter.jl, a small companion tool that inserts references from a BibTeX database into generated code.
2026 · Julia · Geometry
SurfaceMinkowski.jl
Utilities for working with curves on surfaces, developed alongside our research on surface Minkowski tensors. In particular, the package computes eigenspectra of irreducible surface Minkowski tensors on several kinds of surfaces.
2026 · Julia · Finite elements
FiniteElementQuadratureRules.jl
A collection of tabulated quadrature rules for finite-element codes. It is the Julia realization of a longer-running effort to provide software authors with a shared platform from which suitable rules can be generated directly for their implementations.
Legacy framework
The original AMDiS framework is no longer my main development focus, but it remains part of the history behind the current Dune-based implementation.
Legacy · C++ · Finite elements
(Legacy) AMDiS
The original Adaptive MultiDimensional Simulation framework was the basis of numerous research projects and is still used by some researchers. Built on an early version of the Alberta finite-element library, it accompanied my work from my first day at the institute. My contributions included internal abstractions such as BaseProblems, which package complete PDE components into separately testable units, and an expression-template engine for discrete functions with automatic differentiation. Experience with this codebase provided both the ideas and the motivation for the later Dune-based rewrite.
Software principles
- Correctness: implementations should make mathematical assumptions explicit and be checked against reference problems.
- Composability: focused modules and clear interfaces allow numerical methods to be combined without tying them to one application.
- Reproducibility: parameters, environments, data transformations, and relevant references should travel with the computation.
- Sustainability: readable abstractions, tests, documentation, and shared ownership matter for software that outlives one paper.
Community and maintenance
I am a core developer in the Dune and AMDiS projects. This work includes planning software development, reviewing contributions, and maintaining the software stack used at the institute. I have co-organized Dune user and developer meetings and contributed to introductory courses and workshops for new users.
Contributing
Bug reports, focused feature proposals, and documentation improvements are welcome through the linked project repositories.