ABACUS D2、D3与BJ色散实操
双层石墨烯4C的两种层间距、完整输入、色散能与同几何PBE对照。
阅读本篇目录
下载完整输入、原生能量/力/能级及绘图脚本,解压进入附件根目录。先用已有结果生成表格和四张图:
bash analyze.sh
该步骤只读参考数据,用一个CPU核心处理,不启动DFT。完整重算:
sbatch submit.slurm
脚本申请一张P100,顺序运行20个条件,每个1个MPI进程、1个CPU线程、GPU双精度。参考环境为ABACUS3.10.1、GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2、CUDA12.8、OpenBLAS0.3.30。ABACUS这一构建自带的Libxc是6.2.2,不能套用其他软件扩展的Libxc版本。不要在登录节点执行DFT。本例固定结构、scf_thr=1e-6;截断能和k网格是教学设置,换体系后需自己检查。
1. 用双层结构观察色散项#
本例是AB堆垛的双层石墨烯,4个C原子,标称层间距3.35或5.35 Å,周期单胞高度18 Å。固定几何,不做层间距优化;分别运行PBE、PBE+D2、PBE+D3零阻尼及PBE+D3(BJ)。

这里总色散修正同时包含层内及周期像贡献,不是只有两层之间的相互作用,更不能直接称为剥离能或黏附能。两个距离的对照用于说明参数和输出。
2. 完整D3(BJ)输入#
展开完整 INPUT、STRU、KPT
INPUT#
INPUT_PARAMETERS
suffix tutorial
calculation scf
basis_type pw
ecutwfc 60
scf_thr 1e-6
scf_nmax 200
ks_solver cg
device gpu
precision double
cal_force 1
cal_stress 0
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
out_chg 0
out_pot 1
out_wfc_pw 0
nbands 24
symmetry -1
dft_functional pbe
vdw_method d3_bj
smearing_method gaussian
smearing_sigma 0.015
STRU#
ATOMIC_SPECIES
C 12.011 C_ONCV_PBE-1.0.upf
LATTICE_CONSTANT
1.8897261246257702
LATTICE_VECTORS
2.46 0 0
-1.23 2.130422493309719 0
0 0 18
ATOMIC_POSITIONS
Direct
C
0.0
4
0 0 0.40694444444444 1 1 1
0.33333333333333 0.66666666666667 0.40694444444444 1 1 1
0.33333333333333 0.66666666666667 0.59305555555556 1 1 1
0.66666666666667 0.33333333333333 0.59305555555556 1 1 1
KPT#
K_POINTS
0
Gamma
3 3 1 0 0 0
实际选项为vdw_method none、d2、d3_0和d3_bj。本例都用PBE及对应默认色散参数,只改变这一方法选择;不要把为另一个泛函定义的阻尼系数混过来。D3零阻尼和BJ阻尼是不同模型,不是同一个开关的不同精度档。
3. 先用工具看结构和输出#
module load ase/3.29.0
ase convert reference/cases/graphene-none-3.35/OUT.tutorial/STRU.cif bilayer.xyz
这条ASE命令把实际结构转为XYZ,方便在结构查看器中打开。XYZ不包含所有周期单胞信息;需要周期显示时保留原始CIF/STRU。
grep -E 'E_vdwD|!FINAL_ETOT_IS' work/cases/graphene-d3_bj-3.35/OUT.tutorial/running_scf.log | tail -n 3
日志里E_vdwD2或E_vdwD3是原生色散能量。本例用同一几何的总能量差独立核对:E(PBE+色散)−E(PBE)应与该项一致,而不是拿两个不同层间距直接相减。
| 方法 | 3.35 Å总色散修正,eV/4C单胞 | 5.35 Å总色散修正,eV/4C单胞 |
|---|---|---|
| d2 | -0.345910 | -0.237466 |
| d3_0 | -0.250405 | -0.162261 |
| d3_bj | -0.480318 | -0.378906 |
python - <<'PY'
import csv
with open('reference/analysis/dispersion.csv') as f:
for r in csv.DictReader(f):
print(r['method'],r['nominal_gap_A'],r['correction_eV'],
r['total_minus_PBE_eV'])
PY
如果研究平衡层间距、结合/剥离能,还需要足够的距离扫描、结构优化、单层参考、真空和k点收敛,以及一致的泛函和原子数;本篇不把两个固定点当作完整能量曲线。下一篇色散能量与力核对用实际小位移说明力的提取。
选项参考:官方3.10.1输入手册。