VASP 结构优化:晶胞、原子与二维材料
分清晶胞优化与原子位置优化,参照Si、MoS₂和Cu表面的实算完成自己的结构优化。
阅读本篇目录
结构优化包含两件事:调整原子位置,以及调整晶胞的大小与形状。两者可以分开做,也可以一起做。 选择取决于你的物理问题,而不是把所有自由度放开就一定更好。
本文用鸢算科技集群实际完成的 Si、单层 MoS₂ 和 Cu(111) 算例介绍流程。电子收敛采用 EDIFF=1E-6,原子力采用 EDIFFG=-0.02,适合先学会流程、建立自己的起始方案。
本组教程:1. 结构优化 · 2. 能量差 · 3. 相稳定性 · 4. 状态方程与压力 · 5. 表面与界面 · 6. 结构搜索。
1. 先决定优化什么#
| 想做的事情 | 保持不变 | 允许变化 | 常用设置 |
|---|---|---|---|
| 固定实验晶格,只调整原子位置 | 晶胞三条矢量 | 原子位置 | ISIF=2 |
| 优化晶胞,不独立移动原子 | 原子分数坐标 | 晶胞大小与形状 | ISIF=6 |
| 寻找三维体相平衡结构 | 无额外晶胞约束 | 原子位置、晶胞大小与形状 | ISIF=3 |
| 固定体积,优化形状和原子 | 晶胞体积 | 晶胞形状、原子位置 | ISIF=4 |
| 固定形状,只调整体积和原子 | 晶胞形状比例 | 体积、原子位置 | ISIF=8,VASP≥6.4.1 |
| 二维材料自由面内优化 | 真空方向晶胞矢量 | 面内晶胞、原子位置 | 本例 ISIF=3+面内约束 |
| 给定应变的二维体系 | 施加应变后的晶胞 | 原子位置 | ISIF=2 |
| 表面固定底层 | 晶胞、指定底层原子 | 其余原子位置 | ISIF=2+Selective dynamics |
分数坐标固定,不等于笛卡尔坐标固定。 ISIF=6 改变晶胞时,原子随晶胞一起缩放;它只是没有额外的内部位置优化。这种方法适合内部位置由对称性确定的结构,不建议拿来替代复杂晶体的原子弛豫。

2. 下载算例,先跑通一个目录#
下载本组完整算例与数据(ZIP) · 下载实算结果表(CSV)。
解压后,每个目录对应一次计算。例如 si-full 是晶胞与原子一起优化,mos2-inplane 是二维面内优化。附件包含本次使用的输入、优化后结构、数据和绘图依据;POTCAR需使用你有权使用的赝势自行准备,不在下载包中。
- 进入所选算例目录,确认
POSCAR的晶胞、元素顺序和原子数。 - 按相同顺序准备 PBE 赝势。本例使用 PAW PBE 6.4 数据集,Mo用
Mo_pv,其余用对应元素的标准势。可以使用已有的赝势生成工具,不能把不同泛函的数据集混在一起。 - 检查
INCAR、KPOINTS、run.sh。本例使用VASP 6.6.1 P100版,每个任务1张GPU、1个MPI进程。 - 提交并等待完成:
sbatch run.sh
squeue -u "$USER"
- 查看
OUTCAR、OSZICAR和CONTCAR。队列中的作业结束只是程序执行结束,还要按第6节判断数值是否收敛。
模块使用 vasp/6.6.1-p100;该构建采用NVHPC 25.3、CUDA 12.8、HPC-X 2.22.1及MKL 2023.2。切换V100时须同时修改分区、GPU类型和模块,不能只改其中一项。更多提交方法见作业管理。
3. 三维Si:分别优化原子和晶胞#
本例使用8原子金刚石Si常规胞,初始晶格5.50 Å。原子优化和联合优化的输入对一个原子施加了小位移,方便观察原子回到平衡位置;仅晶胞优化则从理想分数坐标出发。
三组共同设置如下;区别主要是 ISIF。完整参数以下载目录中的INCAR为准。
ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
EDIFFG = -0.02
IBRION = 2
NSW = 120
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE.
LASPH = .TRUE.
KPOINTS为Gamma中心 5 5 5。想联合优化就再写 ISIF=3;只优化原子则写 ISIF=2。ENCUT=550 是这批示例的统一选择,不是所有赝势和材料通用的最优值。改变晶胞时,应注意平面波截断不足造成的Pulay应力。
| 目录 / 方式 | 最终a / Å | 最大原子力 / eV·Å⁻¹ | 压力 / GPa |
|---|---|---|---|
| si-positions | 5.50000 | 0.01605 | -1.4678 |
| si-cell | 5.46860 | 0.00001 | 0.0057 |
| si-full | 5.46975 | 0.01477 | -0.0110 |
固定晶胞的结果可以有很小的原子力,但仍存在压力;晶胞优化会进一步调整体积。对于有内部自由度的材料,也可能出现晶胞已合适、原子位置还没有优化好的情况。

怎样得到晶格、键长和键角? 用VESTA打开CONTCAR可以直接查看晶胞参数和测量键长/键角;附件的结果表保留晶胞矢量,适合用ASE等工具批量提取。计算周期边界附近的键长要使用最近镜像,不能直接相减坐标。本次联合优化Si最近邻键长约 2.367 Å;选取一个四配位Si中心,其六个最近邻夹角为 109.395–109.520°。它们接近理想四面体的109.47°,轻微偏离应结合力阈值理解。
4. 单层MoS₂:优化面内晶格,保留真空#
单层模型采用3原子原胞,初始面内晶格3.20 Å,晶胞c=23.12 Å,初始层厚约3.12 Å。因此周期层之间的空白约20 Å;c是整个晶胞高度,不等于真空厚度。层厚随原子优化变化,c固定时实际空白也会相应改变。
先建好二维结构和真空,使用 7 7 1 k网格,再设置:
ISIF = 3
IBRION = 2
LATTICE_CONSTRAINTS = .TRUE. .TRUE. .FALSE.
本例平面位于xy,第三晶胞矢量沿z;运行后核对第三矢量保持不变。这个约束在VASP 6.4.3起支持相关结构优化,旧版本还有已知问题,建议直接参照本例的6.6.1环境。对于倾斜、非正交模型,该参数涉及应力矩阵分量,不能机械理解为任意三条矢量分别锁定;本例平面取向明确,不应直接套到任意方向的薄层。
| 目录 | 面内a / Å | 晶胞c / Å | 最大原子力 / eV·Å⁻¹ |
|---|---|---|---|
| mos2-positions | 3.20000 | 23.12000 | 0.00966 |
| mos2-inplane | 3.18306 | 23.12000 | 0.01693 |
| mos2-strain | 3.24672 | 23.12000 | 0.00031 |
如果客户要算“外延拉伸2%的MoS₂”,流程是:先得到平衡单层 → 将两条面内矢量乘1.02并同步缩放原子 → 固定新晶胞 → 用 ISIF=2 优化内部原子。不能施加应变后又完全放开晶胞,否则应变可能被优化掉。

图中的应力采用ASE符号,拉伸为正;VASP OUTCAR的应力符号与它相反。二维体系输出的三维应力还受真空高度影响,比较不同真空厚度时应转换为二维面内力/长度,不能直接比较GPa数值。
5. Cu(111):固定底层,只放开上层#
先优化体相Cu,用得到的晶格切出5层Cu(111),沿法向加入真空。本例的1×1表面胞每层1个原子,固定底部两层,其余三层优化,KPOINTS为 9 9 1。
在POSCAR坐标类型之前加入 Selective dynamics,随后逐个原子写约束标记:
Selective dynamics
Direct
... ... ... F F F
... ... ... F F F
... ... ... T T T
... ... ... T T T
... ... ... T T T
F F F表示该原子固定,T T T表示放开。这里的示意按底层到顶层排列,实际文件须先确认原子顺序;标记不能凭行号盲填。选择性约束对应晶格方向,斜晶胞的单方向限制要特别留意。本例三个方向一起固定或放开,不存在方向混淆。
本次自由原子的最大力为 0.01518 eV/Å。固定原子的残余力不需要变成零,应检查允许移动的自由度。计算对称双面表面能时,另用两面等价、均可弛豫的模型,参见表面与界面教程。
6. 算完以后看什么#
| 信息 | 在哪里看 | 怎样理解 |
|---|---|---|
| 最终结构 | CONTCAR | 晶胞与原子都在这里;需要继续计算时复制为新的POSCAR |
| 电子迭代 | OSZICAR、OUTCAR | 每个离子步的电子迭代都应收敛;频繁顶到NELM要先解决SCF问题 |
| 结构优化停止 | OUTCAR中的 reached required accuracy |
再结合力、晶胞、应力和实际约束判断 |
| 原子力 | OUTCAR中的 TOTAL-FORCE |
检查自由原子的力,阈值为0.02 eV/Å |
| 应力与压力 | OUTCAR中的 in kB、external pressure |
1 kbar=0.1 GPa;零外压体相检查残余应力,给定应变模型允许有应力 |
| 能量 | OUTCAR中的 energy(sigma->0) |
做能量差时统一字段、泛函、赝势和计算设置 |
EDIFFG=-0.02不是“压力小于0.02 GPa”。原子力合格也不能代替晶胞应力检查。只优化晶胞的高对称结构尤其容易从一开始就有接近零的原子力。
如果跑满 NSW 还未收敛,先看结构是否合理、电子是否稳定,再将CONTCAR作为新POSCAR继续优化。较大晶胞变化后可用最终结构重新启动一次,更新平面波基组并复核应力;不要只把NSW无限增大。
7. 接下来怎样用优化结果#
结构合理后,通常另建静态目录,复制CONTCAR为POSCAR,设置 NSW=0、IBRION=-1,再计算需要的能量、电子结构或其他性质。涉及能量差时,各参照项要统一设置。下一篇给出内聚能、结合能与反应能的完整实例。
设置依据:ISIF、二维晶格约束、体积优化与Pulay应力。