跳转至

11-born-oppenheimer 问答笔记

源文件:11-born-oppenheimer.md


Q1:ATOMIC_POSITIONS crystal 下 0.00 和 0.25 的单位是什么

原文:

ATOMIC_POSITIONS crystal          ! 核位置 —— BO 参数
  Si  0.00  0.00  0.00
  Si  0.25  0.25  0.25

简答

没有长度单位——它们是晶格向量的线性组合系数(分数坐标 / fractional coordinates / crystal coordinates)。

详细解释

ATOMIC_POSITIONS crystalcrystal坐标系标识,意思是"用晶格向量做基底"。对每个原子写三个数 \((f_1, f_2, f_3)\),对应的笛卡尔位置是:

\[\vec{R} = f_1 \vec{a}_1 + f_2 \vec{a}_2 + f_3 \vec{a}_3\]

其中 \(\vec{a}_1, \vec{a}_2, \vec{a}_3\) 是晶胞的三个基向量(由 ibrav + celldmCELL_PARAMETERS 定义)。

拿 Si 的具体例子算一遍

ibrav=2, celldm(1)=10.20 bohr 的 FCC 晶格,三个原胞基向量(以 bohr 为单位):

\[\vec{a}_1 = \frac{a}{2}(-1, 0, 1), \quad \vec{a}_2 = \frac{a}{2}(0, 1, 1), \quad \vec{a}_3 = \frac{a}{2}(-1, 1, 0)\]

其中 \(a = 10.20\) bohr。

原子 crystal 坐标 笛卡尔位置(bohr) 笛卡尔位置(Å)
Si₁ (0, 0, 0) \((0, 0, 0)\) \((0, 0, 0)\)
Si₂ (0.25, 0.25, 0.25) \(0.25 (\vec{a}_1 + \vec{a}_2 + \vec{a}_3) = (a/4)(-1, 1, 1) \times 2 \div 2 = (a/4)\cdot\sqrt{3}\) 方向 \(\approx (-1.35, 1.35, 1.35)\)

具体:\(\vec{R}_{Si_2} = \frac{a}{8}(-1+0-1,\; 0+1+1,\; 1+1+0) = \frac{a}{8}(-2, 2, 2) = \frac{a}{4}(-1, 1, 1)\)

\(= (10.20/4)(-1, 1, 1)\) bohr \(= (-2.55, 2.55, 2.55)\) bohr \(\approx (-1.35, 1.35, 1.35)\) Å

这就是 diamond 结构的第二个原子相对第一个的偏移——沿 (-1,1,1) 方向、距离 \(a\sqrt{3}/4 \approx 4.42\) bohr ≈ 2.34 Å。

为什么 diamond 特别是 (0.25, 0.25, 0.25)

diamond 结构 = FCC 晶格 + 每个格点放 2 个原子,第二个偏移 (1/4, 1/4, 1/4)。这是 Si、Ge、C (diamond)、灰锡的共同特征。用 crystal 坐标写出来最简洁——它暴露了结构的拓扑,而不是具体尺寸。

为什么用 crystal 而不是 angstrom/bohr

  • 变胞弛豫(vc-relax)稳健:晶胞 \(\vec{a}_i\) 会变,但 Si₂ 相对 Si₁ 的拓扑位置保持 (1/4, 1/4, 1/4) 不变。改用笛卡尔时晶胞一变原子相对位置就错了
  • 数值干净:(0, 0, 0) 和 (0.25, 0.25, 0.25) 是精确分数,没舍入误差
  • 和 Materials Project 等数据库一致:材料数据库都用 crystal 坐标给原子位置

Q2:alat 和 celldm 是什么?crystal 和 angstrom 的具体单位

原文:

- `crystal`:晶格矢量的分数坐标(0~1)——最常用
- `angstrom`:直接写 Å
- `bohr`:原子单位
- `alat`:相对 `celldm(1)`

alat 是什么

alat = "a lattice constant" 的缩写,表示晶格常数 \(a\),具体数值 = celldm(1)

用途:作为 QE 里的"长度参考单位"。许多地方说"以 alat 为单位",意思就是乘以 celldm(1) 得到 bohr。

celldm 是什么

celldm = "cell dimensions" 的缩写,QE 用来定义晶胞形状的一组参数,共 6 个:

参数 含义 单位
celldm(1) 晶格常数 \(a\) bohr
celldm(2) \(b/a\) 比例 无量纲
celldm(3) \(c/a\) 比例 无量纲
celldm(4) \(\cos(\beta\gamma)\) 无量纲
celldm(5) \(\cos(\alpha\gamma)\) 无量纲
celldm(6) \(\cos(\alpha\beta)\) 无量纲

关键celldm(1) 永远是 bohr(不是 Å)。很多人初学用错。

不同 ibrav 需要不同的 celldm

ibrav 晶系 需要的 celldm
0 自定义 只 celldm(1)(作 alat 参考,可选)
1 简立方 celldm(1)
2 FCC celldm(1)
3 BCC celldm(1)
4 六方 celldm(1), celldm(3) = c/a
5 三角 celldm(1), celldm(4)
6 正四方 celldm(1), celldm(3)
8 正交 celldm(1), celldm(2), celldm(3)
14 三斜 全部 6 个

(完整列表见 QE 的 INPUT_PW.html 文档)

Si 用 ibrav=2 + celldm(1)=10.20 的含义:面心立方,晶格常数 10.20 bohr ≈ 5.40 Å(接近实验值 5.43 Å)。

四种坐标系单位详解

标识 坐标含义 单位/参考 使用场景
crystal 分数坐标 \((f_1, f_2, f_3)\),对应位置 \(\sum_i f_i \vec{a}_i\) 无量纲 变胞弛豫首选;数据库标准
angstrom 笛卡尔坐标 \((x, y, z)\) Å\(10^{-10}\) m) 和实验/文献匹配时用
bohr 笛卡尔坐标 \((x, y, z)\) bohr\(\approx 0.529\) Å) 原子单位;QE 内部计算的"原生"单位
alat 笛卡尔坐标 \((x, y, z)\) celldm(1) 为 1(= celldm(1) bohr) 简洁表达相对尺度;用于简立方/FCC 时常写 (0.5, 0.5, 0) 这种

单位换算

  • 1 bohr = 0.529177 Å(玻尔半径)
  • 1 Å = 1.88973 bohr
  • 1 Hartree = 27.2114 eV
  • 1 Ry = 13.6057 eV

CELL_PARAMETERS 的坐标系

类似地,CELL_PARAMETERS 块的单位也可选:

CELL_PARAMETERS angstrom     ! 三行 xyz 直接写 Å
  3.87  0.00  0.00
  0.00  3.87  0.00
  0.00  0.00  3.87

CELL_PARAMETERS bohr / CELL_PARAMETERS alat(相对 celldm(1))。

几个常见陷阱

症状 正解
celldm(1) 写成 Å 值 晶胞小一半,能量对不上 celldm 单位永远是 bohr
ibrav=0 时用 CELL_PARAMETERS 但没写单位 默认 alat,但 alat 由 celldm(1) 定义,用户忘给 celldm(1) → QE 警告 显式写 CELL_PARAMETERS angstrom/bohr
vc-relax 用 ATOMIC_POSITIONS angstrom 晶胞变化后原子没跟着缩放,物理错误 crystal
ibrav=4(六方)只给 celldm(1) QE 用默认 c/a=1 可能不对 补齐 celldm(3)=c/a
单位混写(crystal 坐标写成 0.5 但想表达 0.5 Å) 能量/力完全离谱 重读文档

快速自检法

你可以在 QE 输出的开头看到它解析后的晶胞:

crystal axes: (cart. coord. in units of alat)
               a(1) = (  -0.500000   0.000000   0.500000 )
               a(2) = (   0.000000   0.500000   0.500000 )
               a(3) = (  -0.500000   0.500000   0.000000 )

alat =  10.200000 a.u.

看这几个数能不能对上你预期的晶胞形状,能对上说明输入单位没错。

追问:既然这是 QE 的输入,是 LLM 生成的还是查表?

在 TritonDFT agent 框架下,主路径是 LLM 自己生成,可选路径是先查 Materials Project(MP)API 再生成。具体取决于是否启用 --need-query-info 标志。

主路径:LLM 直接生成(benchmark 默认)

给 LLM 的 prompt 只有高层信息:

For formula=Si structure=diamond atoms_per_primitive_cell=2 space_group=Fd-3m,
perform a variable-cell relaxation (vc-relax) calculation. ...

LLM 需要把它扩展成完整 QE 输入文件,所有细节都要 LLM "想出来"

输入字段 LLM 怎么决定
ibrav=2 看到 "diamond + Fd-3m + FCC" → 训练语料里知道 diamond 是 FCC → ibrav=2
celldm(1)=10.20 常识:Si 晶格常数 ≈ 5.43 Å ≈ 10.26 bohr → 填个接近的值做初猜
ATOMIC_POSITIONS crystal
Si 0.00 0.00 0.00
Si 0.25 0.25 0.25
晶体学知识:diamond 结构两个原子偏移 (1/4, 1/4, 1/4)
pseudo_dir Prompt 里提到 "Use PBE pseudopotentials" → 选 PBE_standard 目录
ATOMIC_SPECIES
Si 28.0855 si.upf
从赝势库文件命名规则里猜
ecutwfc=40 经验值(对 Si 够用,对 Ge 不够)
K_POINTS automatic
6 6 6 0 0 0
经验值
conv_thr=1.0e-8 Prompt 或 task 模板指定

LLM 的这些知识来自训练语料——它见过大量 QE tutorials、论文输入文件、GitHub 开源代码,记住了"Si diamond 的典型设置长什么样"。

可选路径:先查 MP API

如果跑 benchmark 时加 --need-query-info,agent 的 Planner 会先生成一段 Python 代码调用 Materials Project API:

from mp_api.client import MPRester
with MPRester(API_KEY) as mpr:
    docs = mpr.materials.search(
        formula="Si",
        spacegroup_symbol="Fd-3m",
        fields=["material_id", "structure"],
    )
    structure = docs[0].structure
    # structure.lattice.matrix 给出真实晶胞向量
    # structure.frac_coords 给出原子分数坐标

然后把 structure.lattice.matrixstructure.frac_coords 塞进 QE 输入文件。

这个路径得到的初始结构更准确(直接用 MP 里其他人算过的高精度 DFT 结果),但依赖 API key 和网络。

两种路径对比

维度 LLM 直接生成 先查 MP
速度 慢(多一次 API 调用)
依赖 只需 API 里 OPENAI_API_KEY 等 还要 MP_API_KEY + 网络
初始结构精度 可能有 1–5% 误差(LLM 靠记忆估) 与 MP 数据库一致,精度高
benchmark 意义 考查 LLM 的物理/化学推断能力(本质能力) 考查 LLM 的 API 调用能力

benchmark 默认关闭 --need-query-info,因为核心要考的就是 LLM 能否从化学式/结构原型推出合理的晶胞——这是"理解 DFT"的基础能力。查表相当于"作弊"。

既然 LLM 自己猜,不准怎么办?

这正是 vc-relax 的角色——LLM 给个大致合理的初猜(比如 celldm(1)=10.20 bohr),QE 的 BFGS 外层会把它优化到精确值(最终 10.3344 bohr)。只要初猜没太离谱(偏差 10% 以内),vc-relax 都能收敛到对的结构。

但如果 LLM 猜得太糟(比如把 Si 写成 celldm(1)=20 bohr),BFGS 可能陷入错误局部极小。这就是为什么 benchmark 评分里有"结构正确性"一项——看 LLM 能不能提供足够好的初始结构让 QE 收敛到真实的 Fd-3m 晶格。

再次回到我们之前 Ge 出错的例子

agent 对 Ge 提供的初始结构合理(celldm(1) ≈ 10.69 bohr),错的不是初始结构,而是 ecutwfc=40 Ry 太小——基组不完备导致能量面失真,BFGS 优化到错误极小(晶格压缩 17%)。这就是"LLM 推断参数"的核心考查点:一个数值参数不当,整个计算就废。

所以 benchmark 里 LLM 的任务是两层推断: 1. 结构推断(本题涉及):ibrav、celldm、ATOMIC_POSITIONS 2. 数值参数推断:ecutwfc、k-mesh、conv_thr 等

两项都做对才能拿高分。


本轮 2 个问题速览

# 主题 关键
Q1 ATOMIC_POSITIONS crystal 下 0.00/0.25 的单位 无单位——晶格向量的线性组合系数;diamond 特征偏移 (1/4,1/4,1/4)
Q2 alat / celldm / crystal / angstrom 各是什么 celldm(1) 永远 bohr;四种坐标系选用场景(vc-relax 用 crystal,实验对照用 angstrom,内部计算 bohr)