Below you'll find some of my latest projects. They are mainly modeling and simulation tools for computational physics, but a few hobby projects have also found their way into this list. You may find more of my projects under my Gitlab account.

Bluetooth beacons and cloud analytics

Building access control and home security system with Bluetooth sensor beacons, cloud analytics, and thin web apps. More details available shortly.

Online service stack

Setup of domains, mail stack, web hotel, and SSL certs for family and friends. Email me if you need such a setup. More details available later.


FInite Element Nanostructure Dynamics is a software package for the simulation of single-electron quantum mechanics including interactions with inhomogeneous laser vector potentials. Such systems include, e.g, atoms, some molecules, and nano­structures.

FIEND is based on finite element discretization of the time-independent and time-dependent Schrödinger equations. It's combined with the state-of-the-art FEM-suite FEniCS, and massively parallel linear algebra toolboxes such as PETSc and SLEPc. FIEND is written in Python 3.6, and the source code can be found at Gitlab.


Bill2d is a C++ software package for classical simulation two-dimensional Hamiltonian systems with single or many particles. It can be used to simulate, e.g., hard-wall billiards, open billiards and periodic systems including, e.g., external potentials, particle-particle interactions, and a magnetic field.

The software and additional scripts can be readily used to calculate and visualize several aspects of the systems including, e.g., particle trajectories, histograms, Poincaré sections, diffusion coefficients, and survival and escape probabilities.

The source code is hosted at Gitlab. You can find the paper describing Bill2d at Comp. Phys. Comm. 199, 133-138 (2016).


This Python package contains a modified version of the Qprop code written by Dieter Bauer et al. On top of Qprop we've built an optimization framework that combines simple Gaussian envelope pulses with single carrier wavelength to produce an experimentally realizable — yet flexible multicolor waveform.

Recently, QPropOCT has been used successfully to optimize the excitation of Li-atoms to their Rydberg states, for more details see Phys. Rev. A 98, 053422 (2018).


#include "formula_parser.h"
#include <iostream>
int main(){
    formula_parser parser;
    parser.add_variables( {"x", "y"} );
    parser.add_constant( "radius", 50.0 );
    parser.parse( "x^2+y^2-radius^2" )
    auto function = parser.get_function();
    std::cout << function( {1.0, 2.0} ) << std::endl;

formula_parser is a small library for parsing a string containing a mathematical expression, e.g., "x^2-cos(2*besselJ(2*pi*y))" to a C++'s std::function which can be evaluated with different values for the parameters x and y.

formula_parser also contains C and Fortran interfaces for integrating it more easily to existing software.

The source code is hosted at Gitlab.



I've been practicing Dancesport for quite a while. Nowadays me and my partner focus on International Ballroom (a.k.a. standard) dances. We practice as a part of the Step dance club in Tampere.

We've also been teaching dancesport for both younglings and adults. These include weekly lessons throughout the year and a few summer camps.


For me, fishing is a way to put food on the table. Mainly I use fishing nets, both during winter and summer, but I've found angling to be an excellent relaxation method.



Software development

I've been developing software in C++ and Python for years. This includes work on high-performance modeling tools and simulation codes, but also some front-end and back-end development. I'm most familiar with software development for Linux and macOS, but I've also dabbled in iOS and bare metal (Arduino) programming.

I have a decent grasp of parallelism – including, e.g., SIMD, threading, OpenMP, and MPI, but I've also got some hands-on experience with Go's channels.

As for other languages, I've written a few small apps in Go, some prototypes with Qt/C++ and Java, lots and lots of Bash scripts, and naturally, I've been exposed to Javascript and PHP.

Predictive modeling

I've done numerous simulations and developed quite a few codes for predictive modeling using, e.g., ordinary differential equations, partial differential equations, and difference equations.

The computational methods I'm familiar with include, e.g., Finite Element Method, Boundary Element Method, Finite Difference Method, and numerous time evolution schemes. The picture above shows an example simulation of the temperature profile of a simple heatsink on a modern CPU.

Much of the simulations were done in the context of atomic physics and nanodevices, but I've also spent some time modeling the propagation of electromagnetic pulses.


I have been teaching and designing exercises and exams in multiple physics and mathematics courses. These include, e.g.,

  • mathematical methods in Physics
  • newtonian mechanics, and
  • solid state physics.

In addition, I redesigned and lectured the Computational Physics course at the Tampere University of Technology in 2018.

Data analysis

A large part of my work has been analyses of various forms of numerical data. Often this includes digging deep into the data and finding patterns and clues on what the data means and what information we can extract. In practices, that means lots and lots of time series analysis, machine learning, statistics etc.

System administration

I'm a .fi-domain registrar and handle sysadmin duties for a small server hosting a few domains. This includes setup of the server's software stack, DNS and networking configuration, backup setups, databases, ... and most importantly: automation and security of the server.

Process automation

Process automation is one thing I feel very passionately about. If one spends significant time doing repetitive tasks on a computer, the task should be automated!

For me, this includes, e.g., automation of the servers I handle – including, e.g., their initial setup, failure warnings via SMS, domain migrations, etc. Also much of my teaching and grading stack for university courses is automated.

And finally, automation naturally includes software development. I've setup modern software development practices in the Computational Physics unit at Tampere University, including, e.g., version control, continuous integration and delivery/deployment, and automated software testing.

Curriculum Vitae

Complete CV in LinkedIn

My core skills are in data analysis, software development, modeling of various processes and phenomena. I have a strong background in mathematics and physics, and I've done software development of numerical and computational methods.

The following is a short list of recent work experience and some details on my education. Please consult my LinkedIn profile for more information.

Recent work experience

Doctoral Student, Tampere University
Finalization of my Ph.D. thesis.
Doctoral Student, Tampere University of Technology
Research on light-matter interaction for applications in ultrafast nanoscale microscopy. Software development in C++ and Python. Data-analysis. Supervising undergraduate theses and managing research assistants.
Lecturer, Tampere University of Technology.
Redesign and teaching of the course Computational Physics
Teaching Assistant, Tampere University of Technology
On the course Solid State Physics


Doctor of Science in Technology, Technical Physics
Master of Science, Physics
Bachelor of Science, Physics

Positions of trust

Management Committee Member (substitute) for the EU Cost Action CM1204.
Auditor for the Jyväskylä section of the Finnish Physical Society.

Event organization

Head of the organizing committee for the Computational Physics Autumn School MOCCA, Finland
Head of the organizing committee for the 3rd annual winter meeting of the CMMP Tampere network, Finland
Head of the organizing committee for the 3rd annual summer meeting of the CMMP Tampere network, Finland
Head of the organizing committee for the 2nd annual winter meeting of the CMMP Tampere network, Finland
Member of the organizing committee of the national EPIC symposium, Finland
Member of the organizing committee for the 2nd annual summer meeting of the CMMP Tampere network, Finland


  1. TINIE — Transport In Non-Interacting Equilibrium, R. Duda, J. Keski-Rahkonen, J. Solanpää, and E. Räsänen, manuscript in preparation.
  2. FIEND — Finite Element Quantum Dynamics, J. Solanpää and E. Räsänen, submitted.
  3. Normal and Anomalous Diffusion in Soft Lorentz Gases, R. Klages, S. Gil-Gallegos, J. Solanpää, M. Sarvilahti, and E. Räsänen, Physical Review Letters (in print, 2019).
  4. Energy-dependent diffusion in a soft periodic Lorentz gas, S. Gil-Gallegos, R. Klages, J. Solanpää, and E. Räsänen, European Physical Journal (in print, 2019)
  5. Control of Rydberg-state population with realistic femtosecond laser pulses, J. Solanpää and E. Räsänen, Phys. Rev. A 98, 053422 (2018)
  6. Optimal control of photoelectron emission by realistic pulses, J. Solanpää, M. Ciappina, and E. Räsänen, Journal of Modern Optics 64, 1-9 (2017)
  7. Scaling relations for the ground-state properties of a harmonic electron droplet, A. Odriazola, J. Solanpää, I. Kylänpää, A. González, and E. Räsänen, Phys. Rev. A 95, 042511 (2017)
  8. Bill2d – a software package for classical two-dimensional Hamiltonian systems, J. Solanpää, P. J. J. Luukko, and E. Räsänen, Comp. Phys Comm. 199, 133-138 (2016)
  9. Optimal control of high-harmonic generation by intense few-cycle pulses, J. Solanpää, J. A. Budagosky, N. I. Shvetsov-Shilovski, A. Castro, A. Rubio, and E. Räsänen, Phys. Rev. A 90, 053402 (2014)
  10. Coulomb-interacting billiards in circular cavities, J. Solanpää, J. Nokelainen, P. J. J. Luukko ja E. Räsänen, J. Phys. A: Math. and Theor. 46, 235102 (2013)
  11. Many-particle dynamics and intershell effects in Wigner molecules, J. Solanpää, P. J. J. Luukko ja E. Räsänen, J. Phys.: Cond. Matter 39, 395602 (2011)


  • Twitter solanpaa
  • LinkedIn solanpaa
  • Gitlab solanpaa