7. Perturb — 缺陷、掺杂、错位、层间
mat perturb 是统一的复合编辑入口,一条命令能链式叠多种小扰动。设计目标:让"做缺陷研究"像"写一个简短公式"一样自然。
全部扰动类型
| 类别 | 键 | 例子 | 含义 |
|---|---|---|---|
| 层间 | shift= | shift=top:0.1,0 | 把顶层沿 a 横移 0.1 Å |
rotate= | rotate=top:5 | 顶层旋转 5° | |
interlayer= | interlayer=7.0 | 设层间距 7.0 Å | |
| 缺陷 | vacancy= | vacancy=S:1 | 随机抠 1 个 S |
vacancy=index:7 | vacancy=index:7 | 精确抠 7 号 | |
substitute= | substitute=5:Se | 5 号位 S→Se | |
displace= | displace=12:0,0,0.2 | 12 号沿 z 移 0.2 Å | |
| 晶格 | strain= | strain=2% | 同 mat strain |
vacuum= | vacuum=20 | 同 mat vacuum | |
recenter= | recenter=z | 同 mat recenter | |
| 绝对位 | set= | set=0=z:7.5 | 0 号 z 设为 7.5 |
add= | add=O:2.5,1.4,9.0 | 加 O 原子在 (2.5,1.4,9.0) | |
remove= | remove=7,12 | 删 7,12 号 |
执行顺序(固定的,避免歧义)
不管你写的键顺序如何,CLI 内部按这个固定顺序施作:
1. lattice (strain → vacuum → recenter)
2. layer (shift → rotate → interlayer)
3. site (vacancy → substitute → displace)
4. absolute (set → add → remove)这样 "先施 2% 应变,再抠 S 空位" 和 "先抠 S 空位,再施 2% 应变" 写法不同也结果一致——拒绝隐藏的顺序依赖 bug。
单个操作
例 1:硫空位
bash
mat perturb vacancy=S:1 -q
含义:从所有 S 原子里随机抽 1 个,删掉。S:k = 随机 k 个;想精确指定用 vacancy=index:i,j,...。
例 2:S → Se 掺杂
bash
mat perturb substitute=1:Se -q
<index>:<element> —— 1 号原子换成 Se。
例 3:位移单个原子(声子 / 弛豫扰动)
bash
mat perturb displace=12:0,0,0.2 -q12 号原子沿 z 移动 0.2 Å。<index>:dx,dy,dz(Å,笛卡尔)。
例 4:双层错位
bash
mat perturb shift=top:0.1,0 -q # 顶层沿 a 移 0.1 Å
mat perturb rotate=top:5 -q # 顶层转 5°(moiré 起点)
mat perturb interlayer=7.0 -q # 设层间距复合:一条命令做多步
bash
mat perturb strain=2% vacancy=S:1 force=true -q
strain=2%后真空层会缩短到~6 Å,2D 安全检查触发;要么force=true跳过,要么先mat vacuum 20把真空层加大再施应变。
= 先 2% 应变,再抠 1 S。
bash
mat perturb shift=top:0.1,0 rotate=top:3 interlayer=6.8 vacancy=S:1 -q= 错位 + 微旋 + 调层间距 + 加空位,一条命令把"做缺陷异质结"全做完。
复杂选择语法(layer 操作)
shift= / rotate= 的 layer 选择器:
| 写法 | 含义 |
|---|---|
top | z 最大的那一层 |
bottom | z 最小的那一层 |
z>5.0 | 所有 z > 5.0 的原子 |
z<3.0,z>8.0 | 两段 |
0,3,7-12 | index 集合(支持范围) |
例:
bash
mat perturb shift=z>7.0:0.1,0 # z>7Å 的原子整体移 0.1 Å
mat perturb rotate=0,3,7-12:5 # 选定 index 集合旋转 5°资源接口
mat perturb 是顶层快捷,背后等价于:
| 顶层 | 资源 |
|---|---|
mat perturb shift=top:0.1,0 | mat /bilayers update shift=top:0.1,0 |
mat perturb vacancy=S:1 | mat /defects create vacancy=S:1 |
mat perturb set=0=z:7.5 | mat /sites update set=0=z:7.5 |
mat perturb add=O:2.5,1.4,9.0 | mat /sites create species=O pos=2.5,1.4,9.0 |
写 recipe 或 batch 脚本时用资源形式更清楚;交互式用顶层更短。
随机种子(复现)
随机扰动(如 vacancy=S:k)默认用确定性种子,同样输入 → 同样输出。要换种子:
bash
mat perturb vacancy=S:1 seed=42
mat perturb vacancy=S:1 seed=43 # 不同的 S 被选中不传 seed 时种子是 "结构 hash + op 字符串",自然可复现。
一个端到端缺陷研究
bash
mat init -q
mat build mos2 -q
mat motifs # ✓ MoS6_octahedral
mat /structures update supercell=3,3,1 -q # 3x3 supercell
mat perturb vacancy=S:1 -q # 1 个 S 空位
mat motifs # 看周围 motif 怎么变了
mat /vasp-inputs create profile=mp-relax-pbe每步自带 PNG,agent 看着图核对。
下一步: Resource layer → RESTful 路径覆盖长尾
复杂示例: Complex gallery 里 C2 / C3 / C9 / C10 演示了缺陷簇、复合缺陷、点掺杂和阶梯表面的具体命令。
