Projects

On this page, I briefly describe the major projects I was involved in. My git repository can be found at gitlab.com.

Last update: Jan 6, 2018

Fluent.ai

My main responsibility is building Fluent.ai's software for current computers including personal computers and a wide range of mobile devices

  • x86, x86-64, ARMv7, ARMv8 (aarch64)
  • Machine learning, neural networks, neural network training

deepstream.io C++ Client

Originally hired as a tech writer, I was solely responsible for the initial deepstream.io C++11 client implementation including WebSockets connectivity, message serialization, message deserialization, and handling of deepstream event as well as user presence capabilities. The client was tested on OS X, Amazon Linux AMI, Raspbian (ARMv7 CPU), and with Travis CI.

Languages and tools used:
C++11, GCC, Clang, Clang static analyzer, Flex, Poco C++ libraries, Boost.Test, Travis CI, Valgrind, American Fuzzy Lop, git, CMake

Project duration:
Dec 2016 - Feb 2017

The source code can be found in my git repository and on my GitHub work account.

DCGeig

Eigenvalues and their eigenvectors are important tools for analysis in many disciplinces. For example in structural mechanics, eigenvalues and eigenvectors (called eigenfrequencies and eigenmodes) enable the analysis of free vibrations, they can be used for modal superposition, and they are helpful in studying noise, vibration, and harshness (NVH). DCGeig is a solver for large, sparse generalized eigenvalue problems Kx = \lambda M x arising, e.g., from finite element analyses of elliptic PDEs or time-discrete hyperbolic PDEs. It computes the smallest eigenvalues and it is especially well-suited if a large number of them is needed. Moreover, DCGeig is a black-box solver meaning it requires only the matrices and the maximum desired eigenvalue for proper operation.

DCGeig is a further advancement of the sparse eigensolver in my master's thesis. Numerical stability was improved further, parallelism was increased, and convergence improved by means of Chebychev polynomials.

Languages and tools used:
Python 2, Python unittest, NumPy, SciPy, Cython, METIS, git, CMake

Project duration:
Apr 2016 -

The source code can be found in my git repository.

Eigensolvers for generalized eigenvalue problems with Hermitian positive semidefinite matrices

Based on LAPACK, I implemented three solvers for dense problems for my master's thesis:

  • a solver deflating infinite eigenvalues before calling the LAPACK standard solver,
  • a GSVD-based solver computing the GSVD directly with LAPACK, and
  • a GSVD-based solver computing the GSVD by means of QR factorizations and the CS decomposition.

The solvers were written once in C++ with templates so that single and double precision implementations were generated by the compiler. The code was tested in Python. The foreign function interface was done with "extern C" declarations in C++, C headers, and Cython.

The dense solvers were later used in a solver for large, sparse generalized eigenvalue problems with Hermitian positive definite matrices. This work was also part of my master's thesis.

Languages and tools used:
C99, C++11, Python 2, Boost Test, Python unittest, NumPy, SciPy, Cython, METIS, git, CMake

Project duration:
Sep 2015 - Mar 2016

Source code:
Link

LAPACK

From Wikipedia:
LAPACK (Linear Algebra Package) is a standard software library for numerical linear algebra. It provides routines for solving systems of linear equations and linear least squares, eigenvalue problems, and singular value decomposition. It also includes routines to implement the associated matrix factorizations such as LU, QR, Cholesky and Schur decomposition.
I improved the documentation. I found and fixed bug 139.

Languages and tools used:
LAPACK is written in Fortran 77 and Fortran 90. The documentation is generated from Doxygen comments.

An eigensolver based on AMLS and SIM

For the DFG research center Matheon project C22 and for theĀ Einstein Center for Mathematics Project D-OT3, I implemented a solver for generalized eigenvalue problems arising from finite element discretizations in structural mechanics based on automated multilevel substructuring (AMLS) and the subspace iteration method (SIM). The findings were used in the paper Adaptive numerical solution of eigenvalue problems arising from finite element models. AMLS vs. AFEM (DOI: 10.1090/conm/658/13127).

Languages and tools used:
Matlab, METIS, C99, git

Project duration:
Jan 2013 - May 2015

Compiler back-end

For my bachelor's thesis, I added a compiler back-end generating JavaScript to an existing compiler for the simple functional programming language SL ("simple language").

Languages and tools used:
Haskell98, JavaScript (ECMAScript 5), HTML, git, SVN

Project duration:
July 2011 - Oct 2011

Project Forschungskooperation Netzoptimierung (ForNe)

The project was concerned with the develop and implementation of mathematical optimization-based methods for checking realizability of stationary gas flow situations (paraphrased from here). My tasks included

  • the statistical analysis of the customer-provided gas network,
  • visualizing solutions computed with Lamatto++,
  • dynamic visualization of gas flow in a gas network on a map of Germany in Google Earth,
  • and aiding research assistants in comprehending and presenting computed solutions as well as gas network properties.

Examples of the visualization can be found in the figures of the article Gas Network Topology Optimization for Upcoming Market Requirements on the last page.

Languages and tools used:
C++98, Python 2, CherryPy, Google Earth, KML, XML, OpenGL 1.1, GNU Make, SVN, git

Project duration:
Oct 2009 - Mar 2012

Software for modeling and visualization of product-service systems

Details (in German)

Languages and tools used:
C# 3.0, Windows Presentation Foundation, .NET framework

Project duration:
Apr 2009 - Sep 2009