我在研究RuO2这个材料时对其进行了能带计算,但是我发现了一个问题,按照RuO2的样子,Ru应该是s...
Créé le : 23 février 2026
Répondu en utilisant GPT-5.2 Thinking par Chat01
Créé le : 23 février 2026
Répondu en utilisant GPT-5.2 Thinking par Chat01
我在研究RuO2这个材料时对其进行了能带计算,但是我发现了一个问题,按照RuO2的样子,Ru应该是sp3d2杂化,但Ru原子的DOS显示,Ru基本只有d轨道在费米面附近几个eV内不为0,基本没有s轨道和p轨道的DOS,这是为什么?对于RuO2体系来说,O在费米面附近只有p轨道存在有限的DOS,我想在此之后用wannier90去计算其Berry相位,我该对Ru只用d轨道投影还是用sp3d去投影,以及O只需要投影p轨道吗?
你看到的现象其实很常见:“sp³d²(或 d²sp³)杂化”是价键/配位化学里用来描述几何构型的一个语言,但在固体 DFT 的能量分辨图像(DOS/PDOS)里,“哪些轨道在费米能级附近有权重”主要由晶体场分裂 + 成键/反键能级位置 + 轨道能量本征差决定,并不要求 s、p 在 附近一定要有明显 DOS。
RuO(金红石结构)里 Ru 是近八面体配位(RuO)。在八面体晶体场下:
至于 Ru 的 s、p:
所以:“局域轨道杂化的几何描述” 和 **“费米附近哪些 Bloch 态具有哪些轨道成分”**不是同一件事。
原则只有一个:你要用 Wannier 拟合/插值哪一段能带,就投影能覆盖那段能带主要轨道成分的最小集合。
对 RuO 这种低能主要是 Ru-d 与 O-p 的体系,一般不需要把 Ru 的 s、p 也显式放进初始投影。
通常 不需要。只有在这些情况下你才考虑加:
先决定你要算的 Berry 量到底对应什么能窗:
看 band structure + orbital projection(fatband),确认目标能窗里:
用 wannier90 做两套对比(9 个 vs 11 个),选择:
比如你先试 11 个(更稳):
textnum_wann = 11 begin projections Ru: dxy; dxz; dyz; dx2-y2; dz2 O: px; py; pz O: px; py; pz end projections ! disentanglement window (示意,按你的能带实际改) dis_win_min = -8.0 dis_win_max = 4.0 dis_froz_min = -2.5 dis_froz_max = 2.0
如果你只想做费米附近并且 disentanglement 很干净,就把 Ru 改成只投 ,并把 num_wann=9。
如果你告诉我:你打算算的是哪一种 Berry 相位(极化?某条费米面回路?反常霍尔/自旋霍尔?),以及你关心的能量窗口大概是 上下多少 eV,我可以更“定量地”给你建议 num_wann、窗口怎么取、以及是否必须开 SOC。
我感到很奇怪,我目前做的结果反而是eg轨道在费米面处比较明显,t2g反而不太显著,但我查了一下很多文章明确指出了t2g轨道对于RuO2的重要性
你查到的“文献里强调 很重要”这点没错:对体相、接近理想金红石结构的 RuO,经典的能带结果就是 Ru-4d 分成“部分占据的 ”和“未占据的 ”,而且 落在 Ru- 流形附近。比如 FP-LAPW 的一篇 PRB 就直接写到:导带主要是 Ru-4d,分裂成“部分占据 ”和“未占据 ”,且 靠近 Ru- 的谷底。 (Harvest) 近期综述也同样总结“费米能级附近主要来自 Ru-”。 (Springer)
那你为什么会看到“”在 更明显?最常见就两类原因:
在 VASP/QE 这类程序里,PDOS/PROCAR 的 轨道分量通常是按全局晶轴的实球谐()给出来的。
但 RuO 的 RuO 八面体在金红石结构里并不是“完美 + 完全对齐晶轴”的那种情况(有四方畸变、局域配位方向也不一定与你的全局轴完全一致),于是:
怎么验证最直接: 用 Wannier 得到 Ru-5d 的 MLWF 后,把同一 Ru 位点的 onsite Hamiltonian(5×5)对角化,对角化后的本征轨道才是“正确局域晶场”下的 -like / -like(或在更低对称下的进一步分裂)。这一步能把“坐标系混合”问题一次性消掉。
如果你不是算“体相无应变的标准 RuO”——例如:
那么 轨道相对位置确实会被重排。一个很具体的例子:近期综述总结在应变调控下, 附近会出现更“动量选择”的 Ru-4d 与 O-2p 杂化,甚至提到应变会把某些窄峰推向 ,并讨论到 等轨道在应变下的角色。 (Springer)
所以如果你的模型里有应变/畸变,“”更显著也可能是物理上真实的,不是 bug。
在你现在“ 归属有点打架”的情况下,我反而建议你先别强行只投 ,用更鲁棒的做法:
也就是每个化学式 RuO:5(Ru-d) + 6(2×O-p) = 11 个 Wannier。
这样无论低能到底更像 还是混进了更多 “-like”,都能被 Hamiltonian 自己表达出来;之后你再用我上面说的 onsite 对角化来“重新命名”哪 3 个是低能 -like。
只有当你已经确认:
才值得把 Ru 从 5d 缩到 3()。否则很容易因为“你定义的 ”和“体系真正的低能子空间”不一致而翻车。
RuO 是金属/半金属体系时,“绝缘体极化那套 Berry phase(对全部占据带)”在概念上要非常小心;但如果你算的是:
那就完全 OK,只要你的 Wannier 插值在目标能窗/目标 k 区域足够准。
如果你愿意把两条信息贴一下(不用很长):
1)你现在用的结构是体相晶格常数还是应变/优化后的?
2)你关注的 Berry 相位是“围绕节点的回路”还是“曲率/AHC”?
我可以更具体地给你:推荐的能窗(frozen/dis_win)、是否必须开 SOC、以及怎么从 Wannier onsite 对角化里把 可靠地分出来。
为什么我注意到有些文章中认为RuO2中Ru的t2g轨道是dxz,dyz,dx2-y2?
因为**“ 是哪三个 轨道”这件事,严格来说取决于你用的“局域坐标系(local axes)”怎么选**。在 RuO(金红石)这种低对称 + 八面体还带畸变/旋转的体系里,不同文章为了方便(尤其是配合实验散射几何、或配合 RuO 八面体的主轴方向)会选不同坐标系,于是你就会看到有的写法把 “” 写成 。
在理想八面体、并且把 轴取在配体方向时:
很多 RuO/金红石相关论文会把**正交晶场(或八面体主轴)**选成相对“标准轴”**旋转 45°**的方向。这样一来,在新坐标系 下:
当 时,,于是得到非常关键的结论:
也就是说:转 45° 会把 “” 和 “”(在命名上)互换(差一个符号不影响物理)。
这不是我猜的——有些 RuO 文章/补充材料会把这句话直接写出来:他们把 与 “switch”,原因就是晶场主轴相对标准轴旋转了 45°。(arXiv)
也有文章非常直白地说:文中写的 其实就是把坐标系绕 轴旋转 45° 后的 。(arXiv)
所以你看到“”通常意味着:
作者的 在他们的局域坐标里,对应你习惯坐标里的 -like(或反过来),本质上还是同一组三个“介于配体方向之间”的轨道。
如果你愿意贴一下:你看到那篇文章里 “坐标系/晶场主轴” 是怎么定义的(通常在 Fig.1 或 Appendix),我可以帮你把它的 精确对应回你当前计算里 PROCAR/PDOS 的哪个分量。
我明白了,那这个变换关系是什么?我发现我这里Ru的z方向是沿着[110]方向
你这个情况本质上就是:你用来定义“局域 ”的坐标轴变了(你说的“Ru 的 沿 [110]”),于是“哪些具体写成 、”会发生线性组合/互换;但** 这个三维子空间本身没变**(任意正交线性组合仍然是 )。
下面我给你一个最常用、并且右手系的局域坐标选择,以及对应的显式变换关系(“到一个常数因子/归一化为止”,符号也不影响物理):
令全局晶轴
你给的局域轴取为
这是一个标准的右手系()。
用实 轨道对应的二次型:
把
代进去,就得到:
注意第三条非常关键:当 在 平面内时,局域的 会“长得像”全局的 。
因此,同一个 子空间完全可以写成全局基底的
(因为前两条只是 的旋转组合,张成的空间相同)。
这就解释了你看到的“有些文章写 ”——他们用的就是类似这种把局域 放到 [110] 的坐标约定,或者等价的轴置换/旋转。
同样代换可得(只给你结论,仍“到归一化为止”):
所以在你这种坐标下,“看起来像 ”的成分,可能会主要投影到全局的 上,而不是你直觉里的 。
即便都固定了 ,绕着 仍然可以任意再转一个角度 。这会在子空间内部进一步混合:
所以不同文章只要局域 的选取不同,就会写出不同“具体是哪三个”的 名字,但它们指的是同一个三维空间。
如果你接下来要把你计算里的 PDOS/PROCAR 和文献一一对上,关键是确认:你的程序输出的 分波是按全局晶轴,还是按你定义的局域轴。如果是全局轴,而你又想讨论“局域晶场意义的 ”,最稳的办法是:用 Wannier(Ru 全 5d + O 2p)后对 Ru 位点的 5×5 onsite Hamiltonian 对角化,得到真正的“局域晶场本征轨道”,那样就不会被坐标系命名绕晕。
pythonfrom PIL import Image, ImageEnhance img=Image.open('/mnt/data/image.png') img.size (1404, 1098)
pythonimport matplotlib.pyplot as plt, numpy as np plt.figure(figsize=(12,8)) plt.imshow(img) plt.axis('off') plt.show()
你这个图看起来费米能级附近是金属态、多条带交缠,用 wannier90 一定要走 disentanglement(解纠缠)。能量窗口怎么取,核心不是“看起来像不像”,而是满足两条硬条件 + 一套调参流程。
num_wann 定死:你的 2-Ru 反铁磁胞 = 2 个化学式单元对 RuO 最稳的低能模型一般是 Ru-4d + O-2p:
在你已经遇到 “t2g/eg 定义容易被坐标系搅乱 + 带交缠明显” 的情况下,我强烈建议先用 22(Ru 全 d + O 全 p),不要一上来就缩到 t2g-only(18 个),否则很容易因为“你定义的 t2g 子空间”与实际低能子空间不完全一致导致解纠缠不稳定、插值乱跳。
NBANDS=32 很可能太紧:先加 NBANDS 再谈窗口wannier 的解纠缠需要在外窗口里“可选择的 Bloch 态”足够多。
经验上(尤其金属):
NBANDS ≳ num_wann + 10~30num_wann=22 时,NBANDS=32 只是“勉强够”,很容易出现:某些 k 点外窗口里可用态数 ≈ 22,算法选择空间太小 → 解纠缠敏感、拟合差✅ 建议你先把 VASP 里 NBANDS 提到 50~70 再做 wannier(开 SOC 时甚至更需要)。
wannier90 的窗口有两层:
dis_win_min/max:外窗口(参与解纠缠的候选能带)dis_froz_min/max:冻结窗口(你“必须精确重现”的那部分带)硬条件 A: 对每个 k 点,外窗口里能带数必须满足
否则解纠缠无解。
硬条件 B: 对每个 k 点,冻结窗口里能带数必须满足
否则会报错(冻结的带比你 Wannier 数还多,装不下)。
所以窗口不是“看着顺眼”,而是:先满足 A/B,再追求插值精度。
从图上看,主要的 d/p 混合带大概覆盖到 -8 eV 左右,上方到 +4~+5 eV 还有明显的导带分支。一个很常用、也比较稳的起步是:
dis_win_min = -8.5,dis_win_max = +5.5dis_froz_min = -2.0,dis_froz_max = +2.0这样做的好处是:冻结窗口窄,不容易违反条件 B;外窗口宽,给解纠缠足够自由度(前提是 NBANDS 够)。
等你确认外窗口态数足够后,再尝试把冻结窗口拓宽到例如:
dis_froz_min = -6.5,dis_froz_max = +1.5但一旦出现 wout 里提示某些 k 点 N_froz > num_wann,就把 dis_froz_max 往下收(通常先收上边界更有效)。
wannier90.wout 这几行就够了跑完后打开 wannier90.wout,你会看到每个 k 点(或统计)的类似信息(不同版本表述略有差异):
dis_froz_max 往下收)然后再看 bands_plot(wannier 插值 vs DFT):
projections 写清楚(每个 Ru 都投 d,每个 O 都投 p),让初始子空间接近目标dis_froz 先缩到只覆盖 eV,先把你要的 Berry 物理量做稳,再逐步加宽如果你把 你准备用的投影(num_wann 是 22 还是 18)、以及你要算的 Berry 量是 “费米面附近 Berry 曲率/AHC” 还是 “某条回路 Berry 相位” 说一下,我可以直接给你一份更贴你目的的 *.win 模板(窗口、投影、是否 spinors/SOC、以及更合适的 froz/win 范围)。
我尝试了一下,它显示:
param_get_projections: too few projection functions defined
你现在这个报错其实跟“解纠缠难不难”还没关系——它是 .win 里定义的投影函数个数 < num_wann,wannier90 在读入阶段就直接停了:
param_get_projections: too few projection functions defined
在 wannier90 里:
num_wann = 你要生成的 Wannier 函数数目begin projections ... end projections 里你写的每一行,会展开成若干个“投影函数”
s → 1 个p → 3 个d → 5 个如果你写的投影总数 少于 num_wann,就会出现这个报错。
num_wann = 22你这个胞里 2 个 Ru = 2 个 RuO₂ 化学式单元,一般最低能想覆盖 Ru-4d 与 O-2p:
所以最推荐的“先跑通版本”是:
textnum_wann = 22 begin projections Ru:d O:p end projections
注意:
Ru:d会自动对胞里所有 Ru 原子各放 5 个 d 投影;O:p同理会对所有 O 放 3 个 p 投影。
只要你的胞真的是 2 Ru + 4 O,这两行加起来就是 22 个投影,报错就会消失。
如果你现在仍报错,最常见原因是:
Ru:d,没写 O:p(那就只有 10 个投影)num_wann 设成了比 22 更大,但投影没跟上你之前提到 VASP 默认 NBANDS=32。对金属体系做 disentanglement 时,外窗口里每个 k 点必须有至少 num_wann 条带可选,否则解纠缠会非常敏感甚至失败。
你若用 num_wann=22,NBANDS=32 只是“勉强够”,强烈建议:
NBANDS 提到 60 左右(至少 num_wann + 20)这样外窗口才能开得比较宽,不会在某些 k 点“候选带不够”。
先用一个“宽外窗 + 窄冻结窗”的稳健起步(能量单位 eV,零点通常就是 EF=0):
textdis_win_min = -8.5 dis_win_max = 5.5 dis_froz_min = -2.0 dis_froz_max = 2.0
这套思路是:先把 EF 附近 ±2 eV 拟合得很准(你要 Berry 相关量一般也主要靠这里),外窗给足自由度去“挑”出正确子空间。
跑起来后看 wannier90.wout,重点就两件事:
有无提示某些 k 点 外窗口内 band 数 < num_wann
→ 继续加 NBANDS 或者收窄 dis_win_max
有无提示某些 k 点 冻结窗口内 band 数 > num_wann
→ 收窄冻结窗(通常先把 dis_froz_max 往下收)
如果你把你现在的 *.win 里这几段(num_wann/num_bands/projections/windows)贴出来(不用全文件),我可以直接帮你把 投影数是否匹配、以及 window/NBANDS 哪里会导致解纠缠失败一眼改到能跑通的版本。