DP-GEN体相初始数据实操
从Si原胞优化、缩放扰动、三条短AIMD到15帧DeepMD标签,说明diamond晶格参数和四个原生阶段。
阅读本篇目录
dpgen init_bulk负责准备体相初始数据:先优化结构,再缩放与扰动,进行短AIMD,最后收集能量、力和维里。本篇以2原子Si金刚石原胞实际执行四个阶段,得到3条各5帧的短轨迹,共15帧标签,重点是操作顺序与文件传递。
1 下载与查看参考结果#
下载原生初始化实例包,保存为dpgen-init.zip。
python3 -m zipfile -e dpgen-init.zip .
cd dpgen-init-bulk
bash results.sh
results.sh只读取附件参考数据。需要自己重新计算时再运行bash workflow.sh,该命令使用普通账号,通过Slurm申请每个任务1CPU、1GPU。DP-GEN0.14.0采用Python3.12;VASP6.6.1 GPU版本使用NVHPC25.3、MKL2023.2,实际运行按对应P100或V10016G模块选择。

2 先看晶格与参数#
cat param-template.json
cat reference-structures/initial.POSCAR
本版diamond生成器使用非正交两原子原胞,latt乘在(0,1,1)、(1,0,1)、(1,1,0)上,所以常规立方晶格常数a=2×latt。这里latt=2.715 Å对应常规a=5.43 Å,原胞体积40.02575175 ų,最近邻Si—Si约2.3513 Å。不要直接把常规5.43填入这个生成器的latt。
super_cell=[1,1,1]保留原生2原子;不是8原子常规晶胞。需要不同结构时,也可以使用from_poscar与自己准备的POSCAR,具体是否优化晶胞仍由INCAR决定。
{
"stages": [
1,
2,
3,
4
],
"cell_type": "diamond",
"latt": 2.715,
"super_cell": [
1,
1,
1
],
"elements": [
"Si"
],
"atom_masses": [
28.0855
],
"potcars": [
"private-pp/Si.POTCAR"
],
"relax_incar": "inputs/INCAR.relax",
"md_incar": "inputs/INCAR.md",
"scale": [
1.0
],
"skip_relax": false,
"pert_numb": 2,
"md_nstep": 5,
"pert_box": 0.01,
"pert_atom": 0.02,
"coll_ndata": 100,
"type_map": [
"Si"
],
"init_fp_style": "VASP"
}
生成的初始POSCAR为:
X2
1.0
0.0000000000000000 2.7149999999999999 2.7149999999999999
2.7149999999999999 0.0000000000000000 2.7149999999999999
2.7149999999999999 2.7149999999999999 0.0000000000000000
Si
2
direct
0.1250000000000000 0.1250000000000000 0.1250000000000000 X0+
0.8749999999999999 0.8750000000000000 0.8750000000000000 X0+
3 优化输入:本例只优化原子位置#
SYSTEM = Si2 DPGEN native initialization
ENCUT = 500
PREC = Accurate
EDIFF = 1E-6
ISMEAR = 0
SIGMA = 0.05
ALGO = Normal
NELM = 120
KSPACING = 0.6
KGAMMA = .TRUE.
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.
ISYM = 0
IBRION = 2
ISIF = 2
NSW = 10
EDIFFG = -0.02
LH5 = .FALSE.
ISIF=2固定晶胞、优化原子位置;力标准为0.02 eV/Å。本例最终最大原子力约1.73e-06 eV/Å。原子力很小不代表5.43 Å已经是该泛函的最优晶格常数;需要晶胞优化时,应按研究目标设置相应ISIF并检查应力和晶胞收敛。
本例用KSPACING自动生成网格,没有另外放KPOINTS。电子收敛为1E-6,ENCUT500 eV;这些是本次流程输入,实际研究仍应按体系检查截断与k点收敛。
4 执行四个阶段#
bash workflow.sh
配套脚本准备自己目录中的授权POTCAR,加载DP-GEN,依次调用原生命令。简明形式为:
dpgen init_bulk param.json machine.json
附件控制器按阶段保存PROGRESS.json,同一目录只保留一个主控。另一窗口查看:
bash status.sh
squeue -u "$USER"
阶段顺序如下:
| 阶段 | 用户要确认什么 | 主要目录 |
|---|---|---|
| 1 结构优化 | 优化输出完整,原子位置与力符合目标 | 00.place_ele |
| 2 缩放与扰动 | 在已优化结构上生成原始及两份扰动构型 | 01.scale_pert |
| 3 短AIMD | 每份构型产生5个电子收敛帧 | 02.md |
| 4 收集 | 合并真实标签并导出DeepMD格式 | 02.md/sys-0002/deepmd |
本例scale=[1.0]不做额外整体缩放;pert_numb=2是两份扰动,加上一份未扰动结构,共3个MD任务。pert_box=0.01与pert_atom=0.02 Å分别控制晶胞和原子扰动。
5 短MD输入与实算数据#
SYSTEM = Si2 DPGEN native initialization
ENCUT = 500
PREC = Accurate
EDIFF = 1E-6
ISMEAR = 0
SIGMA = 0.05
ALGO = Normal
NELM = 120
KSPACING = 0.6
KGAMMA = .TRUE.
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.
ISYM = 0
IBRION = 0
NSW = 5
POTIM = 0.5
TEBEG = 300
TEEND = 300
MDALGO = 2
SMASS = 0
ISIF = 2
LH5 = .FALSE.
每条设置5步、步长0.5 fs、300 K恒温条件。下表能量是VASP读取的势能,总量单位eV;不同扰动构型的体积不同。
| 构型 | 标签帧数 | 体积ų | 首帧总势能eV | 末帧总势能eV |
|---|---|---|---|---|
| 000000 | 5 | 40.025752 | -10.65661692 | -10.65515209 |
| 000001 | 5 | 40.479640 | -10.66202253 | -10.66047497 |
| 000002 | 5 | 40.310031 | -10.65950200 | -10.65824812 |

横轴以首个保存帧为零,帧间隔0.5 fs。图中的力是MD瞬时力,不要求每一帧小于结构优化的0.02 eV/Å。5步短轨迹用于演示数据链,不能当作收敛热力学、扩散或长期稳定性结果。
6 读取最终DeepMD标签#
source ./env.sh
python - <<'PYCODE'
import dpdata
p = 'si.diamond.01x01x01/02.md/sys-0002/deepmd'
s = dpdata.LabeledSystem(p, fmt='deepmd/npy')
print('帧数/原子数:', len(s), s.get_natoms())
print(s['energies'].shape, s['forces'].shape, s['virials'].shape)
PYCODE
本例15帧、2原子:能量(15,)、力(15,2,3)、维里(15,3,3)。单位分别为eV、eV/Å、eV,晶胞与坐标为Å。收集结果与三条原始轨迹逐帧一致;coll_ndata=100是最多收集数,本次实际只有15帧,不会凭空补到100帧。
需要训练势时,还要准备足够的结构覆盖、独立验证/测试划分与模型训练配置,继续看训练、探索与再训练。结构生成器与参数界面的用途不同,见DP-GEN参数界面。
参考数据与重新绘图#
bash results.sh
bash plot.sh
reference-data/保存真实参考数值,reference-structures/保存实际结构;plot.sh只作图,不提交VASP。授权POTCAR不随网站附件分发,重新计算时由脚本在自己的目录准备。
官方初始化说明与DP-GEN0.14.0发布说明可用于核对版本条件。
数值下载#
000000-MD.csv、000001-MD.csv、000002-MD.csv。这些数值来自上述实际计算或逐帧归档,不额外启动计算。