Atomsk

Le couteau suisse pour les simulations atomiques

Tutoriel : Moyenner des Configurations

Ce tutoriel explique comment moyenner les positions des atomes provenant de plusieurs configurations.

▶ Pour plus d'informations, référez-vous à la page de documentation correspondante.

Parfois il peut être utile de moyenner les positions des atomes sur plusieurs configurations. Par exemple, au cours d'une simulation en dynamique moléculaire à haute température, les atomes sont beaucoup déplacés par rapport à leurs sites cristallins, ce qui peut compliquer l'analyse du système. Moyenner leurs positions sur plusieurs pas de temps peut réduire le bruit thermique, et ainsi faciliter l'analyse.

1. Moyenner une liste de fichiers

Dans son mode "--average", Atomsk requiert une liste de fichiers. Une telle liste doit être construite avant d'exécuter Atomsk. Sur les systèmes GNU/Linux, cela peut être facilement accompli grâce à l'outil en ligne de commandes "ls".

Supposez que vous ayez une série de configurations issues d'une simulation, nommées "snap_0.cfg", "snap_10.cfg", "snap_20.cfg", et ainsi de suite jusqu'à "snap_10000.cfg". Vous pouvez écrire tous ces noms de fichiers dans un fichier texte en utilisant :

ls snap*.cfg > list.txt

Vous pouvez vérifier que le fichier "list.txt" contient bien les noms de tous vos fichiers. Pour les moyenner, exécutez Atomsk avec la mode "--average" :

atomsk --average list.txt moyenne.cfg

Les positions moyennées seront écrites dans "moyenne.cfg", que vous pouvez visualiser avec Atomeye ou OVITO.

ⓘ Si des propriétés par atomes (ou propriétés auxiliaires) sont définies dans les fichiers d'entrée, alors leurs valeurs sont aussi moyennées. Si une propriété auxiliaire n'apparaît que dans certains fichiers mais pas dans tous, alors cette propriété sera ignorée (elle n'apparaîtra pas dans le fichier moyenné final).

Si vous ne souhaitez pas moyenner tous les fichiers, mais seulement certains d'entre eux, alors vous pouvez utiliser une boucle pour écrire les noms de fichiers dans "list.txt". Dans GNU/Linux (bash), une telle boucle peut s'écrire de la façon suivante :

for (( i=0 ; i<=100 ; i+=10 )) ; do
  echo "snap_$i.cfg" >> list.txt
done

Démarrant de i=0 et jusqu'à i=100, par incréments de 10, cette boucle va ajouter le texte "snap_$i.cfg" (où "$i" est remplacé par la valeur courante de i) au fichier texte "list.txt". La double redirection (>>) signifie que chaque nom de fichier sera ajouté à la fin du fichier (une redirection simple écraserait le fichier à chaque itération).

Si vous voulez moyenner les fichiers de 100 à 200, alors modifiez la boucle de la façon suivante :

for (( i=100 ; i<=200 ; i+=10 )) ; do
  echo "snap_$i.cfg" >> list.txt
done

Ces quelques exemples devraient suffire à illustrer comment générer facilement une liste de fichiers. Bien sûr, si bash est utilisé dans ces exemples, vous pouvez utiliser n'importe quel langage pour créer le fichier texte (Python, C, C++, etc.). Après cela, exécutez Atomsk comme montré ci-dessus pour moyenner les configurations apparaissant dans la liste.

2. Moyenner sur une fenêtre de temps glissante

Atomsk n'est pas nativement capable de faire des moyennes sur des fenêtres glissantes. Comme expliqué ci-dessus, vous devez fournir la liste des fichiers à moyenner.

Comme précédemment, supposons que nous disposons de fichiers nommés de "snap_0.cfg" jusqu'à "snap_10000.cfg" par pas de 10. Cette fois, nous voulons moyenner 5 configurations d'affilée : faire la moyenne des 5 configurations entre les pas 0 et 40, puis moyenner celles de 10 à 50, puis de 20 à 60, et ainsi de suite jusqu'à la dernière itération, qui moyennera les 5 configurations des pas 9960 à 10000.

Pour chaque fenêtre temporelle, nous devons écrire un fichier "list.txt", et exécuter Atomsk. Pour y parvenir, nous avons besoin de deux boucles imbriquées, la première itérant sur toutes les configurations de 0 à 9960, et la seconde pour écrire 5 noms de fichiers dans "list.txt" et exécuter Atomsk.

Voici un exemple (bash) :

for (( i=0 ; i<=9960 ; i+=10 )) ; do
  rm -f list.txt
  for (( j=i ; j<$i+50 ; j+=10 )) ; do
    echo "snap_$j.cfg" >> list.txt
  done
  atomsk --average list.txt step_$i.cfg
done

Utiliser des boucles imbriquées facilite la génération du fichier texte.

3. Appliquer des options aux configurations moyennées

Si vous exécutez le mode "--average" avec des options, alors celles-ci seront appliquées au système moyenné. Par exemple, supposons que vous moyennez plusieurs configurations puis voulez dupliquer le système moyenné, vous pouvez utiliser :

atomsk --average list.txt moyenne.cfg -duplicate 2 2 2

De façon similaire, si vous voulez supprimer toutes les propriétés auxiliaires du fichier moyenné final, vous pouvez utiliser :

atomsk --average list.txt moyenne.cfg -remove-property all

N'importe quelle option peut ainsi être ajoutée aux commandes Atomsk ci-dessus, y compris celles à l'intérieur de boucles. Ceci permet d'appliquer automatiquement des options directement aux configurations moyennées.