Bachelor's Thesis in Astrophysics

During the fall of 2018 I worked on my bachelor's project at the department of Astronomy and Theoretical Physics at Lund University under the supervision of Florent Renaud. The project was called Fast Simulations of Star Cluster Evolution.

The project involved recreating a similar program to the one of Alexander and Gieles [2012] and Gieles et al. [2014], where star cluster evolution was simulated using a numerical model, but also adding Renaud's theory of potentially escaping stars, for the purpose of conducting more detailed simulations. My job was to create this program, written in C++, and present our findings by the end of the project. We were very pleased with the result as the simulation showed to be as predicted by N-body simulations. The main difference from the N-body simulation was that this simulation turned out to be about 24 000% faster (yes three zeros).

The project was conducted at half time between September of 2018 and Feburary of 2019 (a prolongation of one month was added due to me having knee surgery in October of 2018).


The evolution of globular star clusters tells the history of the formation of galaxies, how stellar streams might have formed and how the future of the Universe might look like. Although the general theoretical background of the evolution is well understood, it is difficult to conduct accurate and realistic computer simulations of objects containing thousands of interacting bodies. This project introduces a new method tackling this issue, treating star clusters as point objects while they are losing stars as a result of tidal stripping. This is all conducted based on the concept of potential escapers. Combining the computational effectiveness of a simplified approximation of a star cluster with the accuracy of an N-body simulation, this project introduces a new option for globular star cluster simulation.

The code written for this model allows to introduce any star cluster into any external potential. The star cluster is then described using five main coupled differential equations: number of stars, half mass radius, total energy, core radius and density profile, which, when integrated using a 4th order Runge-Kutta scheme, allows to model the full evolution of the cluster in less than a minute on a single computer. Tracer particles for potential escapers are implemented so that the tidal stripping works in constant as well as varying tidal fields. The results of this project show that the star loss over time is comparable to the ones conducted using much slower direct N-body simulations, e.g. the step-like loss of stars in elliptical tidal fields, while at the same time having a run-time of about a few minutes. Further development of this method might contribute to the understanding of stellar streams and build-up of stellar populations in galaxies.

Picture of NGC 5907 with visible stellar streams, by 0.5-m Blackbird Remote Observatory telescope, 2006.

The Program Made in C++

The code, which was reproduced using Alexander and Gieles [2012] and Gieles et al. [2014], incorporates solving five differential equations using a fourth order Runge-Kutta integrator. These equations describe the entire evolution of the cluster. Using an input file, the start number of stars, the radius of the cluster and other variables could be specified. The start number would vary between 4-, 16- or 65 thousand stars and then the program would subtract stars according to the mass loss of the cluster until reaching 200 stars (the point at which the model stops working).

The problem with numerical methods such as Gieles et al. [2014] is that they only work to simulate star cluster evolution for constant gravitational potentials. However, in reality, globular clusters experience potentials that vary over time (normally when orbiting a galaxy, these clusters would follow more of an elliptical orbit). Therefore, we added the potential escaper class to the program, so that when experiencing heavier pull, the potentially escaping stars would be evaluated if they would be stripped from the cluster or not.

In a very academic approach, I decided to store the data of these stars in a linked list. This allowed me to dynamically create and destroy list entries as I desired. The code produced during this project can be found here.