aenet (Atomic Energy Network) est un package pour traiter le potentiel d'interaction interatomique ANN (réseau neuronal artificiel). Vous pouvez créer de nouveaux potentiels ANN basés sur des calculs DFT et prédire l'énergie et les forces en utilisant les potentiels appris.
Comme aenet fournit une interface pour ASE (Atomic Simulation Environment), qui est une bibliothèque Python pour la simulation atomique, il est possible d'effectuer une optimisation structurelle et une simulation de dynamique moléculaire (MD) en utilisant le potentiel ANN.
Dans cet article, nous allons effectuer une simulation MD de TiO 2 </ sub> en utilisant le potentiel ANN appris.
Créez l'interface Python pour aenet.
Exécutez make dans chaque répertoire (lib, src, python3) du projet. Il y a plusieurs Makefiles (ifort contre gfortran, mpi contre serial, etc.) dans le répertoire src. Sélectionnez Makefile si nécessaire.
README est préparé pour chaque répertoire, veuillez donc vous y référer également.
$ git clone https://github.com/atomisticnet/aenet.git
$ git checkout v2.0.4 #dernière version
$ cd aenet/lib
$ make #Compiler la bibliothèque
$ cd ../src
$ make -f makefiles/Makefile.gfortran_serial lib #Compiler src.Assurez-vous de définir la cible sur lib.
$ cd ../python3
$ python3 setup.py install --user #Compiler l'interface Python
Si la version gcc lors de la construction de lib ou src et la version gcc lors de la construction de l'interface python ne correspondent pas, la construction ne fonctionnera pas correctement même si elle est terminée. Je suis accro à ça.
Les données formées de TiO 2 </ sub> (aenet-example-02-TiO2-Chebyshev.tar.bz2) peuvent être téléchargées à partir du Site officiel est. Ces données entraînées sont également utilisées dans cet article.
Dans ce qui suit, le calcul est effectué à l'aide du fichier nn formé dans le répertoire `ʻaenet-example-02-TiO2-Chebyshev / 03-predict / set001``.
Comme exemple le plus simple, calculons l'énergie du type rutile TiO 2 </ sub>.
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}')
L'énergie du potentiel ANN pourrait être calculée très facilement.
Mesurons le temps de calcul avec un ordinateur portable. Nous avons créé plusieurs supercellules avec différents nombres d'atomes et avons tracé le temps nécessaire au calcul de l'énergie pour chacune.
Enfin, effectuons une simulation MD. Remplacez simplement la calculatrice ASE par la calculatrice ANN.
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