在凝聚态物理的第一性原理计算中,从 Bloch 表象向局域 Wannier 函数(MLWF)的演变,往往伴随着繁琐的劳动。

你可能无数次经历过这样的过程:面对一个复杂的非等价占位体系,对照着 POSCAR 逐个查阅原子的笛卡尔坐标;在费米能级附近密集的能带杂化中,小心翼翼地猜测初始投影(Projections);更不用说在提交计算后,因内窗口能带数超限而频繁遭遇的致命报错:More states in the frozen window than target WFs。

对于致力于强关联体系、拓扑磁性或磁交换耦合的研究者而言,这种试错不仅消耗服务器资源,也在消磨物理研究本身的直觉。

为了终止这种低效的循环,开发了一款轻量化的 Python 自动化脚本——WINZZ。

图片

核心设计原理

WINZZ的底层逻辑是基于第一性原理计算输出的量子态分布,进行流形维数的动态匹配。

子空间自适应判别:

脚本通过解析 vasprun.xml,提取全能区内总态密度与积分态密度的连续分布。算法通过寻找态密度零点,自动将能带划分出被带隙或低态密度区隔开的独立能带块,并智能锁定费米能级所在的中心流形,给出推荐的初始解缠结大窗口(dis_win_min / dis_win_max)。

源文件一致性验证:

在加载核心数据前,脚本会自动交叉扫描本地的 POSCAR 与 INCAR。如果当前路径下的原子总数、元素拓扑、或自旋极化参数(ISPIN=2)与输入的 XML 文件是否匹配。

冻结窗口安全收敛:

这是本方案最核心的纠错机制。当研究者为了构建极简紧束缚模型(例如仅关注磁性原子的 d 轨道)而大幅精简投影基组时,费米能级下本征占据的 Bloch 态数往往会远大于目标 Wannier 函数数量(nwann)。

WINZZ 会在调用样条插值函数精确积分。一旦预测到越界风险,它会向费米能级收缩冻结窗口上限(dis_froz_max)。若压缩至极限后占据态依然超限,脚本将注销 dis_froz 标签,改由 Wannier90 在全窗口内完成自适应矩阵提取。

启动与验证

将脚本放置在工作目录下运行,程序会自动读取本地计算环境。

python WINZZ_auto_wannier.py

若在自洽计算中开启了 ISPIN=2 且体系具备非对称的剩余磁矩,脚本会自动执行分流,独立计算 Up 和 Down 通道各自的能带区间,并精准匹配 VASP 的自旋文件名体系,同时导出 wannier90.up.win 与 wannier90.dn.win 两个独立文件。

脚本支持在调用时指定两种完全不同的物理投影格式:

元素汇总模式(proj_format='element'):

输出形如 Mo : d 的极简格式,适合常规能带拟合。

绝对坐标模式(proj_format='coordinate'):

精细输出每个原子的绝对笛卡尔坐标(形如 c=x,y,z : l=2)。这对于处理低维层状过渡金属硫族化合物(TMDs)的层间插层、表面掺杂、或者具备多种不同空间对称性的同元素不等价位点体系,具有不可替代的精确区分能力

元素批量映射:直接输入 V:d; Nb:s,d; S:p,系统会自动将轨道分发至对应元素的所有空间坐标上。

序号范围指定:输入 1-2:d; 3-8:s,d; 9-20:p,支持破折号范围与逗号分隔。

K 点路径自动追加

路径信息默认首先尝试扫描当前目录下的 KPATH.in 文件。若本地文件缺失,终端会智能引导用户定位 DFT 能带计算的源文件夹,提取标准 KPOINTS,自动转换格式并追加写入 .win 文件的末尾。

局域化效果展示

以带有强成键杂化的过渡金属复杂插层体系为例,在终端交互中输入 1-2:d;(仅保留核心磁性位点的 d 轨道以适配 TB2J 交换耦合计算):

您的选择/输入: 1-2:d;

【单通道/多通道自适应计算中...】
【纠错警告】当前冻结窗口内包含的能带数 (94.5) 超过了您选择的 nwann (20)!
脚本正在尝试自动优化并收缩冻结上限 (dis_froz_max)...
【物理硬防护激活】由于费米能级以下的占据 Bloch 能带数 (88.1) 已经大于 nwann (20)。
无法仅靠压缩上限修复。脚本已自动帮您【关闭冻结窗口】(移除 dis_froz 标签)。

成功导出配置文件: wannier90.win (格式: coordinate),确定核心 nwann=20

在将此代码应用于你的生产环境前,请注意以下边界条件:

强依赖 pymatgen 的版本稳定性:脚a本的底层数据结构完全依托于 pymatgen 库。如果 VASP 生成了非标准的 XML 文本,或者由于软件版本过于陈旧导致特定关键字被弃用,初始化模块可能会报错。

非连续能带块的识别局限:算法依靠态密度零点来划分能带块。在一些极端非金属性的半金属或重度强杂化体系中,能带在费米能级附近交织得过于剧烈,算法推荐的 dis_win 窗口可能会偏宽。在物理上,此时仍需人工在交互界面中微调输入,进行局部纠偏。

文本语法的严格性:快捷批量输入解析器依靠特定的符号(如冒号 :、分号 ; 和破折号 -)切分字符串。请确保在交互终端输入时,使用标准英文半角标点,避免因中文全角字符

完整代码请参考公众号原文