Lassen Sie uns eine DFT-Berechnung mit ASE und GPAW durchführen. Lassen Sie uns als einfaches Beispiel die Atomisierungsenergie von Wasserstoffmolekülen ermitteln.
--ASE ist ein Python-Modul für die Atomsimulation. Viele Funktionen sind implementiert. Über die Calculator-Klasse als Schnittstelle können verschiedene Codes aufgerufen werden. --GPAW ist ein DFT-Berechnungscode, der auf der PAW-Methode und ASE basiert. Geschrieben in C und Python. Weit verbreitet.
Das folgende Beispiel wurde mit Jupyter Lab ausgeführt.
Installieren Sie ASE und GPAW mit pip in der mit Anaconda erstellten Python-Umgebung.
$ pip install ase --user
$ pip install gpaw --user
Laden Sie auch den GPAW PAW-Datensatz herunter.
$ gpaw install-data $HOME/gpaw-data
Die Installation ist abgeschlossen. Zu diesem Zeitpunkt ist meine Umgebung wie folgt.
$ python --version
Python 3.7.6
$ pip list installed | grep -e ase -e gpaw
ase 3.19.1
gpaw 20.1.0
Instanziieren Sie die GPAW-Klasse unter den folgenden Bedingungen.
from gpaw import GPAW, PW
gpaw = GPAW(mode=PW(300), xc='PBE')
Das Modul "ase.build" enthält Voreinstellungen für kleine Moleküle. Sie können ein "Atome" -Objekt erstellen, bei dem es sich um ein dreidimensionales molekulares Modell handelt, indem Sie einfach den molekularen Ausdruck an die "Molekül" -Funktion übergeben. Da ich dieses Mal das isolierte System berechnen möchte, rufe ich die "center" -Methode des erstellten "Atoms" -Objekts auf und füge dem Modell eine Vakuumschicht von 3,0 A hinzu.
from ase.build import molecule
atoms_h2 = molecule('H2')
atoms_h2.center(vacuum=3.)
Es kann mit der Funktion "Ansicht" visualisiert werden. Überprüfen wir also die Struktur des Moleküls.
from ase.visualize import view
view(atoms_h2)
Wenn Sie den "Rechner" von GPAW mit dem Objekt "Atome" verknüpfen und die Funktion "get_potential_energy" aufrufen, wird die Berechnung durch GPAW ausgeführt.
atoms_h2.set_calculator(gpaw)
e_h2 = atoms_h2.get_potential_energy() # takes several seconds
Die gleiche Berechnung wird für das Wasserstoffatom durchgeführt.
atoms_h = molecule('H')
atoms_h.center(vacuum=3.)
atoms_h.set_calculator(GPAW(mode=PW(300), xc='PBE', hund=True))
e_h = atoms_h.get_potential_energy()
Lassen Sie uns abschließend die Ergebnisse zusammenfassen. Die Atomisierungsenergie $ \ Delta E $ von H 2 </ sub> kann durch die folgende Gleichung erhalten werden.
Gleichzeitig werde ich die Molekülstruktur auf dem Notebook anzeigen.
Verwenden Sie das Modul ase.visualize.plot
, ein Wrapper für matplotlib.
import matplotlib.pyplot as plt
from ase.visualize.plot import plot_atoms
delta_e = 2 * e_h - e_h2
print(f'Atomization Energy: {delta_e: 5.2f} eV')
fig, ax = plt.subplots(1, 2, figsize=(8,6))
title = f'Calculation Result for {atoms_h2.get_chemical_formula()}\n' + \
f'Total Energy : {atoms_h2.get_potential_energy(): 5.2f} eV'
ax[0].set_title(title)
ax[0].axis('off')
plot_atoms(atoms_h2, ax=ax[0], rotation='90x')
title = f'Calculation Result for {atoms_h.get_chemical_formula()}\n' + \
f'Total Energy : {atoms_h.get_potential_energy(): 5.2f} eV'
ax[1].set_title(title)
ax[1].axis('off')
plot_atoms(atoms_h, ax=ax[1], rotation='90x')
plt.show()
Recommended Posts