CMake Cookbook

Learn CMake through a series of task-based recipes that provide you with practical, simple, and ready-to-use CMake solutions for your code.

The sources for the CMake Cookbook recipes are on GitHub.

My role: Co-author

We are working with students, researchers, and research software engineers from all disciplines to advance FAIRness of software management and development practices so that research groups can collaboratively develop, review, discuss, test, share and reuse their codes.

We offer training opportunities to researchers from Nordic research groups and projects to learn basic-to-advanced research computing skills and become confident in using state-of-the-art tools and practices from modern collaborative software engineering.

My role: Project lead
Research Software Hour

Research Software Hour is an online stream/show about scientific computing and research software. It is designed to provide the skills typically picked up via informal networks: each week, we do some combination of exploring new tools, analyzing and improving someone’s research code, and discussion.

Watchers can take part and contribute code to us which we analyze and discuss on stream.

We broadcast on Twitch Tuesdays at 20:30 Oslo time / 21:30 Helsinki time.

My role: Co-creator

Program for Atomic and Molecular Direct Iterative Relativistic All-electron Calculations.

My role: Co-author, CMake infrastructure, migration to Git and GitLab, code maintenance and plumbing, exchange-correlation integrator, visualization module, higher order response properties.
Nordic research software engineers

Co-building the community of Nordic research software engineers, preparing the first Nordic-RSE conference, and networking with fantastic people. Working on a map of RSEs as well as a knowledge map within NeIC.

I have contributed to the organization of SORSE: International Series of Online Research Software Events and the 2nd Intl. RSE Leaders Workshop 2020.


Serving presentation slides written in Markdown.

You can host your talk on GitHub or GitLab. Cicero will render it using remark of reveal.js on the fly. You can style your slides to your heart's content using CSS. No more "Can you please email me the slides after the workshop?". Talks become lightweight, reusable, versionable, branchable, and forkable.

Code is on GitHub. Documentation is on Read the Docs.

My role: Idea and initial implementation
Dalton and LSDalton

Together, the two programs provide an extensive functionality for the calculations of molecular properties at the HF, DFT, MCSCF, and CC levels of theory.

My role: CMake infrastructure, website, open-sourcing, migration to GitLab, OpenRSP integration, magnetically-induced currents at the MCSCF level.

CMake plugin composer. Simplifies bootstrapping new CMake projects and simplifies sharing reusable CMake building blocks across projects.

My role: Initial implementation

Program for the open-ended calculation of response properties. It connects to response equation solution routines, routines for differentiated one-electron and two-electron integral contributions, and routines for exchange/correlation contributions to enable the calculation of response properties to arbitrary order.

My role: CMake infrastructure, website, open-sourcing, exchange-correlation contributions.

Numerically tolerant end-to-end test library for scientific codes.

The aim of this library is to make the testing and maintenance of tests easy. The library allows to extract portions of the program output(s) which are automatically compared to reference outputs with a relative or absolute numerical tolerance to compensate for numerical noise due to machine precision.


ASCII to SVG Git log graph visualizer. Useful for teaching Git.


CDash hosting for research software.

My role: Running this service myself because it needed to be done. Please write me if you would like to use this.
Angstrom <-> Bohr

Angstrom to Bohr and Bohr to Angstrom conversion without commercials.


The objective of the SYMBIOSES project is to create an ecosystem based impact assessment and management tool providing fact-based, quantitative analyses of the potential consequences of petroleum developments and other activities in spatially managed ecosystems, mainly focusing on the Lofoten-Vesterålen area.

My role: Code maintenance, code optimization, computations, web app. I was part of this project for two years.

Numgrid is a library that produces numerical integration grid for molecules based on atom coordinates, atom types, and basis set information. This library can be built with C, Fortran, and Python bindings.


XCint integrates the exchange-correlation (XC) energy ExcExc and the elements of the XC potential matrix VxcVxc, as well as their derivatives with respect to electric field and/or geometric perturbations. The integration is performed on a standard numerical grid.

Code is on GitHub. Documentation is on Read the Docs.


XCFun is a library of exchange-correlation (XC) functionals to be used in density-functional theory (DFT) codes. XCFun follows a unique implementation strategy which enables the computation of derivatives of the XC functional kernel up to arbitrary order. It does so by relying on forward-mode automatic differentiation.

Code is on GitHub. Documentation is on Read the Docs.

My role: Code maintenance, testing.

This library computes arbitrary-order exchange-correlation function(al) derivatives using JAX.

The emphasis of this project is on ease of use and ease of adding functionals in Python. The focus is not (yet) on performance. Our hope is that this project can make it easier to test new implementations of functional derivatives but maybe also used directly to provide functional derivatives in a density functional theory program.

My role: Co-author, initial implementation.

The GIMIC program calculates magnetically induced currents in molecules. You need to provide this program with a density matrix in atomic-orbital (AO) basis and three (effective) magnetically perturbed AO density matrices in the proper format.

Code is on GitHub. Documentation is on Read the Docs.

My role: Code maintenance, CMake infrastructure, testing, code optimization.

Plots densities directly in your browser.


Balboa computes Gaussian basis functions and their derivatives. In the process of rewriting to Rust.


Compute vibrational levels, wavefunctions, and expectation values using the Numerov-Cooley algorithm.


Generic input parsing library, speaking in tongues.

Code is on GitHub. Documentation is on Read the Docs.

My role: Co-author

Mesh generator for unstructured triangular grids.

In the process of rewriting to Rust.


Fast 2D nearest neighbor search with an angle.

Coastal express

Compute nearest neighbor distances along the coast with a view angle.


Fast points-in-polygon test and distances to polygons.


The Strategic Mastery of Russian Tool.

My role: Implemented the web app.

THREAT-DEFUSER explores the role of "soft" information strategies propagated through mass and social media that constitute hybrid warfare. We investigate Norwegian perceptions of Russia, as well as Russian perceptions of Norway, in the context of Norwegian national security.

My role: Website, soon more.
Python 'open mike'

Eventually it could be a platform where participants show something useful to others. But it will take some time to warm up and until then each event will have a theme and we will suggest exercises. Participants can prepare these exercises but do not have to. We go through the exercise and solutions together but those who have solved the exercises can present alternative solutions which we discuss together.

My role: Kept it alive for a while, might restart soon.

Find huge additions in Git history.


Tool to profile usage of HPC resources by regularly probing processes using ps. The code can do two things: take snapshots (sonar snap, typically every 20 minutes or so), and map them (sonar map, whenever you like) to applications/projects/users. Integrates with sonar-web to plot daily/weekly/monthly CPU usage summary for clusters.


Converts ASCII text to a graph (represented as a dictionary of connections and angles). It can represent directed and undirected graphs.

Space Invaders

A classic game. Unfinished fun project for teaching programming. Also useful for procrastinating something else.

Code is on GitHub.

Go game

Go game for the browser, implemented using Vue.js.

My role: Co-author
Where is the ISS?

Tracks the International Space Station and displays its current position on the globe.