Atomsk

Le couteau suisse pour les simulations atomiques

Avril 2020 : Atomsk a 10 ans !

Atomsk est né quelque part entre février et avril 2010, il a donc 10 ans en avril 2020. C'est l'occasion de raconter son histoire : comment ce programme est né, a grandi, et comment de nombreuses personnes y ont contribué.

La génèse

Au cours de mon Master à l'Université de Rennes, j'ai appris le Fortran et programmé mes premiers outils pour construire des systèmes atomiques : du graphite et des nanotubes de carbone. Puis, durant ma thèse au LMP (aujourd'hui intégré à l'Institut P') à Poitiers, je me suis tourné vers des systèmes métalliques à surfaces libres pour en étudier le comportement mécanique et la nucléation de dislocations, en utilisant XMD et LAMMPS pour réaliser les simulations, et Atomeye pour la visualisation. Après cela, j'ai travaillé comme post-doctorant à l'institut Fraunhofer-IWM à Freiburg en Allemagne, pour étudier les dislocations dans des matériaux à structure perovskite, et pour cela j'ai utilisé VASP et LAMMPS pour les simulations, et ddplot et VESTA pour l'analyse.

À ce stade (on était alors en 2009), j'avais l'impression de passer beaucoup de temps (de perdre du temps même) à développer et re-développer des codes qui réalisaient tous les mêmes opérations élémentaires : créer des super-cellules, convertir des fichiers d'un format vers un autre, et ainsi de suite. J'avais différents petits programmes pour faire tout cela, et ils contenaient beaucoup de code en double, difficile à maintenir et à étendre. Autour de moi, de nombreux collègues avaient aussi chacun leurs codes personnalisés, spécifiques à leur sujet de recherche et au type de simulation et d'analyse qu'ils réalisaient. Personne ne partageait ses codes car ils étaient trop spécialisés, difficiles à étendre à d'autres applications, et soyons honnêtes, pour la plupart, développés à la va-vite, remplis de bogues et codés dans des langages différents.

C'est alors que j'ai décidé de créer un programme pour générer, manipuler et convertir les fichiers de positions atomiques, qui soit général et facile à étendre. Un programme qui supporterait tous les types de stucture atomiques, peu importent le type de réseau cristallin (cfc, cubique centré, perovskite...) ou la composition chimique. Un programme qui supporterait les différents formats de fichiers dont j'avais besoin, et qui convertirait facilement depuis n'importe quel format vers n'importe quel autre (LAMMPS, VASP, Atomeye...). Un programme qui implémenterait toutes les transformations élémentaires dont chacun a besoin : créer une maille élémentaire, l'orienter, la dupliquer, et ainsi de suite.

Il fallait que je donne un nom à ce programme, et puisqu'il n'était pas destiné à être partagé je l'ai appelé "PIKASHU", un acronyme amusant qui signifiait "PIerre's Swiss-army Knife for handling Atomic file formats in a Simple and HUman way". Une version a été marquée "Beta 0.1" le 27 avril 2010 -considérons cette date comme celle de la naissance de ce programme. En fait, il s'agissait d'un agglomérat de différentes routines que j'avais développées dans les années précédentes, chacune d'entre elles lisant un fichier XYZ et en écrivant un autre. Cela nécessitait de lire et d'écrire un fichier sur le disque à chaque opération, ce qui était très inefficace. Le lien ci-dessous vous permet de télécharger une version qui date du 16 juin 2010, l'une des plus anciennes versions que j'ai réussi à récupérer sur mon disque.

J'en étais le seul utilisateur, et aussi le plus critique. À l'endroit où je travaillais, tous les dossiers utilisateurs étaient partagés sur le réseau, aussi l'écriture et la lecture de fichiers semblait-elle prendre un temps infini à chaque fois que j'exécutais ce programme. À la fin de l'année 2010 j'avais supprimé tous ces accès disques inutiles, et les données étaient directement transmises d'une routine à l'autre -tout se passait désormais dans la mémoire (RAM), rendant le programme bien plus rapide.

PIKASHU a attiré la curiosité de mes collègues, qui m'ont demandé de le partager. Matous Mrovec, Adham Hashibon, Pavel Marton, et les étudiants en thèse de l'institut Fraunhofer-IWM, ont été les premiers utilisateurs du programme. Ils m'ont rapporté des bugs et fait des suggestions qui l'ont amélioré de bien des façons.

L'en-tête que les premiers utilisateurs voyaient dans leur terminal à chaque fois qu'ils exécutaient PIKASHU.

Afin de garder une trace des changements j'ai commencé à utiliser un gestionnaire de version, et mon premier choix a été SVN. Distribuer mon code m'a aussi incité à réfléchir au type de licence. Dès le début, j'ai décidé de le rendre Open Source sous une licence libre (la General Public License), parce que je crois fermement qu'un scientifique doit partager ses recettes, et non pas se cacher derrière un programme de type "boîte noire".Tout le monde doit être capable de vérifier comment j'ai implémenté les choses, et de dénoncer les erreurs que j'ai pu faire. Cela ne peut que m'aider à résoudre les erreurs et améliorer le programme.

En 2011 Matous Mrovec m'a aidé à implémenter la résolution des équations donnant les déplacements dûs à une dislocation rectiligne dans un milieu anisotrope. Je suis parti de l'un de ses programmes (contenant certains commentaires en Tchèque), que j'ai adapté et branché dans Atomsk. Résoudre ces équations a introduit la dépendance à la bibliothèque LAPACK. À cette époque, j'ai aussi rendu PIKASHU disponible sur ma page personnelle.

De PIKASHU à Atomsk

Peu après avoir commencé un nouveau post-doc au laboratoire UMET à l'Université de Lille, j'ai pris plusieurs décisions concernant ce code. D'abord, j'ai voulu changer son nom en quelque chose de plus simple à retenir, et qui évoquerait des atomes et les simulations atomistiques : en 2013 il est devenu Atomsk. L'année suivante j'ai changé de méthode de suivi de version en optant pour GIT et un dépôt public hébergé par GitHub. Je n'ai pas pris le soin de convertir l'historique SVN pour GIT, et donc tout l'historique des versions précédant le dépôt GIT initial en 2014 a été simplement perdu.

Le code a continué à grandir en taille et en fonctionnalités. Début 2015, Atomsk supportait les propriétés auxiliaires, les potentiels de type cœur-coquille (shell model), permettait de rassembler plusieurs systèmes atomiques, de construire des polycristaux, et bien d'autres fonctionnalités. Philippe Carrez a implémenté un module pour calculer le tenseur de Nye. J'ai décidé que le code était suffisamment mûr pour écrire un article afin de le promouvoir, et il a été publié en 2015 dans Computer Physics Communications.

La même année j'ai également décidé de créer un site Web dédié à Atomsk, au lieu de simplement le partager sur ma page personnelle. L'Université de Lille a fourni l'hébergement, et depuis 2015 Atomsk a son propre site officiel proposant des tutoriels, la documentation, le code source et des binaires pour faciliter l'installation.

Cette nouvelle disponibilité et visibilité a attiré de nouveaux utilisateurs, qui ont commencé à rapporter des bogues et à suggérer des améliorations. Une très grosse amélioration a été faite par Juri Bartel, le développeur du logiciel de simulation d'image de microscopie Dr Probe : il a implémenté les groupes d'espace dans Atomsk, et amélioré le support des fichiers CIF (Crystallographic Information files). Cette grosse contribution m'a permis d'étendre le support des groupes d'espace à d'autres formats de fichier (GULP, VESTA, etc.).

En 2018 j'ai contacté Emmanuel Clouet, développeur de Babel, pour lui demander la permission d'inclure ses routines pour générer des boucles de dislocation. Il a gentillement accepté, et maintenant cette fonctionnalité fait aussi partie de Atomsk.

Grâce à tous ces développements et toutes ces contributions, Atomsk est aujourd'hui utilisé par de nombreux chercheurs à travers le monde, comme le montre la liste d'articles citant Atomsk, qui croît chaque mois. Pour ses 10 ans, Atomsk a été cité dans 143 articles de recherche.

Et la suite ?

Au moment où j'écris ces lignes, la version disponible sur le site Web est numérotée 0.10.6, et elle est distribuée depuis octobre 2018. C'était il y a un long moment. Depuis, de nombreux bogues ont été corrigés, de nombreuses fonctionnalités ont été ajoutées : parallélisation avec OpenMP, support des fichiers pour ABINIT, BOPfox, CRYSTAL et SIESTA... Tout cela est disponible dans le dépôt GitHub. Malheureusement je n'ai pas encore eu le temps de préparer une nouvelle version. J'ai l'intention de le faire au cours de cette année 2020.

Comme vous pouvez le voir depuis la page de téléchargement, Atomsk est toujours en "version Beta". En effet, je considère qu'il est toujours en cours de développement, et je suis certain qu'il reste des bogues cachés. J'encourage tous les utilisateurs à me remonter les bogues qu'ils rencontrent (même les plus minimes), afin d'améliorer la robustesse et la fiabilité du code.

Joyeux anniversaire à Atomsk ! Je veux remercier tous les utilisateurs et contributeurs pour leur travail et leurs efforts, pour utiliser Atomsk, et pour l'améliorer sans cesse. À bientôt pour de nouvelles aventures !