11. VASP inputs & paper recipes — 上游连接 DFT
mat 不跑 DFT,但它把"结构 → DFT 输入"这一段做到极简。
出 VASP 输入
bash
mat /vasp-inputs create profile=mp-relax-pbe输出(在 current run dir 下):
runs/001-run/vasp-inputs/
├── INCAR
├── KPOINTS
├── POSCAR ← 当前结构
└── POTCAR.spec ← 元素 → POTCAR 路径映射(不打包 POTCAR 本体)内置 profile
| profile | 用途 |
|---|---|
mp-relax-pbe | Materials Project 风格 PBE 结构弛豫 |
mp-static-pbe | 单点能量 |
scan | SCAN meta-GGA |
hse06 | HSE06 杂化泛函(贵) |
2d-relax | 2D 材料定制(含 LDIPOL、DIPOL 设置) |
surface-relax | slab 弛豫(选部分原子约束) |
覆盖单个参数
bash
# overrides= 暂不支持,请直接编辑生成出来的 INCAR。
mat /vasp-inputs create profile=mp-relax-pbeoverrides= 是 KEY:VAL,KEY:VAL,... 形式,覆盖 profile 默认。
指定输出目录
bash
mat /vasp-inputs create profile=mp-relax-pbe out=/scratch/job001/列可用 profile
bash
mat /vasp-inputs create --help论文 recipe
为可复现,mat 支持把"建结构 + 扰动 + 出 DFT 输入"打包成一个 YAML,叫 recipe。
Recipe 结构
yaml
# my-paper.recipe.yaml
name: 2008-prl-pt111-o2
description: O2 dissociation on Pt(111), Nørskov 2008
steps:
- id: step01-substrate
op: build.slab
args:
metal: Pt
miller: [1, 1, 1]
layers: 4
vacuum: 15
- id: step02-find-sites
op: adsorb.sites
args:
structure: ${step01.out}
positions: [ontop, bridge, hollow]
- id: step03-add-OO
op: adsorb.add
args:
structure: ${step01.out}
molecule: O2
site: hollow
height: 1.8
- id: step04-vasp-input
op: vasp.input
args:
structure: ${step03.out}
profile: mp-relax-pbe
- id: step05-render
op: render.structure
args:
structure: ${step03.out}跑 recipe
bash
mat reproduce my-paper.recipe.yaml输出:
✓ run 2008-prl-pt111-o2 → pass
run_dir runs/NNN-2008-prl-pt111-o2
steps 5/5 pass
✓ step01-substrate build.slab
✓ step02-find-sites adsorb.sites
✓ step03-add-OO adsorb.add
✓ step04-vasp-input vasp.input
✓ step05-render render.structure每一步都自带 PNG + summary。
列已知 recipe
bash
mat /recipes list dir=material_runtime/examples/recipes/仓库自带 99 篇典型论文的 recipe,全部位于 material_runtime/examples/recipes/。
断点续跑
bash
mat reproduce my-paper.recipe.yaml --continue跳过已完成步骤,从失败点继续。
只跑某几步
bash
mat reproduce my-paper.recipe.yaml # --steps 暂未实现Provenance(可复现日志)
每个 run dir 顶层有:
runs/NNN-name/
├── recipe.yaml ← recipe 副本
├── provenance.json ← 每步的 args/inputs/outputs/timestamps/git-sha
├── step01-substrate/
│ ├── slab.vasp
│ ├── slab.png
│ └── slab.summary.md
├── step02-find-sites/
│ └── sites.json
├── ...
└── .mat-context.json任何人接手这个目录,跑 mat /runs/NNN-name get 就能看 provenance 摘要。
上接 DFT 计算
mat 出完输入后,下游交给:
bash
cd runs/001-run/vasp-inputs/
# 补 POTCAR 文件(用 pymatgen 或自己的脚本,根据 POTCAR.spec)
mpirun -np 32 vasp_std或者用 atomate2 / aiida-vasp / FireWorks 等工作流引擎接走。
CONTCAR → mat 回流
DFT 弛豫完后想检查结果:
bash
mat get vasp-inputs/CONTCAR # 看弛豫后晶格
mat motifs vasp-inputs/CONTCAR # 看 motif 有没有崩
mat /lattice get vasp-inputs/CONTCAR # 看真空层够不够或直接在 CONTCAR 上继续扰动:
bash
mat perturb vacancy=S:1 vasp-inputs/CONTCAR -qCONTCAR 自动变成新的 current structure。
一个端到端论文复现示例
仓库自带的 2008-prl-pt111-o2.recipe.yaml 可直接跑:
bash
mat reproduce material_runtime/examples/recipes/2008-prl-pt111-o2.recipe.yaml
ls runs/
# 进去看 step03-add-OO/*.png 可以直接看到 O2 在 hollow site 的吸附构型