Spielen Sie mit dem MD-Modul von ASE

Lassen Sie uns eine MD-Simulation von Ni-Kristallen mit dem Modul ase.md von ASE (Atomic Simulation Environment) durchführen.

Modell-

Erstellen Sie ein Massenmodell von Ni (fcc).

import numpy as np
from ase.build import bulk
from ase.build.supercells import make_supercell
from ase.calculators.emt import EMT

#Ni Masse
Ni_bulk= bulk('Ni', 'fcc', a=3.5, cubic=True) 

#Super Gitter
Ni_bulk = make_supercell(Ni_bulk, np.diag([3., 3., 3.]))

#Verwenden Sie EMT
Ni_bulk.set_calculator(EMT())

Ni_bulk.png

MD-Simulationseinstellungen

Führen Sie eine NVT-Simulation durch (konstantes Volumen / konstante Temperatur). Halten Sie zuerst die Temperatur des Systems bei 10 K und erhöhen Sie sie dann auf 500 K. Außerdem wird die Temperatur alle 20 Schritte ausgegeben.

from ase import units
from ase.md.nvtberendsen import NVTBerendsen
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution

dt = 2 * units.fs
temp0, nsteps0 = 10, 200
temp1, nsteps1 = 500, 400
taut = 20*units.fs
    
MaxwellBoltzmannDistribution(Ni_bulk, temp0*units.kB)
dyn = NVTBerendsen(Ni_bulk, dt, temp0, taut=taut, trajectory='md.traj')
def myprint():
    print(f'time={dyn.get_time() / units.fs: 5.0f} fs ' + \
          f'T={Ni_bulk.get_temperature(): 3.0f} K')
dyn.attach(myprint, interval=20)

Führen Sie die MD-Simulation aus

dyn.run(nsteps0)

#Erhöhen Sie die Temperatur
dyn.set_temperature(temp1)
dyn.run(nsteps1)

Visualisieren Sie die Ergebnisse

Visualisieren Sie Änderungen in Temperatur, Struktur und radialer Verteilungsfunktion (RDF) mithilfe von matplotlib.

%matplotlib widget 

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from ase.visualize.plot import plot_atoms
from ase.io.trajectory import Trajectory
from ase.geometry.analysis import Analysis

traj =  Trajectory('md.traj')

fig, ax = plt.subplots(1, 3, figsize=(9,3), tight_layout=True)

t = np.arange(nsteps0+nsteps1+1) * dt
temp = [atoms.get_temperature() for atoms in traj]

nframes = 20

def update(iframe):
    idx = int((nsteps0+nsteps1)*iframe/nframes)
    
    ax[0].clear()
    ax[0].set_title('Temperature')
    ax[0].set_xlabel('time (fs)')
    ax[0].set_ylabel('T (K)')
    ax[0].plot(t, temp)
    ax[0].plot(t[idx], temp[idx], marker='X', markersize=10)
    
    ax[1].clear()
    ax[1].set_title('Structure')
    ax[1].axis('off')
    plot_atoms(traj[idx], ax=ax[1], rotation='45x,45y')
    
    distribution, distance = Analysis(traj[idx]).get_rdf(rmax=5., nbins=100, return_dists=True)[0]
    ax[2].clear()
    ax[2].set_title('RDF')
    ax[2].set_ylim((0,10))
    ax[2].set_xlabel('distance (A))')
    ax[2].set_ylabel('distribution')
    ax[2].plot(distance, distribution, color='darkblue')

ani = FuncAnimation(fig, update, np.arange(nframes), blit=True, interval=250.)
ani.save('ani.gif', writer="imagemagick")

anim_Ni.gif

Referenz

Recommended Posts

Spielen Sie mit dem MD-Modul von ASE
Spielen Sie mit dem PIR-Sensormodul [DSUN-PIR]
Spiel mit dem Propheten
Spielen Sie mit dem UI-Modul von pythonista3
Spiele mit PyTorch
Spielen Sie mit 2016-Python
Spielen Sie mit CentOS 8
Spiel mit der Pyramide
Spiel mit Fathom
Spiel mit Othello (Reversi)
Spielen wir mit der 4. Dimension der 4. Dimension
Spielen Sie mit Push-Benachrichtigungen mit imap4lib
Spielen Sie mit Linux-Partitionen herum
Spielen wir mit Amedas Daten - Teil 4
Spielen Sie mit Jupyter Notebook (IPython Notebook)
[Python] Spielen Sie mit Discords Webhook.
Versuchen Sie eine MD-Simulation mit ANN-Potenzial unter Verwendung von Aenet und ASE
Spielen wir mit Amedas Daten - Teil 3
Spielen wir mit Amedas Daten - Teil 2
Spielen Sie mit A3RT (Textvorschlag)
Spiele mit einer Schildkröte mit Schildkrötengrafiken (Teil 1)
Spielen Sie mit Poancare-Serien und SymPy
Lass uns mit Python mit Python spielen [Anfänger]
Sortieren Sie Namen mit dem Zufallsmodul von Python
Spielen Sie mit der Pythonista-UI-Implementierung [Action-Implementierung]
Spielen Sie mit Linux-Partitionen herum ~ Fortsetzung ~
Erkennt Personen mit dem menschlichen Sensormodul
Funken spielen mit WSL Anaconda Jupyter (2)
Spielen Sie mit Turtle auf Google Colab
Spiele mit Dämonen, weil es ein Abschnitt ist