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 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)
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é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)
Le module ʻase.optimize.minimahoppingimplémente la fonction
MHPlot` 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()
Vérifions également la minuscule structure trouvée par Minima Hopping.
Recommended Posts