ASE专题

ASE调用VASP:结构、能量与力

真实调用计算程序,保存输入输出并用位移能量差分检查力的单位和符号,附终端命令、结构图与完整程序。

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

ASE用统一的Atoms对象保存结构,把能量和力的计算交给calculator。本篇使用真实程序计算三个邻近构型,再把返回的力与能量差分相互核对。下载本组输入、实际结果及绘图程序,解压进入资料包目录。

1. 准备环境和运行#

本例ASE3.29.0调用VASP6.6.1的CPU构建。先在inputs/POTCAR准备自己有权使用的Si PAW/PBE赝势,附件不分发POTCAR。

module load ase/3.29.0 vasp/6.6.1-8173m
bash run.sh vasp

脚本在新work/vasp中建三份计算目录,4个MPI进程。VASP使用400 eV截断、3×3×3 Γ中心k网格、PBE、EDIFF=1E-6、Gaussian展宽0.05 eV,关闭对称性和波函数/电荷输出。Si原胞2原子,a=5.43 Å,将第2原子沿x偏移0.06 Å,再分别改变−0.005、0、+0.005 Å。这是三个固定结构单点,不是结构优化。

在已申请的计算资源内运行这些命令,MPI进程数必须不超过获分配的CPU数。ASE不会替你向Slurm申请资源。

POTCAR路径怎样设置#

ASE按VASP_PP_PATH/potpaw_PBE/Si/POTCAR查找。本例脚本将用户提供的赝势复制到工作目录中的这个结构,再设置VASP_PP_PATH。把软件能找到的POTCAR与原计算所用赝势核对一致;不要混用不同版本标签后比较绝对能量。

2. 本例完整计算程序#

run.sh负责加载环境和复制输入,实际计算逻辑如下。ASE返回能量单位eV、力单位eV/Å,应力通常为eV/ų。

展开完整Python程序
from pathlib import Path
import json,os,numpy as np
from ase.io import write
from ase.build import bulk
from ase import Atoms
B=Path(__file__).resolve().parent
rows=[]
from ase.calculators.vasp import Vasp
for label,delta in [('minus',-.005),('center',0),('plus',.005)]:
 d=B/label;d.mkdir();a=bulk('Si','diamond',a=5.43);a.positions[1,0]+=.06+delta
 calc=Vasp(directory=str(d),command='mpirun -np 4 vasp_std',xc='PBE',encut=400,ediff=1e-6,kpts=(3,3,3),gamma=True,ismear=0,sigma=.05,prec='Accurate',lreal=False,isym=0,ibrion=-1,nsw=0,lwave=False,lcharg=False,nbands=16,nelm=100)
 a.calc=calc;e=a.get_potential_energy();f=a.get_forces();s=a.get_stress();write(d/'result.xyz',a);rows.append(dict(label=label,delta_A=delta,energy_eV=e,forces_eV_A=f.tolist(),stress_eV_A3=s.tolist(),converged=bool(calc.converged)));assert calc.converged
(B/'RESULTS.json').write_text(json.dumps(rows,indent=2)+'\n')

生成三个目录:minus、center、plus。程序保存RESULTS.json与每个构型的result.xyz;DFT案例还保留引擎原始输入输出。要继续结构优化时,可将已配置的calculator交给ASE优化器,但本例没有把三个单点误称为优化轨迹。

3. 实际结果和独立检查#

位移增量/Å 总能量/eV
-0.005 -10.203851360
+0.000 -10.199582410
+0.005 -10.194944260

用中心差分检查第2原子的x方向力:

F ≈ −[E(+δ) − E(−δ)] / (2δ),δ = 0.005 Å
程序返回:-0.890768380 eV/Å
能量差分:-0.890710000 eV/Å
绝对差异:5.84e-05 eV/Å

实际结构与三个位移构型的相对能量

运行python check_results.py reference检查附件参考;复算后执行python check_results.py work检查自己的输出。程序分别核对原始输出和ASE结果;有限差分有截断误差,SCF和积分网格也有误差,不能要求两者逐位相同。相互吻合说明本例接口的主要单位与符号一致,不能证明材料精度已经收敛。

get_potential_energy()默认返回VASP的外推零温能量;有限展宽下还会有自由能。与原始输出对照时要明确是哪一项,不应只挑一个接近的数字。检查OUTCAR、OSZICAR和calculator的converged,达到最大电子步数不等于收敛。本例同时逐分量对照了vasprun.xml中的力。

参考:ASE VASP接口。其他联用:VASP、ABACUS、CP2K、NEP。

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

查看配图

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

100%查看原图 ↗