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 的 a 和 b 矢量位于表面平面内
  • 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 切割器不适用于孤立分子。

CatGo 采用 AGPL-3.0-or-later。若 CatGo 对你的工作有所帮助,请注明 “This work used CatGo (https://app.catgo-ucsd.org).”并引用 CITATION.cff 中的首选文献;该请求不构成 AGPL 许可的附加条件。