DP-GEN专题

DP-GEN表面结构初始化实操

用12原子Cu(111)薄板实际完成原子优化、真空伸长和扰动,说明init_surf只有两个原生阶段。

更新于 2026-11-11约 6 分钟阅读按任务与环境选择适用配置
阅读本篇目录

dpgen init_surf用于准备表面结构。与体相初始化不同,当前0.14.0的原生命令只有两个阶段:优化,以及缩放/真空伸长/扰动;不会自动执行表面AIMD和扰动结构的第一性原理标注。本篇用12原子、3层Cu(111)薄板完成实际操作。

1 下载与参考结构#

下载原生初始化实例包,保存为dpgen-init.zip。

python3 -m zipfile -e dpgen-init.zip .
cd dpgen-init-surface
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模块选择。

实际优化后的Cu111薄板与周期晶胞

2 明确表面、层数与真空#

cat param-template.json
cat reference-structures/initial.POSCAR
{
  "stages": [
    1,
    2
  ],
  "cell_type": "fcc",
  "latt": 3.6,
  "super_cell": [
    1,
    1,
    1
  ],
  "elements": [
    "Cu"
  ],
  "potcars": [
    "private-pp/Cu.POTCAR"
  ],
  "relax_incar": "inputs/INCAR.relax",
  "scale": [
    1.0
  ],
  "skip_relax": false,
  "millers": [
    [
      1,
      1,
      1
    ]
  ],
  "layer_numb": 3,
  "vacuum_min": 10.0,
  "vacuum_max": 0.2,
  "vacuum_resol": [
    0.1
  ],
  "pert_numb": 1,
  "pert_box": 0.005,
  "pert_atom": 0.02,
  "type_map": [
    "Cu"
  ]
}

millers=[[1,1,1]]选择(111)表面,layer_numb=3为本次生成器的3层,实际得到12个Cu原子。FCC这里的latt=3.6 Å是常规晶格常数,含义与diamond生成器不同,不能照搬Si例子的2.715。

vacuum_min=10 Å在初始薄板两侧各留约10 Å,因此周期重复间的总真空间隔约20 Å;优化后原子厚度改变,实际间隔略有变化。vacuum_max和vacuum_resol控制后续额外伸长,本例生成0.1 Å额外真空。

X 
 1.0000000000000000
     5.0911688245431419    0.0000000000000000    0.0000000000000000
     2.5455844122715714    4.4090815370097207    0.0000000000000000
     0.0000000000000000    0.0000000000000000   24.1569219381653042
Cu 
12 
Cartesian
  3.8183766184073562  2.2045407685048604 10.0000000000000000
  5.0911688245431419  1.4696938456699067 14.1569219381653060
  3.8183766184073562  0.7348469228349536 12.0784609690826521
  2.5455844122715701  2.9393876913398134 12.0784609690826521
  0.0000000000000000  0.0000000000000000 10.0000000000000000
  1.2727922061357857  2.2045407685048604 10.0000000000000000
  5.0911688245431419  2.9393876913398138 12.0784609690826521
  3.8183766184073562  3.6742346141747668 14.1569219381653042
  6.3639610306789276  3.6742346141747668 14.1569219381653042
  2.5455844122715705  1.4696938456699067 14.1569219381653042
  1.2727922061357848  0.7348469228349533 12.0784609690826521
  2.5455844122715705  0.0000000000000000 10.0000000000000000

3 原子位置优化输入#

SYSTEM = Cu111 DPGEN native surface initialization
ENCUT = 500
PREC = Accurate
EDIFF = 1E-6
EDIFFG = -0.02
ISMEAR = 0
SIGMA = 0.05
ALGO = Normal
NELM = 120
KSPACING = 0.7
KGAMMA = .TRUE.
LREAL = .FALSE.
LWAVE = .FALSE.
LCHARG = .FALSE.
LH5 = .FALSE.
ISYM = 0
IBRION = 2
ISIF = 2
NSW = 30

本例固定晶胞,用ISIF=2优化原子位置,电子收敛1E-6,最大原子力标准0.02 eV/Å;实际经过3个优化帧,末帧最大原子力约0.01102 eV/Å。晶胞不优化,真空尺寸也没有当作体相晶格去松弛。

k点由KSPACING=0.7自动生成,没有独立KPOINTS。薄板厚度、真空、k点与截断在实际研究中需另做收敛选择;这个3层小例不是已收敛的Cu表面能结果。

4 运行两个原生阶段#

bash workflow.sh

对应原生命令为:

dpgen init_surf param.json machine.json

另一窗口查看:

bash status.sh
squeue -u "$USER"

阶段1生成表面并通过Slurm执行VASP优化,主要结果在:

surf.cu.fcc.01x01x01/
  00.place_ele/surf-111/sys-0012/
    POSCAR
    CONTCAR
    OUTCAR

阶段2使用优化后的结构,按给定比例、真空额外伸长量和扰动参数生成新POSCAR。配套控制器按阶段记录完成情况;同一工作目录只保留一个主控,中断后的处理参见主控与恢复。

5 看清两套生成结构#

01.scale_pert/surf-111/sys-0012/scale-1.000/elong-0.100/
  000000/POSCAR
  000001/POSCAR

000000保留未随机扰动的结构,但已经增加0.1 Å真空;000001再叠加随机晶胞与原子扰动。两者都是12原子,不是两条已经做完MD的轨迹。

未扰动和随机扰动的真实Cu111结构,包含实际真空间隔

本例两套生成结构的总真空间隔分别约20.073与20.145 Å。真空伸长对体积的增加满足ΔV=面内面积×0.1 Å,不代表Cu材料本身发生同等体积膨胀。

6 取走结构,再选择后续任务#

bash export-structures.sh
ls selected-structures

先检查原子间距、表面形状与真空,再把这些POSCAR放入自己的DP-GEN探索配置或单独的第一性原理任务。当前init_surf不能通过添加阶段3、4来自动获得MD/标签;需要数据时按训练与探索流程设置后续计算。

表面结构用原子数、面内面积、厚度和真空间隔共同描述;不要仅凭晶胞c很大就说材料厚,也不要把本例静态优化数据当作扰动结构的力标签。

参考数据与重新绘图#

bash results.sh
bash plot.sh

reference-data/保存真实参考数值,reference-structures/保存实际结构;plot.sh只作图,不提交VASP。授权POTCAR不随网站附件分发,重新计算时由脚本在自己的目录准备。

官方初始化说明与DP-GEN0.14.0发布说明可用于核对版本条件。

数值下载#

Cu111-relaxation.csv。这些数值来自上述实际计算或逐帧归档,不额外启动计算。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗