ASE状态方程与空位结构优化
用铜EMT算例学习13点EOS、固定晶胞原子优化和空位形成能。
阅读本篇目录
本文使用鸢算科技集群实际运行的小算例。先下载输入、完整脚本与参考数据并解压,以下命令从解压目录开始。reference 保存原始参考结果,自己的运行放在 work,避免覆盖。
1 先计算铜的能量—体积曲线#
本例使用ASE 3.29.0内置EMT经验势。它适合快速学习流程;这些数值不是VASP或其他DFT结果。
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 eos
python ase_examples.py vacancy
这两步按顺序运行:空位算例读取EOS拟合出的晶格常数。若已完成第一篇建模,可在同一 work/ase 目录直接执行这两个命令,不必重新复制。
EOS对原胞晶格长度乘0.94至1.06的13个系数,缩放时保持分数坐标。用Birch–Murnaghan方程拟合:
from ase.build import bulk
from ase.calculators.emt import EMT
from ase.eos import EquationOfState
import numpy as np
a = bulk('Cu', 'fcc', a=3.6)
volumes, energies = [], []
for scale in np.linspace(0.94, 1.06, 13):
b = a.copy()
b.set_cell(a.cell * scale, scale_atoms=True)
b.calc = EMT()
volumes.append(b.get_volume())
energies.append(b.get_potential_energy())
v0, e0, B = EquationOfState(volumes, energies, eos='birchmurnaghan').fit()
print(v0, e0, B)

结果为平衡原子体积 11.569384 ų、晶格常数 3.590239 Å、体积模量 133.069 GPa。脚本中B原始单位为eV/ų,应除以ase.units.GPa后报告GPa。
2 再优化空位周围原子#
建立108原子完美胞,删除一个原子得到107原子空位胞,保持晶胞固定,用BFGS移动原子直到最大力小于0.02 eV/Å。
from ase.optimize import BFGS
# atoms是已赋予EMT计算器的空位结构
opt = BFGS(atoms, logfile='opt.log', trajectory='vacancy.traj')
opt.run(fmax=0.02, steps=150)
这是原子位置优化,不是晶胞优化。EOS的各体积点是预先设置的晶胞尺寸;晶胞优化需要明确的晶胞自由度和应力目标。

本例最大残余力 0.016720 eV/Å。同一经验势与晶胞条件下,空位形成能为 E(107)−107/108×E(108),得到 1.225338 eV。这一小超胞没有完成缺陷有限尺寸收敛。
cat eos/RESULT.json
cat vacancy/RESULT.json
tail vacancy/opt.log
查看和复现配图#
下载包 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官方教程。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。