



在上一章《第十七章:VASP晶体结构优化的原理与作用!| 2026新版VASP基础教程》中,华算科技朱老师详细介绍了VASP示例任务。VASP计算一般从结构优化开始,然后对优化后的结构进行性质计算。本章将介绍VASP结构优化计算实例,让大家更好的了解计算流程,具体包括结构优化、半导体性质案例、表面与催化案例。




VASP版本
建议使用 VASP 6.0 或以上版本(如 6.3.0),因为该版本对 ALGO=V(RMM-DIIS)算法的优化,使得离子弛豫(ionic relaxation)过程更加稳定高效。
计算平台
建议使用 Linux 系统(Ubuntu/CentOS),并确保已安装 MPI(Message Passing Interface)和 FFTW 库。
计算节点
MgO 晶胞较小(NaCl 结构),普通计算节点即可完成。若进行大规模的表面或缺陷模拟,需考虑节点数目。



MgO 的晶体结构属于 NaCl 型(空间群 Fm-3m,#225),可以通过晶胞复制构建更大的模拟体系。
(1) 使用 VESTA 或 Materials Project 直接下载 POSCAR
最直接的方法是从材料数据库(如 Materials Project)下载 MgO 的 POSCAR 文件(POSCAR_mgo)。在 VESTA 中可视化检查原子顺序,确保 Mg 与 O 按预期交替排列。
(2) 手动构建超胞
若研究晶格缺陷(如空位)或表面,需要构建 2x2x2 或更大的超胞。
# 复制原始结构文件夹
cp -r opt mgo_supercell
cd mgo_supercell
# 在 Linux 中生成 2x2x2 超胞
qvasp -c2p -s 2
# 或者使用 VESTA 的 “Transform” 功能
生成的 POSCAR 文件内容示例:
MgO NaCl structure
1.0
4.2120000 0.0000000 0.0000000
0.0000000 4.2120000 0.0000000
0.0000000 0.0000000 4.2120000
Mg O
1 1
Direct
0.0000000 0.0000000 0.0000000 Mg
0.5000000 0.5000000 0.5000000 O
MgO 的计算需要两种元素的赝势文件。
Mg:推荐使用 Mg_sv(包含半核电(semi-core)电子)或 Mg(标准),具体取决于计算需求。
O:使用 O(标准)。
将两者拼接得到 POTCAR:
cat /path_to_potpots/Mg_sv/POTCAR > POTCAR
cat /path_to_potpots/O/POTCAR >> POTCAR
注意:如果研究高压性质(如 100 GPa),应选择 PBE-PAW 类型的硬赝势,以避免过软赝势导致的数值发散。




INCAR 是 VASP 的核心控制文件,决定了计算的精度、算法和收敛准则。针对 MgO 结构优化,推荐设置如下:
SYSTEM = MgO Structure Optimization
PREC = Accurate # 计算精度,推荐使用 Accurate 而非 Normal
ENCUT = 520 # 能量截断(eV),通常设为 POTCAR 中最大 ENMAX 的 1.3 倍
ISMEAR = 0 # 高斯展宽
SIGMA = 0.05 # 展宽宽度
IBRION = 2 # 离子弛豫算法:共轭梯度法(CG)
ISIF = 3 # 同时优化离子位置和晶格参数(体积和形状)
NSW = 200 # 最大离子弛豫步数
EDIFF = 1E-6 # 电子步能量收敛阈值
EDIFFG = -0.01 # 离子弛豫力收敛阈值(eV/Å),负值表示力阈值
LREAL = Auto # 计算时是否使用实空间投影
ALGO = Normal # 电子迭代算法,MgO 体系简单推荐 Normal,若不收敛可改为 Fast
NELM = 100 # 电子步最大迭代次数
ISIF=3:表示不仅要优化原子位置,还要优化晶格参数(体积、形状),这对于获得 MgO 的平衡晶格常数至关重要。
EDIFFG=-0.01:设置力收敛阈值为 0.01 eV/Å,确保原子力足够小。
ENCUT=520:MgO 的赝势 ENMAX 通常约为 400 eV,取 1.3 倍可确保波函数展开的完整性。







KPOINTS 决定了布里渊区采样密度。对于小晶胞的 MgO,需确保 k 点网格足够密集。
Automatic mesh
0
Gamma
6 6 6
0 0 0
说明:
对于 1x1x1 的原始晶胞,建议使用 6x6x6 或更密集的 k 网格。若构建了 2x2x2 超胞,网格密度应保持相同(即 3x3x3)。
Gamma 点中心网格适用于大多数金属和绝缘体。




在 Linux 集群中,使用 qsub 或 sbatch 脚本提交计算。示例 SLURM 脚本:
#!/bin/bash
#SBATCH -J MgO_opt
#SBATCH -N 1
#SBATCH -n 32
#SBATCH -p normal
#SBATCH -t 48:00:00
#SBATCH -o MgO_opt.out
#SBATCH -e MgO_opt.err
module load vasp/6.3.0
mpirun -np 32 vasp_std > vasp.out
VASP 运行时会生成 OUTCAR、OSZICAR 和 vasp.out 文件。
OSZICAR:实时显示能量收敛情况,查看 E0= 后的数值变化。
OUTCAR:若计算卡死,可查看 EDIFF 相关的警告信息。
常见报错:若出现 “ELECTRONIC MINIMIZATION NOT CONVERGED”,可尝试降低 NELM,或将 ALGO 改为 VeryFast(ALGO=48)。







计算结束后,VASP 会输出 CONTCAR(收敛后的结构)。
将 CONTCAR 重命名为 POSCAR,使用 VESTA 打开。
检查 Mg-O 键长:理论值约为 2.107 Å。
若 ISIF=3,则晶格常数 a 会发生变化,通常收敛后的 a 为 4.211 Å 左右(略有收缩/膨胀取决于泛函)。
能量收敛:查看 OUTCAR 中的 FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV),确保在最后几步能量变化低于 EDIFF=1E-6。
力收敛:在 OUTCAR 中搜索 TOTAL-FORCE,检查每个原子的力值是否均小于 0.01 eV/Å。




前期准备工作:介绍了确认计算资源、准备结构文件、准备赝势
输入文件设置:介绍了INCAR与KPOINTS文件
任务提交与监控:介绍了提交作业与监控任务方法
下一章将正式引入本次教程的核心—二维材料结构优化。我们将从构建POSCAR、输入文件设置、计算流程方面详细介绍VASP结构优化案例,敬请期待!
