G. P. Müller
My open source hobby projects, created by me and in collaboration with friends and colleagues
Follow @GPMueller
A major output of my PhD project, Spirit is a scientific software for simulating magnetism on the atomic scale.
Try
Spirit Web!
Originally working on a Fortran codebase, I created this project to get access to better portability, better libraries and be able to add a real-time visualisation. Spirit runs on everything, from your smartphone to supercomputers and is already used by a multitude of researchers around the entire world, cited in a variety of scientific publications: G. P. Müller et al. (2019)
A clang-based cross-platform C++ build system written in Python.
Having become fed up with the idiosyncracies of CMake already 5 years ago, I decided I had to try and do a better job for small C++ projects.
clang-build makes a set of opinionated assumptions in order to provide an easy way to build small projects without any configuration. Larger projects will often still require only little configuration, while projects like boost will still be quite easy to setup (though boost requires a lot of configuration due to its sheer size).
A basic cross-platform GUI application with some example features.
It is automatically built and released via the CI and deployed as a web app to gpmueller.github.io/imgui-app.
This is a hobby project on which I am trying to setup the most generic GUI application I can. The web app can already trigger desktop notifications, but there is lots more I would like to do.
Cross-platform exception backtracing using standard C++.
A topic that comes up regularly in C++ is how to deal with errors. Because I could not find a satisfactory solution without platform-specific dependencies, I created my own solution. The only drawback is the reliance on exceptions, which somewhat limits the possible applications.
By wrapping your functions into try
/catch
blocks, you can use the
trace library to generate clean backtraces through your call stack as the exception is thrown
up the call stack until it reaches the point where you handle it.
For a more minimalistic example, see github.com/GPMueller/mwe-exception.
Using trace, the following snippet from an example
try
{
detail::library_function();
return API_RETURN::SUCCESS;
}
catch( const std::exception & ex )
{
detail::library_handle_exception(ex);
return API_RETURN::FAILURE;
}
may produce a backtrace that looks something like this:
Library API: Exception caught in function 'api_function'
Backtrace:
~/git/mwe/src/detail/Library.cpp:17 library_function failed
~/git/mwe/src/detail/Library.cpp:13 could not open file "nonexistent.txt"
How to use Eigen3 inside CUDA kernels.
An example kernel looks like this:
__global__ void cu_dot(Eigen::Vector3d *v1,
Eigen::Vector3d *v2,
double *out, size_t N)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if(idx < N)
{
out[idx] = v1[idx].dot(v2[idx]);
}
return;
}
An expression template library to do some vector- and matrix-math using Eigen3 with some nice slicing and dicing.
The following example shows some operations, functions and slicing
Field sf1{1,2,3,4,5,6}, sf2{1,2,3,4,5,6};
Field vf1(5), vf2(5);
// Element-wise dot product
Field sf_dot = vf1.dot(vf2);
// Operate on subsets
sf1[{0,1,2}] = sf2[{0,1,2}] + sf_dot[{3,4,5}];
// Assign slice of field from subset of other field
sf2.slice(0,1) = sf1[{1,2}];
This repo provides an scripts that performs common installation steps like setting up the locale and installing commonly used packages.
A file I/O library for the OOMMF vector file format. It has a C interface and wrappers in Python and Fortran.
A clang-based cross-platform C++ API documentation generator written in Python.
This is a list of my papers, published in peer-reviewed scientific journals
Coding is a passion for me, in particular open source, portable cross-platform software. I love simplifying tasks and automating anything repetitive. I always strive to increase the quality of my code as much as I can and to make it readable and simple.
I am a software developer in autonomous driving since 2020, a topic that fascinates me not only due to its relevance to our society, but also its great complexity and technical depth.
I completed my PhD in theoretical Physics in 2019, with a focus on simulations and visualisations. My favourite aspect was the simplification of many tasks, including teaching, which I was able to achieve by creating modern software that runs well on everything from HPC machines to smartphones.