We develop a number of codes, some bigger than others, to carry out different tasks in the wide research are of atomistic modeling. The official repository for the public codes is Miguel Caro’s Github portal: Browse below for the available codes and a short description of their functionality.


TurboGAP and the associated GAP_turbo libraries allow you to run MD simulations with machine learning potentials of the GAP flavor (Bartók et al, 2010). This is the main code being developed in our group at the moment. You can check out the TurboGAP wiki at and the Github repos for TurboGAP ( and soap_turbo ( We are actively developing new potentials to be used with TurboGAP. soap_turbo is part of the libAtoms ecosystem and can be used in combination with QUIP/GAP (; you can run the TurboGAP potentials with QUIP and (some of them, depending on features) also with LAMMPS, via the QUIP LAMMPS plugin, and you can even use QUIP/GAP to fit your own GAP potential. For scientific info on soap_turbo descriptors, refer to Caro, 2019. While we manage to put together a proper implementation paper for TurboGAP, you can get some scientific details from Muhli et al, 2021. For general information on both, please refer to the TurboGAP wiki (


DoSPT allows you to post process trajectories from molecular dynamics simulations and compute entropies and other thermodynamic properties from them according to the 2PT formalism (Lin et al, 2003). DoSPT has extended functionality compared to the original implementation, such as improved convergence, and it can handle bond breaking and solid/liquid interfaces. It has its own wiki page on


carve.f90 cuts out a spherical chunk of an atomic structure, centered on a specific atom, and it passivates broken bonds and follows some simple chemical rules to avoid unphysical resulting structures. Therefore, the carved structures may extend beyond the boundary of the cutoff sphere. At the moment, the code can only handle systems containing C, H and O (CHO). Why on earth would you want to do this? The most common scenario would be that you want to compute some local properties of the original atomic structure, but it is so large that your method of choice cannot handle it. For example, you generate a structure using a machine learning force field containing thousands of atoms, and then want to calculate some bonding properties using DFT or some other (significantly more expensive) electronic structure method where running the calculation on the whole structure is impractical, like in Caro et al, 2020. To get hold of carve.f90 visit Github:


MattPy is a collection of routines written in Python that allow you to manipulate material tensors: piezoelectric tensors and stiffness tensors. These manipulations involve rotation and transformation between different forms (matrix, vector, Voigt) and some fancy functionality related to projecting a tensor of a given symmetry onto another symmetry, a nice method proposed by Moakher and Norris. My “implementation” paper is on the arXiv ( and you can check out code and documentation (which has some details on the method) on Github.


fast-kmedoids is a k-medoids Python implementation that uses Fortran libraries and f2py for faster execution. k-medoids performs unsupervised data classification based on a distance metric defined between data points. The number of classes, or clusters, is defined by the user and data points grouped together around their medoid, according to the user-provided distance matrix. Visit Github to get the code: