Suche nach Adsorptionsstruktur mit der Minima-Hopping-Methode

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 Plattenmodell

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)

fig1.png

Legen Sie die Einschränkungsbedingungen fest

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

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)

Visualisierung der Ergebnisse

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()

fig2.png

Lassen Sie uns auch die winzige Struktur von Minima Hopping überprüfen.

fig3.png

Referenz

Recommended Posts

Suche nach Adsorptionsstruktur mit der Minima-Hopping-Methode
Suchen Sie mit COTOHA nach profitablen Marken
Sattelpunktsuche mit der Gradientenmethode
Python-Pandas: Suchen Sie mit regulären Ausdrücken nach DataFrame
Verbesserte Suche nach Pokemon-Rennwerten mit Python
Verzeichnisstruktur für die testgetriebene Entwicklung mit pytest in python