VASP的MP2相关能计算
用LiH小原胞演示Hartree–Fock、完整虚轨道与MP2相关能三步流程。
阅读本篇目录
MP2在Hartree–Fock参考上加入二阶电子相关修正。它需要占据态和大量未占据态,不能把普通PBE自洽结果直接换一个ALGO标签就当成相同的计算路线。
本例使用LiH岩盐结构的2原子原胞,常规立方晶格常数4.08 Å,只取Γ点。这样做是为了演示完整流程;Γ点结果不作为收敛的体材料总能量或结合能。
1. 先完成Hartree–Fock参考#
在lih-hf目录准备合法Li、H的PBE PAW64 POTCAR,保持POSCAR元素顺序,然后sbatch run.sh。Li采用1价电子势,H为1价电子,共2个价电子、1条双占据能带。
ENCUT = 550
EDIFF = 1E-6
LHFCALC = .TRUE.
AEXX = 1.0
ALDAC = 0.0
AGGAC = 0.0
HFSCREEN = 0.0
ALGO = All
LWAVE = .TRUE.
本例使用VASP 6.6.1 P100适配版的vasp_std,NVHPC 25.3、CUDA 12.8、MKL 2023.2及配套MPI构建。所有步骤经Slurm运行;本文讨论数值流程,没有把提交到GPU队列等同于每个MP2内核的GPU加速证明。
得到的HF能量为-19.31307494 eV/原胞。后续所有相关能使用这个相同参考。
2. 补齐虚轨道#
从HF的OUTCAR读取maximum number of plane-waves。本例为531,因此在lih-hf-virtuals中设置NBANDS=531,复制HF生成的WAVECAR和CHGCAR,再提交:
ISTART = 1
ALGO = Exact
NELM = 1
NBANDS = 531
LOPTICS = .TRUE.
保留HF泛函标签、结构、截断能和k点。Exact在指定参考Hamiltonian上求全部这些本征态;这里NELM=1对应这一步的用途,不是在用一次未收敛的普通自洽代替HF参考。
531只适用于本例。改变晶胞、截断能、k点或程序模式后,应重新确认平面波数量。官网手册也建议MP2准备完整虚轨道空间;Gamma-only程序的带数换算有不同处理,本例统一使用复数vasp_std。VASP MP2三步教程
3. 计算相关能并检查响应截断#
将虚轨道步骤的WAVECAR复制到lih-mp2-100、150、250三个目录,各自提交run.sh。保留HF标签和NBANDS,设置:
ALGO = MP2
LMAXMP2 = 2
ENCUTGW = 150
三个目录分别使用100、150、250 eV的响应基组截断。LMAXMP2控制PAW单中心项的角动量处理,应随赝势核对,不能把本例值推广到所有元素。MP2参数说明
4. 从专用结果段提取能量#
在OUTCAR末尾读取Moeller Plesset 2 correlation段中的直接项、交换项和总相关能,而不是只搜索普通自洽步骤的TOTEN:
EMP2(total) = EHF + Ecorr(MP2)
Ecorr(MP2) = direct contribution + exchange contribution

| ENCUTGW / eV | 响应平面波数 | MP2相关能 / eV原胞⁻¹ | HF+MP2 / eV原胞⁻¹ |
|---|---|---|---|
| 100 | 51 | -0.36344768 | -19.67652262 |
| 150 | 65 | -0.41978678 | -19.73286172 |
| 250 | 169 | -0.44358438 | -19.75665932 |
从150提高到250 eV,相关能仍改变约0.0238 eV/原胞,因此本页不宣布响应截断已收敛。虚轨道空间完整,也不意味着k点、波函数截断、响应截断和赝势误差同时消失。
5. 换体系时注意成本与适用性#
先检查HF参考和能隙,再检查所有收敛参数。小能隙和金属情形不能不加判断地套用常规MP2;大体系还需要评估更合适的LTMP2等实现和内存需求。相关能降低不等于任意材料性质都比PBE更准确。
本例是固定晶胞、固定原子的电子能计算,没有做MP2结构优化,也没有用不同原子数体系去计算解离能。
输入与提取#
按README依次完成HF、虚轨道和三个相关能目录,再运行python extract_mp2.py。提取脚本核对虚轨道数、直接项与交换项之和,并输出MP2-DATA.json。附件不含POTCAR或WAVECAR,需要从自己的前置计算生成波函数。