Rechercher la structure d'adsorption à l'aide de la méthode Minima Hopping

En utilisant la méthode Minima Hopping implémentée dans ASE (Atomic Simulation Environment), nous explorerons la structure d'adsorption des molécules H 2 </ sub> sur la surface Pt. Cet article a été créé en référence à Official Documentation Tutorial.

La raison d'utiliser EMT est la vitesse de calcul. Notamment pour les molécules organiques (C, H, O, N), comme mentionné dans les Documents officiels, C'est juste un modèle de jeu. Ce n'est pas fiable. Sélectionnez une théorie appropriée lors de son utilisation dans la pratique.

Créer un modèle de dalle

Créer un modèle dans lequel les molécules H 2 </ sub> sont adsorbées sur la surface de Pt (211).

from ase.build import surface, add_adsorbate
from ase.data import atomic_numbers, covalent_radii
from ase.visualize import view

#Pt en vrac
Pt_bulk= bulk('Pt', 'fcc', a=3.9, cubic=True) 

# Pt(211)Dalle
Pt_211 = surface(Pt_bulk, (2,1,1), 3, vacuum=10, periodic=True) 
d_PtH = (covalent_radii[atomic_numbers['H']] + covalent_radii[atomic_numbers['Pt']])
z_max =  np.max(Pt_211.positions[:,2]) #Valeur maximale de la coordonnée z de l'atome Pt
xy_center = ((Pt_211.cell[0]+Pt_211.cell[1])/2)[0:2]

#Ajouter une molécule H2
add_adsorbate(Pt_211, molecule('H2'), d_PtH, xy_center)

#Vérifiez la structure
view(Pt_211)

fig1.png

Définir les conditions de contrainte

Utilisez les classes FixAtoms et Hookean pour définir les contraintes. Sous la condition de contrainte de «Hookean», une force semblable à un ressort est appliquée entre les atomes.

from ase.calculators.emt import EMT
from ase.constraints import FixAtoms, Hookean
from ase.optimize.minimahopping import MinimaHopping

#Condition de contention
const_Pt = [FixAtoms(indices=[atom.index for atom in Pt_211 if atom.symbol=='Pt'])]
d_HH = covalent_radii[atomic_numbers['H']] * 2
H_indices = [atom.index for atom in Pt_211 if atom.symbol=='H']
const_H2 = [Hookean(a1=H_indices[0], a2=H_indices[1], rt=d_HH*1.3, k=15.), #rt est le seuil de distance[A],k est le coefficient du ressort
            Hookean(a1=H_indices[0], a2=(0., 0., 1., -(z_max+d_PtH*5)), k=5.),
            Hookean(a1=H_indices[1], a2=(0., 0., 1., -(z_max+d_PtH*5)), k=5.)]
surf.set_constraint(const_Pt + const_H2)
surf.set_calculator(EMT())

Exécuter des sauts minimaux

Exécutez des sauts minimaux. Par défaut, le journal est généré dans le fichier hop.log.

hop = MinimaHopping(surf, Ediff0=0.5, T0=2000)
hop(totalsteps=10)

Visualisation des résultats

Le module ʻase.optimize.minimahoppingimplémente la fonctionMHPlot` qui visualise le résultat de MinimaHopping.C'est un wrapper pour matplotlib. Une coche noire indique la minuscule structure nouvellement trouvée.

import matplotlib.pyplot as plt
from ase.optimize.minimahopping import MHPlot

plt.rcParams["font.size"] = 18 #Ajuster la taille de la police
MHPlot()

fig2.png

Vérifions également la minuscule structure trouvée par Minima Hopping.

fig3.png

référence

Recommended Posts

Rechercher la structure d'adsorption à l'aide de la méthode Minima Hopping
Rechercher des marques rentables avec COTOHA
Recherche de points de selle à l'aide de la méthode du gradient
Pandas Python: recherchez DataFrame à l'aide d'expressions régulières
Recherche affinée des valeurs de race Pokemon à l'aide de Python
Structure de répertoire pour le développement piloté par les tests à l'aide de pytest en python