aenet (Atomic Energy Network) ist ein Paket zum Umgang mit dem interatomaren Interaktionspotential von ANN (künstliches neuronales Netzwerk). Sie können neue ANN-Potentiale basierend auf DFT-Berechnungen erstellen und Energie und Kräfte anhand erlernter Potentiale vorhersagen.
Da aenet eine Schnittstelle für ASE (Atomic Simulation Environment) bereitstellt, eine Python-Bibliothek für die Atomsimulation, ist es möglich, Strukturoptimierung und Molekulardynamiksimulation (MD) unter Verwendung des ANN-Potenzials durchzuführen.
In diesem Artikel werden wir eine MD-Simulation von TiO </ sub> 2 </ sub> unter Verwendung des erlernten ANN-Potentials durchführen.
Erstellen Sie die Python-Schnittstelle für aenet.
Führen Sie make in jedem Verzeichnis (lib, src, python3) des Projekts aus. Das src-Verzeichnis enthält mehrere Makefiles (ifort vs. gfortran, mpi vs. serial usw.). Wählen Sie ggf. Makefile.
README ist für jedes Verzeichnis vorbereitet. Bitte beachten Sie auch dies.
$ git clone https://github.com/atomisticnet/aenet.git
$ git checkout v2.0.4 #neueste Version
$ cd aenet/lib
$ make #Kompilieren Sie lib
$ cd ../src
$ make -f makefiles/Makefile.gfortran_serial lib #Kompiliere src.Stellen Sie sicher, dass das Ziel auf lib gesetzt ist.
$ cd ../python3
$ python3 setup.py install --user #Kompilieren Sie die Python-Oberfläche
Wenn die gcc-Version beim Erstellen von lib oder src und die gcc-Version beim Erstellen der Python-Schnittstelle nicht übereinstimmen, funktioniert der Build nicht ordnungsgemäß, selbst wenn er abgeschlossen ist. Ich bin süchtig danach.
Geschulte Daten von TiO 2 </ sub> (aenet-example-02-TiO2-Chebyshev.tar.bz2) können von Official Site heruntergeladen werden. ist. Diese trainierten Daten werden auch in diesem Artikel verwendet.
Im Folgenden wird die Berechnung unter Verwendung der trainierten nn-Datei im Verzeichnis aenet-example-02-TiO2-Chebyshev / 03-Predict / Set001
durchgeführt.
Als einfachstes Beispiel berechnen wir die Energie von TiO </ sub> </ sub> vom Rutiltyp.
from ase.spacegroup import crystal
from aenet.ase_calculator import ANNCalculator
TiO2_rutile =crystal(['Ti', 'O'], basis=[(0, 0, 0), (0.3, 0.3, 0.0)],
spacegroup=136, cellpar=[4.6, 2.95, 2.95, 90, 90, 90])
calc = ANNCalculator({'Ti':'Ti.15t-15t.nn', 'O':'O.15t-15t.nn'})
TiO2_rutile.set_calculator(calc)
e = TiO2_rutile.get_potential_energy()
print(f'energy: {e}')
Die Energie des ANN-Potentials konnte sehr leicht berechnet werden.
Messen wir die Berechnungszeit mit einem Notebook. Wir haben mehrere Superzellen mit unterschiedlicher Anzahl von Atomen erstellt und die für die Energieberechnung erforderliche Zeit für jede Atome aufgezeichnet.
Lassen Sie uns abschließend eine MD-Simulation durchführen. Ersetzen Sie einfach den ASE-Rechner durch den ANN-Rechner.
from ase import units
from ase.spacegroup import crystal
from ase.md.nvtberendsen import NVTBerendsen
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution
from aenet.ase_calculator import ANNCalculator
dt = 2 * units.fs
temp = 300
nsteps = 400
taut = 20 * units.fs
TiO2_rutile =crystal(['Ti', 'O'], basis=[(0, 0, 0), (0.3, 0.3, 0.0)],
spacegroup=136, cellpar=[4.6, 2.95, 2.95, 90, 90, 90])
calc = ANNCalculator({'Ti':'Ti.15t-15t.nn', 'O':'O.15t-15t.nn'})
TiO2_rutile.set_calculator(calc)
MaxwellBoltzmannDistribution(TiO2_rutile, temp * units.kB)
dyn = NVTBerendsen(TiO2_rutile, dt, temp, taut=taut, trajectory='md.traj')
def myprint():
print(f'time={dyn.get_time() / units.fs: 5.0f} fs ' + \
f'T={TiO2_rutile.get_temperature(): 3.0f} K')
dyn.attach(myprint, interval=20)
dyn.run(nsteps)
Recommended Posts