Atomsk

Le couteau suisse pour les simulations atomiques

Tutoriel : Sélectionner des Atomes Suivant une Grille

Ce tutoriel explique comment concevoir des grilles ou masques pour sélectionner des atomes.

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

Les tutoriels précédents ont illustré comment sélectionner des atomes en utilisant des formes géométriques : boîtes, sphères, cylindres, et ainsi de suite. Parfois ces formes simples ne suffisent pas ou ne sont pas adaptées pour concevoir certains systèmes atomiques.

Avec Atomsk, vous pouvez concevoir vos propres masques à l'aide de fichiers textes, et les utiliser pour sélectionner des atomes. Ensuite vous pouvez faire ce que vous voulez avec les atomes sélectionnés : les supprimer, les substituer, les translater, et ainsi de suite.

Pour ce tutoriel, nous utiliserons une super-cellule d'aluminium de taille 40x40x3. Elle peut être générée avec Atomsk :

atomsk --create fcc 4.046 Al -duplicate 40 40 3 Al_supercell.xsf

1. Écrire un masque dans un fichier texte

Construisons notre premier masque. Pour cela, il nous faut écrire des 0 et des 1 dans un fichier texte, de sorte à produire le motif voulu. Pour cet exemple, créons le masque suivant, et enregistrons-le dans le fichier "masque.txt":

masque.txt

000000000000000000
000011000001111000
001111000011001100
000011000000011000
000011000000110000
000111100011111100
000000000000000000
000000000000000000

Nous pouvons reconnaître que les caractères "1" forment le numéro "12", tandis que les "0" remplissent l'arrière-plan. C'est un motif simple, mais il suffira comme exemple dans ce tutoriel.

Bien sûr, vous pouvez concevoir un masque avec votre propre motif. Lorsque vous concevez un tel fichier, il peut y avoir autant de lignes que vous le voulez, et les lignes peuvent être aussi longues que vous le voulez -cependant, assurez-vous que toutes les lignes font bien la même longueur.

2. Supprimer ou substituer des atomes en utilisant le masque

Maintenant, utilisons le masque précédent pour supprimer des atomes. Nous utilisons l'option "-select grid" pour lire le fichier contenant le masque, et ensuite l'option "-remove-atoms" pour supprimer les atomes sélectionnés :

atomsk Al_supercell.xsf -select grid masque.txt -rmatom select Al_12.cfg

Avec cette commande, Atomsk lit le fichier "masque.txt", et l'ajuste automatiquement aux dimensions de la boîte du système atomique. Ensuite, tous les atomes à l'intérieur d'un "1" du masque sont sélectionnés, tandis que les autres atomes restent non sélectionnés. Enfin, les atomes sélectionnés sont supprimés par l'option "-rmatom select". Le système final est écrit dans le fichier "Al_12.cfg", qui peut être visualisé avec Atomeye:

Au lieu de l'option "-remove-atoms", il est possible d'utiliser l'option "-cut", pour ne supprimer que les atomes situés au-dessus d'un plan d'une hauteur donnée :

atomsk Al_supercell.xsf -select grid masque.txt -cut above 4.1 Z Al_12.cfg

Ainsi, seuls les atomes en surface (dont la coordonnée Z est supérieure à 4.1 Å dans cet exemple) sont supprimés :

Bien entendu, au lieu de supprimer les atomes, il est possible de les substituer avec des atomes d'une autre espèce. Pour cela, utilisons l'option "-substitute" après l'option "-select", par exemple :

atomsk Al_supercell.xsf -select grid masque.txt -substitute Al Au Al_12.cfg

Ainsi, les atomes d'aluminium (Al) sélectionnés sont remplacés par des atomes d'or (Au) :

De façon générale, après avoir défini une sélection, la plupart des options suivantes ne s'appliquent qu'aux atomes sélectionnés. Ainsi, il est possible non seulement de supprimer ou substituer des atomes, mais aussi de les translater, déformer, tourner, leur donner une distribution de vitesse, et ainsi de suite. Vous pouvez vous référer à la page de documentation de chaque option pour en savoir plus.

3. Transformer une image en masque

Les masques précédents sont suffisamment simples pour pouvoir être générés à la main, mais cette méthode peut devenir très lourde voire impraticable si on veut utiliser un masque avec une forme complexe. Dans de tels cas, on peut préférer concevoir un masque avec un logiciel extérieur (par exemple un logiciel de dessin comme GIMP ou similaire), qui produit une image au format JPEG ou PNG.

Si vous disposez d'une image que vous voulez utiliser comme masque, alors la première chose à faire est de la convertir en fichier texte utilisable par Atomsk. Cela peut être accompli avec des outils comme jp2a. Pour l'exemple, imaginons que nous voulions travailler avec l'image suivante : World_Map.jpg (faites un clic droit sur ce lien pour télécharger). Nous voulons le convertir en fichier texte contenant des 0 et des 1, nous allons donc utiliser jp2a de cette façon :

jp2a --chars="01" --width="200" World_Map.jpg > World_Map.txt

L'option "--chars" indique de convertir l'image en utilisant uniquement les caractères "0" et "1". le nombre de caractères par ligne est donné par l'option "--width" ; ici chaque ligne comptera 200 caractères (la "hauteur" ou nombre de lignes sera ajusté automatiquement pour respecter le rapport de l'image). Enfin, la sortie est redirigée vers un fichier texte nommé "World_Map.txt".

Maintenant que nous avons un fichier texte, nous pouvons l'utiliser comme masque dans Atomsk :

atomsk Al_supercell.xsf -select grid World_Map.txt -rmatom select Al_World.cfg

Comme précédemment, Atomsk ajuste automatiquement le masque aux dimensions du système atomique. Vous pouvez visualiser le système final :

Grâce à cette méthode, n'importe quelle image peut servir de masque pour n'importe quel système atomique. Vous pouvez essayer avec vos propres images. Il est recommandé que les images aient un contraste très élevé (typiquement noir sur fond blanc, sans aucune nuance de gris) afin de pouvoir être converti en 0 et en 1 sans ambiguité.

4. Construire des grilles en 3-D

De façon similaire, il est aussi possible de concevoir des grilles tridimensionnelles, bien que cela peut se révéler un peu plus fastidieux. Dans ce cas, plusieurs grilles similaires à la précédente peuvent apparaître dans le fichier texte, et le système atomique est découpé en "tranches" pour effectuer la sélection.

Pour donner un exemple simple, construisons un masque en 3-D fait de quatre "tranches", chacune contenant un motif différent. Le fichier texte doit cette fois commencer avec trois entiers, indiquant le nombre de pas dans chaque direction. Dans notre exemple, chaque tranche est une matrice 5×5, et il y a 4 tranches suivant Z. Ensuite, chaque tranche doit être donnée en respectant ces dimensions :

masque2.txt

5 5 4

10000
01000
00100
00010
00001

00000
00100
01110
00100
00000

00100
00100
11111
00100
00100

00001
00010
00100
01000
10000

Ensuite, assurez-vous que votre système atomique est bien tridimensionnel. La super-cellule d'aluminium que nous avons créée au début de ce tutoriel ne l'est pas, nous allons donc la dupliquer 10 fois suivant Z avant d'appliquer le masque. Utilisons-le pour ensuite supprimer les atomes sélectionnés :

atomsk Al_supercell.xsf -duplicate 1 1 10 -select grid masque2.txt -rmatom select Al_3.cfg

Ainsi, le système est découpé en tranches suivant chaque direction (5 tranches suivant X, 5 suivant Y, et 4 suivant Z), et ensuite les atomes appartenant aux boîtes marquées "1" sont sélectionnés. Le système final peut être visualisé pour vérifier le résultat :

5. Sélection d'après une grille d'éléments finis

Il existe encore une autre façon de construire des masques en 3-D : fournir les positions de nœuds, et donner à chaque nœud la valeur 0 ou 1. Atomsk va ensuite calculer les interface entre nœuds voisins, et générer une grille d'éléments finis (ceci est similaire à la décomposition de Voronoi, utilisée pour construire des polycristaux).

Pour définir une telle grille, le fichier texte doit commencer par le mot-clé "Finite elements". Puis, chaque ligne doit contenir trois nombres réels donnant la position (x,y,z) d'un nœud, et un nombre entier (0 ou 1) spécifiant si les atomes proches de ce nœud doivent être sélectionnés (1) ou non (0). Par exemple, utilisons le fichier suivant :

FEgrid.txt

Finite elements
20 20 1 1
30 1 20 0
10 10 10 0
5 40 6 0
8 60 60 1
20 20 20 0
80 80 80 0
60 60 5 0
70 100 5 0

Maintenant utilisons cette grille dans Atomsk, et utilisons-la pour remplacer les atomes d'aluminium (Al) par de l'or (Au) :

atomsk --create fcc 4.046 Al -duplicate 30 30 30 -select grid FEgrid.txt -sub Al Au Al_FE.cfg

La visualisation montre que les atomes à l'intérieur des éléments marqués "1" ont bien été substitués :

Le fichier texte peut contenir autant de lignes (c'est-à-dire autant de nœuds) que vous voulez, afin d'obtenir une structure en 3-D très fine. Notez cependant que plus le nombre de nœuds est important, et plus Atomsk mettra de temps à construire le maillage et à sélectionner les bons atomes. Cela vous prendra aussi plus de temps de générer une structure comprenant de très nombreux nœuds.

6. Remarques finales

Les masques peuvent être combinés avec d'autres options et d'autres modes. Par exemple, vous pouvez générer une super-cellule de silicium, appliquer un masque pour supprimer certains atomes ; appliquer le masque inverse à un autre système atomique (par exemple de l'or) ; et enfin réunir les deux systèmes, de sorte que l'or vienne remplir les trous dans le système de silicium.

Les masques peuvent être un moyen rapide et pratique de construire des formes géométriques. Toutefois, pour les formes complexes en 3-D, il peut devenir très long et fastidieux de générer le fichier texte qui servira de masque. Dans de tels cas, il peut être plus pratique de concevoir la forme en 3-D avec un logiciel dédié, et ensuite de l'importer dans Atomsk pour sélectionner des atomes. Tout ceci est expliqué dans le tutoriel suivant.