Le couteau suisse pour les simulations atomiques
Ce tutoriel explique comment utiliser Atomsk pour générer un fichier d'entrée pour Quantum Espresso, et comment manipuler les fichiers de sortie de Quantum Espresso. Il est recommandé d'être déjà familier avec Quantum Espresso pour suivre ce tutoriel.
▶ Pour plus d'information, référez-vous à la page de documentation correspondante.
Quantum Espresso est une suite intégrée de codes pour effectuer des calculs dans le cadre de la théorie de la fonctionnelle de la densité (en anglais, density functional theory ou DFT). Pour démarrer un calcul (avec PWscf), il est nécessaire d'avoir un fichier d'entrée (ou script) contenant les paramètres pour le calcul, et les positions des atomes. C'est là que Atomsk peut être utile.
ⓘ Atomsk ne manipule que les vecteurs de boîte et les positions des atomes. Il ne peut pas manipuler d'information volumétrique comme la densité électronique, ni les paramètres pour quelque type de calcul que ce soit, ni d'autres types d'informations.
Lorsque vous travaillez avec Quantum Espresso, il peut être pratique de définir certaines variables d'environnement sur votre ordinateur. Si ces variables sont définies, alors Atomsk les utilise aussi pour générer vos fichiers d'entrée pour Quantum Espresso.
En particulier, la variable d'environnement $ESPRESSO_PSEUDO définit le chemin complet vers le dossier contenant les fichiers de pseudo-potentiels pour le calcul. Par défaut elle pointe vers le dossier "$HOME/espresso/pseudo" (dans le dossier personnel de l'utilisateur). Si vous avez défini cette variable avec un autre chemin, alors Atomsk utilisera votre chemin personnalisé.
Pour les besoins de ce tutoriel, générons une maille élémentaire d'aluminium cubique à faces centrées (cfc), et écrivons-la au format de Quantum Espresso PWscf:
atomsk --create fcc 4.046 Al pw
Atomsk produira un fichier qui ressemble à cela :
&CONTROL
title = '# Fcc Al oriented X=[100], Y=[010], Z=[001].'
pseudo_dir = '/home/user/espresso/pseudo/'
calculation = 'scf'
/
&SYSTEM
nat= 4
ntyp= 1
ibrav= 0
ecutwfc= 20.0
/
&ELECTRONS
mixing_beta = 0.7
conv_thr = 1.0d-8
/
&IONS
/
&CELL
/
ATOMIC_SPECIES
Al 26.982 Al.fixme.upf
CELL_PARAMETERS angstrom
4.04600000 0.00000000 0.00000000
0.00000000 4.04600000 0.00000000
0.00000000 0.00000000 4.04600000
ATOMIC_POSITIONS angstrom
Al 0.00000000 0.00000000 0.00000000
Al 2.02300000 2.02300000 0.00000000
Al 0.00000000 2.02300000 2.02300000
Al 2.02300000 0.00000000 2.02300000
K_POINTS automatic
2 2 2 0 0 0
Il est important de comprendre que ce fichier n'est pas complet ! Atomsk ne produit qu'un "brouillon" qui contient les positions des atomes (en Anströms), et quelques paramètres "par défaut". Si vous tentez d'exécuter PWscf avec ce fichier, vous rencontrerez sans doute beaucoup d'erreurs. Vous devez éditer ce fichier, et modifier pratiquement tous les paramètres en fonction de vos besoins : le chemin vers les pseudo-potentiels, le type de calcul, les valeurs des rayons de coupure, les noms des fichiers de potentiels, la grille de points k, et ainsi de suite.
Atomsk peut écrire les positions des atomes, mais il ne peut pas deviner ce que vous souhaitez calculer. Après avoir produit un tel fichier "brouillon", vous aurez besoin de bien connaître la DFT et Quantum Espresso avant de véritablement lancer un calcul.
Par défaut, Atomsk utilise toujours des angströms. Cela facilite les conversions vers différents types de fichiers, puisque la plupart des codes de visualisation travaillent aussi en angströms.
Si vous souhaitez définir les positions des atomes en Bohrs dans le fichier Quantum Espresso, alors vous devez le demander explicitement, en convertissant les coordonnées avec l'option "-unit":
atomsk --create fcc 4.046 Al -unit A Bohr pw
Ensuite, le fichier final contient effectivement les coordonées des atomes en Bohrs. Cependant une chose est toujours incorrecte : les lignes "CELL_PARAMETERS" et "ATOMIC_POSITION" contiennent toujours le mot-clé "angstrom" ! C'est parce qu'au moment où il écrit le fichier, Atomsk n'a aucune idée de l'unité utilisée, il suppose donc qu'elles doivent être en angströms. Dans ce dernier cas c'est faux, il faut donc modifier ces lignes et remplacer "angstroms" par "bohr".
Pour faire cela vous pouvez utiliser le script "qepw_bohr.sh" fourni avec Atomsk. Ce script modifie uniquement les deux lignes mentionnées précédemment, afin qu'elles se terminent par "bohr" :
qepw_bohr.sh Al.pw
Au cours d'un calcul, PWscf écrit les positions des atomes dans un fichier avec l'extension ".out". Si vous effectuez un calcul auto-cohérent, alors les atomes ne bougent pas -et donc il n'est pas très intéressant de regarder les "positions finales" des atomes, puisqu'elles sont juste identiques aux positions initiales.
Les choses sont plus intéressantes si vous effectuez une relaxation ou une simulation en dynamique moléculaire (DM). Dans ce cas, le fichier de sortie (*.out) contient toutes les informations sur les configurations successives. Le problème est que tous ces instantanés sont contenus dans un seul fichier -et donc, nous ne pouvons pas simplement exécuter "atomsk file.out cfg" pour le convertir.
Pour lire de tels fichiers de sortie de PWscf (*.out), il est nécessaire d'exécuter Atomsk en mode "--unfold". Ce mode lit un fichier contenant plusieurs configurations, et écrit chaque configuration dans un fichier séparé. Par exemple, pour écrire chaque configuration dans un fichier séparé au format VESTA :
atomsk --one-in-all Al.out vesta
Cette commande produire des fichiers nommés "Al_0.vesta", "Al_1.vesta", et ainsi de suite, que vous pouvez ensuite visualiser avec VESTA.
Atomsk importe aussi les forces agissant sur les atomes, et les écrit dans les fichiers de sortie si leur format le permet. Le format de VESTA le permet, et donc lorsque vous ouvrez ces fichiers avec VESTA, les forces s'afficheront avec des flèches. Les forces sont généralement très petites, il peut donc être utile de les redimensionner pour faciliter la visualisation. Dans Atomsk, cela peut être fait en appelant l'option "-unit" sur chaque composante de force (fx, fy, fz), par exemple :
atomsk --one-in-all Al.out vesta -unit fx 1000 -unit fy 1000 -unit fz 1000
Le facteur de multiplication (1000 dans cet exemple) peut bien sûr être ajusté selon vos besoins : essayez différentes valeurs, et choisissez celle qui vous plait le plus.
Si, au contraire, vous voulez vous débarrasser des forces, alors vous pouvez les supprimer avec l'option "-remove-property" :
atomsk --one-in-all Al.out vesta -remove-property all