ASE专题

ASE短时动力学与NEB路径

用铜EMT实际完成短NVE轨迹和七映像约束NEB。

更新于 2026-10-27约 3 分钟阅读按任务与环境选择适用配置
阅读本篇目录

本文使用鸢算科技集群实际运行的小算例。先下载输入、完整脚本与参考数据并解压,以下命令从解压目录开始。reference 保存原始参考结果,自己的运行放在 work,避免覆盖。

1 跑一个短NVE轨迹#

ASE 3.29.0与内置EMT;本例108原子Cu,初始温度100 K、固定随机种子27,VelocityVerlet时间步1 fs,运行1000步,即1 ps。这里只检查短时积分与能量变化。

module purge
module load ase/3.29.0
mkdir -p work/ase
cp scripts/ase_examples.py work/ase/
cd work/ase
python ase_examples.py nve
python ase_examples.py neb
from ase.md.verlet import VelocityVerlet
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary
from ase import units
import numpy as np
MaxwellBoltzmannDistribution(atoms, temperature_K=100, rng=np.random.RandomState(27))
Stationary(atoms)
dynamics = VelocityVerlet(atoms, timestep=1 * units.fs, trajectory="md.traj")
dynamics.run(1000)

铜短NVE轨迹的温度和每原子总能变化

本次总能峰峰差为 3.408×10⁻⁶ eV/原子。温度会在势能和动能交换时波动;NVE并不将每一帧温度固定在100 K。这条1 ps轨迹不用于计算收敛扩散系数或热导率。

2 用七个映像演示NEB#

建立27原子的Cu(111)基底,再放一个Cu吸附原子。固定全部基底,只优化吸附原子端点,然后在相邻等价fcc位点之间建立7个映像,使用爬山NEB和FIRE,路径最大力阈值0.03 eV/Å。

from ase.mep import NEB
from ase.optimize import FIRE
from ase.calculators.emt import EMT
images = [initial] + [initial.copy() for _ in range(5)] + [final]
for image in images:
    image.calc = EMT()
band = NEB(images, climb=True)
band.interpolate(mic=True)
FIRE(band, logfile="neb.log", trajectory="neb.traj").run(fmax=0.03, steps=350)

固定铜基底的吸附原子NEB路径

这个固定基底、EMT、小表面胞示例的路径势垒为 0.087230 eV。它演示端点、映像、约束和结果读取,不代表经过路径搜索、基底弛豫和尺寸收敛的DFT扩散势垒。

cat nve/RESULT.json
cat neb/energies.csv
cat neb/RESULT.json

查看和复现配图#

下载包 figures 中是高清图片,可点击正文图片放大。reference 中保存数据与结果表;重新绘图可执行:

module purge
module load ase/3.29.0
mkdir -p work/replot
cp -r reference work/replot/
cp plot_reference.py work/replot/
cd work/replot
python plot_reference.py

不同教程共用此资料包;同一个脚本不需要重复下载。重新运行算例时使用新的工作目录。

方法与接口参考:ASE官方教程。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗