Skip to content

构建表面 Slab

本教程介绍如何使用 Miller 指数 slab 切割器,从体相晶体生成表面 slab。

前置条件

先加载一个体相晶体结构,例如 FCC Cu、BCC Fe 或钙钛矿的 CIF 文件。Slab 切割器适用于具有明确定义晶格的周期性结构。

打开 Slab 切割器

点击工具栏中的 Slab 按钮(剪刀图标),打开 Miller Slab Cutter Pane(Miller 指数 slab 切割面板)。该面板提供以下控制项:

  • Miller 指数(h, k, l)
  • Slab 厚度
  • 真空层厚度

步骤 1:设置 Miller 指数

输入目标 Miller 指数,以定义表面取向:

表面Miller 指数说明
(001)h=0, k=0, l=1立方晶胞的顶面
(110)h=1, k=1, l=0对角面
(111)h=1, k=1, l=1体对角面;对 FCC 来说是密排面

Miller 指数会自动归一化,也就是除以最大公约数。至少一个指数必须非零。

步骤 2:调整厚度和真空层

  • Thickness - Slab 的最小厚度,单位为 Angstrom。它控制包含多少原子层。
  • Vacuum - 真空层厚度,单位为 Angstrom。它用于在表面计算中隔开 slab 的周期镜像。

常用取值:

  • Slab 厚度:8-15 Angstrom,通常对应 3-6 层,具体取决于材料
  • 真空层:10-20 Angstrom,通常足以避免周期镜像之间相互作用

步骤 3:预览切割

当你调整 Miller 指数时,切割平面可视化器会在结构上叠加半透明平面,显示表面将如何切割晶体。切割平面上下的原子会淡入/淡出,用于预览最终会包含哪些原子。

预览路径在 JavaScript 中运行,因此可以提供快速、实时的反馈。

步骤 4:应用 Slab

点击 Apply 生成最终 slab。该步骤会使用 Rust/WASM 后端完成精确的 slab 生成:

  1. 旋转体相晶格,使表面法向与 z 轴对齐
  2. 复制原子以填充目标厚度
  3. 沿 c 方向添加真空层
  4. 强制晶格为右手系: (a x b) . z > 0
  5. 相机会自动重置并与新晶格对齐

约定

  • Slab 的 ab 矢量位于表面平面内
  • c 矢量沿表面法向,也就是垂直于 slab
  • 始终强制右手系;如果旋转矩阵产生左手晶格,会自动反转 b 矢量并调整分数坐标

切割后的常见下一步

添加真空

如果切割后还需要调整真空层,可以使用工具栏中的 Vacuum Box 弹窗,在任意方向添加真空。

构建超胞

使用 Supercell 选择器在面内扩展 slab,例如使用 2x2x1 获得更大的表面积。

寻找吸附位点

打开 Adsorption Sites 面板,在表面上寻找高对称吸附位点:

  • Atop - 位于表面原子正上方
  • Bridge - 位于两个表面原子之间
  • Hollow - 位于 3 个或更多表面原子的中心上方

位点会按与表面的共价半径距离放置,可作为吸附分子的初始位置。

冻结底层原子

选择底部几层原子,并将它们标记为 frozen,用于后续优化。这模拟了表面 DFT 计算中常见的体相约束。

两条代码路径

Slab 切割器有两套实现:

路径用途速度精度
JavaScript(预览)调整参数时的实时可视化近似
Rust/WASM(应用)最终 slab 生成较慢精确

预览路径在 TypeScript 中运行 generate_slab_pipeline(),用于即时反馈。应用路径调用 wasm_generate_slab() 得到最终结果。

故障排查

Slab 看起来被翻转或镜像了

Slab 切割器会强制右手系。如果初始旋转产生左手晶格,矢量会自动修正。如果结构仍然看起来不对,可以按 R 重置相机。

层数太少或太多

厚度参数是最小值;实际 slab 可能略厚,以包含完整原子层。调整 thickness 值即可增加或减少层数。

看不到切割平面

请确认结构具有定义好的晶格,也就是有周期性边界条件。Slab 切割器不适用于孤立分子。

基于 AGPL-3.0-or-later 许可证发布。