[PYTHON] Essayez la simulation MD avec un potentiel ANN en utilisant AENET et ASE

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.

Installation

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.

Données formées

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``.

Exemple simple

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.

référence

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.

aenet_fig1.png

Simulation MD

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)

aenet-ani.gif

référence

Recommended Posts

Essayez la simulation MD avec un potentiel ANN en utilisant AENET et ASE
Essayez d'utiliser PythonTex avec Texpad.
Essayez d'utiliser matplotlib avec PyCharm
Essayez d'utiliser pytest-Overview and Samples-
Jouez avec le module MD de ASE
Essayez d'utiliser le folium avec anaconda
Utilisation de sessions et de réflexions avec SQL Alchemy
Essayez la simulation de contrôle de fréquence avec Python
Essayez d'utiliser le networkx de Python avec AtCoder
Effectuer un calcul DFT avec ASE et GPAW
Essayez d'utiliser l'appareil photo avec OpenCV de Python
Essayons gRPC avec Go et Docker
Essayez d'utiliser Python avec Google Cloud Functions
J'utilise tox et Python 3.3 avec Travis-CI
Simulation physique 2D avec Box2d et wxPython