Le couteau suisse pour les simulations atomiques
Ce tutoriel explique comment créer et manipuler des systèmes qui contiennent des coquilles, dans le cadre de simulations employant un modèle ionique cœur-coquille.
Les modèles ioniques cœur-coquille sont un type de potentiel inter-atomique, souvent utilisé pour décrire des matériaux ioniques polarisables. Ce type de modèle a été proposé pour la première fois par B.G. Dick Jr. and A.W. Overhauser, Phys. Rev. 112 (1958) 90-103 (doi: 10.1103/PhysRev.112.90). Dans un tel modèle, chaque ion est composé de deux particules : un cœur qui est massif et porte une charge Q, et une "coquille" qui imite le nuage électronique, qui a une masse nulle (ou très faible par rapport au cœur, selon le type de modèle), et porte une charge q. La charge totale de l'ion est alors Q+q. Si le cœur et la coquille sont exactement à la même position alors l'ion n'est pas polarisé ; sinon, si la coquille est décalée par rapport au cœur, alors l'ion est polarisé (parce que les centres de charges positive et négative ne coïncident plus).
Bien que Atomsk n'ait aucune connaissance des différents potentiels cœur-coquille en eux-mêmes, il est capable de manipuler les positions et les charges électriques des coquilles. Les coquilles sont enregistrées dans leur propre tableau de données, et ont toujours le même indice que leur cœur associé, comme expliqué dans un précédent tutoriel.
Pour la suite de ce tutoriel, créons une maille élémentaire d'un matériau ionique, le chlorure de sodium (NaCl) :
atomsk --create rocksalt 5.64 Na Cl xsf
Des coquilles peuvent être ajoutées à tous les ions d'un système existant, grâce à l'option "-add-shells" :
atomsk NaCl.xsf -add-shells all NaCl_shells.xsf
Si vous ouvrez le fichier final ("NaCl_shells.xsf") dans un éditeur de texte, alors vous remarquerez qu'il ne contient pas de coquille du tout. La raison est simple : le format XSF ne supporte pas les coquilles, il est impossible d'écrire les positions des coquilles dans ce format. Toutes les informations sur les coquilles sont donc perdues. C'est une leçon importante à retenir lorsqu'on travaille avec des systèmes cœur-coquille : il faut que le format du fichier final supporte les coquilles.
Pour écrire les positions des coquilles, choisissons un format qui les supporte, comme le format de fichiers de GULP ou celui de DL_POLY :
atomsk NaCl.xsf -add-shells all NaCl_shells.gin
Maintenant si vous ouvrez le fichier "NaCl_shells.gin" il devrait contenir les positions des cœurs et des coquilles. L'option "-add-shells" crée des coquilles placées au même endroit que les cœurs qui existaient au départ (autrement dit, les ions résultants ne sont pas polarisés). Ceci est probablement loin de l'équilibre, mais peut être utile comme point de départ pour une simulation.
Il est possible de n'ajouter des coquilles que sur un seul type d'ions. Par exemple, pour créer des coquilles seulement sur les ions Cl :
atomsk NaCl.xsf -add-shells Cl NaCl_shells.gin
De façon similaire, il est possible de supprimer les coquilles sur certains atomes, ou sur tous les atomes, grâce à l'option "-remove-shells". Par exemple, vous pouvez ajouter des coquilles à tous les ions, puis supprimer les coquilles sur les ions Na (il ne restera alors plus de coquilles que sur les ions Cl) :
atomsk NaCl.xsf -add-shells all -remove-shells Na NaCl_shells.gin
Atomsk peut manipuler des propriétés auxiliaires comme les charges électriques des particules. Pour définir les charges des cœurs et coquilles, il faut d'abord les écrire dans un fichier texte. Par exemple, un fichier pour NaCl ressemblerait au suivant :
charges
Na 1.2 -0.2
Cl -0.8 -0.2
La syntaxe de ce fichier texte est assez simple. D'abord, le mot-clé "charges" indique que des charges électriques vont être définies. Ensuite, chaque ligne contient le symbole chimique d'un élément, suivi de la charge du cœur, puis la charge de la coquille (en unités de la charge élémentaire e). Ici les cœurs de Na ont une charge +1.2e, et leurs coquilles -0.2e. La somme des deux donne aux ions Na une charge totale de +1e. De façon similaire, le cœur de Cl porte une charge de -0.8e, et sa coquille -0.2e, donnant un total de -1e. Ceci est juste un exemple, et ne correspond pas à un véritable potentiel cœur-coquille pour NaCl.
Ensuite, l'option "-properties" peut être utilisée pour dire à Atomsk de lire les propriétés depuis ce fichier :
atomsk NaCl.xsf -add-shells all -properties charges.txt NaCl_shells.gin
Maintenant si vous ouvrez le fichier "NaCl_shells.gin", vous remarquerez que de nouvelles colonnes sont apparues, contenant les charges électriques des particules.
Atomsk peut calculer la polarisation "électronique" de chaque ion, grâce au mode "--electronic-polarization". Si le fichier d'entrée contient déjà les charges des cœurs et coquilles (par exemple "NaCl_shells.gin"), alors ce mode prend juste le nom du fichier d'entrée comme argument :
atomsk --electronic-polarization NaCl_shells.gin
Sinon, si le fichier ne contient pas les charges électriques (par exemple "NaCl.gin"), alors il est possible de les donner grâce à l'option "-properties" :
atomsk --electronic-polarization NaCl.gin -properties charges.txt
La plupart des options sont compatibles avec les coquilles. Par exemple, utiliser l'option "-shift" sur un système contenant des coquilles, fera que chaque coquille sera déplacé du même vecteur que son cœur associé. Si vous dupliquez un système contenant des coquilles (avec l'option "-duplicate"), alors les coquilles seront aussi dupliquées, de sorte que les répliques auront la même configuration (c'est-à-dire la même polarisation) que les ions originaux.
Un cas particulier est celui de l'option "-wrap". Cette option détecte si un atome est en dehors de la boîte, et si c'est le cas, lui applique une translation d'un ou plusieurs vecteurs de boîte jusqu'à ce que l'atome tombe dans la boîte. En présence de coquilles, cette option ne considère que les positions des cœurs (et pas des coquilles). Si un cœ est hors de la boîte, alors une translation d'un ou plusieurs vecteurs de boîte lui est appliquée jusqu'à ce qu'il tombe dans la boîte ; la coquille est translatée du même vecteur, de sorte à rester proche de son cœur associé. Cela signifie qu'après cette translation, il est garanti que le cœur est bien dans la boîte, en revanche la coquille peut se retrouver en dehors de la boîte.
Veuillez vous référer à la documentation de chaque option pour savoir comment elle traite les coquilles.