Unter Verwendung der in ASE (Atomic Simulation Environment) implementierten Minima-Hopping-Methode werden wir die Adsorptionsstruktur von H2-Molekülen auf der Pt-Oberfläche untersuchen. Dieser Artikel wurde unter Bezugnahme auf Official Documentation Tutorial erstellt.
Der Grund, warum EMT verwendet wird, liegt in der Berechnungsgeschwindigkeit. Insbesondere für organische Moleküle (C, H, O, N), wie in den offiziellen Dokumenten erwähnt, Es ist nur ein Spielmodell. Es ist nicht zuverlässig. Wählen Sie eine geeignete Theorie aus, wenn Sie sie in der Praxis anwenden.
Erstellen Sie ein Modell, in dem H 2 -Moleküle an der Oberfläche von Pt (211) adsorbiert sind.
from ase.build import surface, add_adsorbate
from ase.data import atomic_numbers, covalent_radii
from ase.visualize import view
#Pt Masse
Pt_bulk= bulk('Pt', 'fcc', a=3.9, cubic=True)
# Pt(211)Platte
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]) #Maximalwert der z-Koordinate des Pt-Atoms
xy_center = ((Pt_211.cell[0]+Pt_211.cell[1])/2)[0:2]
#H2-Molekül hinzufügen
add_adsorbate(Pt_211, molecule('H2'), d_PtH, xy_center)
#Überprüfen Sie die Struktur
view(Pt_211)
Verwenden Sie die Klassen "FixAtoms" und "Hookean", um Einschränkungen festzulegen. Unter der Randbedingung "Hookean" wird eine federartige Kraft zwischen Atomen ausgeübt.
from ase.calculators.emt import EMT
from ase.constraints import FixAtoms, Hookean
from ase.optimize.minimahopping import MinimaHopping
#Rückhaltebedingung
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 ist die Entfernungsschwelle[A],k ist der Federkoeffizient
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())
Führen Sie Minima Hopping aus. Standardmäßig wird das Protokoll in die Datei hop.log ausgegeben.
hop = MinimaHopping(surf, Ediff0=0.5, T0=2000)
hop(totalsteps=10)
Das Modul "ase.optimize.minimahopping" implementiert die Funktion "MHPlot", die das Ergebnis von MinimaHopping visualisiert. Es ist ein Wrapper für matplotlib. Ein schwarzes Häkchen zeigt die neu gefundene winzige Struktur an.
import matplotlib.pyplot as plt
from ase.optimize.minimahopping import MHPlot
plt.rcParams["font.size"] = 18 #Passen Sie die Schriftgröße an
MHPlot()
Lassen Sie uns auch die winzige Struktur von Minima Hopping überprüfen.
Recommended Posts