随机表面切片(Random Slab)
Group: Surface | Class: RandomSlabCard
功能说明
从体相结构按 Miller 指数、层数和真空厚度范围批量切出 slab,覆盖不同表面取向和几何参数组合。
操作示例
场景:模型在表面吸附能上系统性偏离 DFT
你在体相 Pt 上训练了一个 NEP 模型,体相弹性和声子都很好。然后跑 Pt(111) 表面上的 CO 吸附能——模型预测的吸附能比 DFT 弱 0.5 eV,误差远超可接受范围。
诊断思路: 训练集里全是体相 Pt 结构,模型从来没见过表面的低配位原子。Pt(111) 表面的台阶位、平台位的局域环境与体相完全不同——配位数从 12 降到 9 甚至更低。模型需要见过多种表面取向和厚度的 slab 才能泛化到表面化学。
输入: 一个体相 fcc Pt 单胞
目标: 切出 (111) 面,3~6 层厚,10 A 真空,覆盖多种 Miller 指数组合
参数设置:
H Range=[0, 1, 1],K Range=[0, 1, 1],L Range=[1, 3, 1]Layer Range=[3, 6, 1]Vacuum Range=[10, 10, 1]
输出: 多个 slab 结构,覆盖不同 hkl 组合、3~6 层厚度、10 A 真空,带 Slab(hkl=...,L=...,vac=...) 标签
怎么验证训练集质量改善:
重训后计算 Pt(111) 上的 CO 吸附能,应该接近 DFT 参考
检查 slab 上下表面没有重叠,真空层足够隔离周期镜像
如果表面能预测仍不准,扩大
l_range到[1, 5, 1]覆盖更多高指数面如果 slab 太薄表面效应过强,增大
layer_range的下限
什么时候加这张卡、什么时候不加
加:
模型在表面相关任务(吸附、表面能、表面反应)上预测差
需要覆盖多种表面取向和厚度
作为后续吸附/缺陷卡片的母结构
不加:
只做体相性质训练,不需要表面结构
已经手动切好了 slab,只需要做表面修饰
参数说明
H Range(h_range)
Sequence[int],默认 (0, 1, 1)。[最小值, 最大值, 步长],整数,定义切片的 Miller h 指数搜索空间。
hkl 为 (0,0,0) 的组合自动跳过。填参数之前先心算一下:输出总数 = (h 点数) x (k 点数) x (l 点数) x (层数) x (真空数)——别让五重循环悄悄把输出量炸了。
K Range(k_range)
Sequence[int],默认 (0, 1, 1)。[最小值, 最大值, 步长],和上面 h 一样用法。
h/k 设 [0,1,1] 只出低指数面,[0,2,1] 覆盖中等取向,[0,3,1] 进入探索区——组合数增长很快,注意控制范围。
L Range(l_range)
Sequence[int],默认 (1, 3, 1)。[最小值, 最大值, 步长]。注意 l 的默认起点不是 0,因为 (0,0,0) 没意义会直接跳过。
保守用 [1,1,1] 只切一个面;平衡用 [1,3,1] 覆盖 3 个不同 l 的面;探索用 [1,5,1] 但要准备好让输出数被五重循环放大。
Layer Range(layer_range)
Sequence[int],默认 (3, 6, 1)。[最小值, 最大值, 步长],整数,控制每个 slab 的厚度(层数)。
3~6 层是标准 slab 厚度——上下表面的原子环境已经近似体相了,表面能收敛不会因为厚度不够而飘。1~2 层的超薄 slab 量子尺寸效应明显,除非你有明确的物理原因,否则谨慎使用。8 层以上的厚 slab 对 DFT 预算不友好。
Vacuum Range(vacuum_range)
Sequence[int],默认 (10, 10, 1)。[最小值, 最大值, 步长],单位 A。
10 A 对大多数场景是可靠的下限,足够隔断周期镜像之间的相互作用。如果你后续要在表面放吸附分子,拉高到 15-20 A 确保吸附物不碰到镜像 slab。低于 5 A 不建议用——镜像 slab 的电子密度会穿透真空层。
推荐预设
低指数面(111,3~6 层,10 A,少量输出)
{
"class": "RandomSlabCard",
"check_state": true,
"h_range": [0, 1, 1],
"k_range": [0, 1, 1],
"l_range": [1, 1, 1],
"layer_range": [3, 6, 1],
"vacuum_range": [10, 10, 1]
}
多取向覆盖(h/k 0-1, l 1-3,3~6 层,10-15 A)
{
"class": "RandomSlabCard",
"check_state": true,
"h_range": [0, 1, 1],
"k_range": [0, 1, 1],
"l_range": [1, 3, 1],
"layer_range": [3, 6, 1],
"vacuum_range": [10, 15, 5]
}
全取向探索(h/k 0-2, l 1-5,3~9 层,10-20 A)
{
"class": "RandomSlabCard",
"check_state": true,
"h_range": [0, 2, 1],
"k_range": [0, 2, 1],
"l_range": [1, 5, 1],
"layer_range": [3, 9, 3],
"vacuum_range": [10, 20, 5]
}
推荐组合
Random Slab→Insert Defect:先切表面,再加吸附原子Random Slab→Random Vacancy:先切表面,再删表面原子构造空位Super Cell→Random Slab:先扩胞到足够大面内尺寸,再切片
常见问题
输出为空。 通常因为 (0,0,0) 被跳过后没有有效 hkl 组合,或者体相的 Miller 指数组合和晶格不兼容。
输出数量爆炸。 h_range、k_range、l_range、layer_range、vacuum_range 五重循环。先估算:Nh x Nk x Nl x Nlayer x Nvacuum。如果数字太大,先收窄 l_range 和 layer_range。
Slab 上下表面重叠。 layer_range 下限太小时,slab 厚度可能小于 2 层原子间距。增大下限。
输出标签
Slab(hkl={h}{k}{l},L={层数},vac={真空})
可复现性
无随机性。同参数同输入 → 严格一致输出。