多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

VASP双替位掺杂超胞能带反折叠(unfold)完整实操指南

VASP双替位掺杂超胞能带反折叠(unfold)完整实操指南 做掺杂体系能带计算最让人头疼的不是建模也不是算自洽而是当你好不容易把超胞能带跑出来画出来一看——满屏都是密密麻麻的折叠带根本没法跟实验对比。尤其是替位掺杂一掺杂质原子体系对称性被打破原本原胞里的能带在超胞里被复制、交叉、折叠成一团乱麻双替位掺杂更夸张两个杂质原子放进去能带折叠得连峰数都对不上。这就是为什么需要unfoldunfold能带反折叠。这篇内容是我自己一直在用的VASP双替位掺杂超胞计算流程从结构建模、VASP参数设置到能带反折叠后处理一次性完整写出来。里面包含了每一步为什么这么做、参数怎么选、哪些坑不能踩。非常适合刚接触掺杂能带计算的研究生或者已经做过一次但unfold结果乱七八糟、想规范化流程的朋友。1. 先搞清楚为什么要unfold1.1 超胞能带为什么会“折叠”只要做过超胞计算一定会遇到这个现象原本原胞里一条平滑的能带在超胞能带图上变成了好几条带像是把一张图切碎了再拼回去。根源在于实空间和倒空间的对应关系。你扩大实空间超胞倒空间就相应缩小。原胞布里渊区的高对称点比如X点、M点在超胞的小布里渊区里会“跑到”内部某个位置原本落在原胞BZ边界的能带段就被周期性地折叠回超胞BZ内部不同的k点。对一条能带而言超胞计算会把这些折叠后的“影子带”全部显示出来看起来就是一堆额外能带。用生活里的例子类比你站在走廊里看房间里的东西透过不同的门缝只能看到局部碎片。unfold要做的事就是把所有门缝里的碎片重新拼回完整的画面。对替位掺杂体系超胞里除了折叠带还有杂质原子引入的局域化平带。这些杂质带和折叠带混在一起如果不做unfold你根本没办法分辨哪条带来自原胞的本征能带、哪条带是杂质态、哪条带只是折叠伪影。1.2 替位掺杂超胞unfold的核心逻辑unfold的数学本质是将超胞的Bloch态按原胞的Bloch态展开计算每个超胞能带在特定原胞k点上的投影权重。权重高说明这条超胞能带在物理上对应原胞的某个本征态权重低说明它主要是由超胞折叠、杂质散射等因素产生的伪带。实际做的时候不需要手算这个投影系数。VASP会输出PROCAR文件里面包含了每个能带在每个k点、每个原子轨道上的投影信息。VASPKIT和Foldsym这类工具读取PROCAR之后会自动完成超胞k点到原胞k点的映射输出每个数据点的权重。unfold之后的能带图一般画成“气泡图”横轴是原胞高对称路径纵轴是能量每个点的大小或者颜色深浅对应该点的投影权重。权重高的点连成线就是你熟悉的原胞能带形状权重低的散点则是杂质带和折叠伪影。1.3 双替位掺杂比单掺杂多出的坑同样是替位掺杂双替位掺杂并不是简单地把单掺杂流程跑两遍有几个额外的问题必须考虑。第一个坑是杂质原子间距。两个替位杂质如果距离太近它们的局域态会相互杂化形成成键态和反键态的组合unfold图上会出现看似“劈裂”的平带。这在物理上确实是真的但很容易被误读为两个独立的杂质带。因此除非你研究的就是相邻杂质对的相互作用否则建超胞时尽量让两个杂质位点隔远一点。第二个坑是浓度问题。双掺杂的杂质浓度天然比单掺杂高一倍比如2×2×2超胞里放两个杂质浓度对应原胞体系的1/8除以某个比例很多时候已经超过实验掺杂浓度了。浓度越高杂质带越宽跟实验ARPES对比起来的难度就越大。第三个坑是磁性。两个过渡金属杂质往往都有磁矩初始磁矩设置不同可能收敛到铁磁耦合或者反铁磁耦合的亚稳态。做unfold之前最好先把两种磁序都跑一遍比较总能量确定基态否则后边所有能带结果都是建在不靠谱的磁性态上的。第四个坑是构型多样性。单掺杂只有一种位点选择问题双掺杂会有多个不等价排列方式比如一个杂质靠近另一个、一个在近邻位一个在远位。正确做法是先做构型筛选算出不同构型的能量取能量最低的构型跑unfold。这也是效率上最大的开销所以我建议后面专门安排一个目录来管理构型。2. 建模阶段结构准备与位点选择2.1 原胞结构优化与扩胞策略开始建超胞之前一定要先把原胞结构优化到位。别指望直接拿实验晶格常数去扩胞因为掺杂体系的计算需要自己体系的平衡晶格常数即使实验值更接近真实环境直接扩胞做掺杂也会给后续计算带来系统误差。我用的是两步走先做原胞结构优化ENCUT按POTCAR里最大ENMAX的1.3倍设置K点网格逐渐加密直到能量差小于1 meV/atom力收敛标准设为EDIFFG-0.02优化完成后取CONTCAR作为后续所有操作的基础结构。扩胞方向要根据目标掺杂浓度来决定。最常见的做法是2×2×2、3×3×3这种各向同性扩展但也可以根据晶体对称性只沿一个方向扩。比如二维材料就适合在面内扩胞而层间不扩这样能模拟单层内的掺杂行为。扩胞工具方面我比较推荐ASE直接用现成的Python脚本就能完成还能顺便检查原子数。VESTA也能做但手动操作容易出错尤其是在后续要标记哪个原子被替换的时候。需要留意一个细节ASE扩胞后导出的POSCAR可能会调整原子顺序也可能改变元素块顺序。所以每次扩完胞先数一遍原子数再检查元素顺序不然下一步替换位点容易弄错。2.2 双替位掺杂位点的选择与浓度估算双替位掺杂选位点本质上是研究目标决定的事情。但有几个通用原则可以先讲。两个杂质位点优先选在超胞中尽可能远的位置这样可以减少两个杂质之间的直接杂化也降低周期镜像之间的相互作用。以2×2×2立方超胞为例一个杂质放在角位另一个放在体心位基本就是最远距离的配置。确定位点之前先看超胞原胞的对称性。如果体系对称性比较高可以通过Wyckoff位置判断哪些原子是等价位点、哪些是不等价位点。但掺杂之后对称性降低得很厉害这一判断在后续计算中不再可靠。浓度计算很简单双替位掺杂浓度等于2除以替换后超胞的总原子数。比如2×2×2超胞原本有16个原子替换2个之后总原子数还是16掺杂浓度就是12.5%。要跟实验掺杂量对比的话按摩尔分数算也一样。一个常见错误是直接替换超胞里两个任意同类原子不对POTCAR做相应调整结果VASP报错或者结果明显不对。正确姿势是用ASE或者pymatgen做替换让程序自动处理原子坐标和元素表然后再导出POSCAR人工核准一遍。2.3 初始磁矩与对称性设置如果是带磁性的掺杂体系比如Co替换Mg位、Mn替换Zn位这一类MAGMOM必须按原子顺序一行一行写不能只写一个总数字。VASP要求MAGMOM的元素数量跟POSCAR里的原子总数一致。双掺杂体系里两个磁性杂质的初始磁矩排列方向直接影响自洽收敛到哪个态。我通常的做法是跑两个独立的初始设置一个两个磁矩都向上模拟FM一个一上一下模拟AFM看两个计算的总能量哪个更低。这一比较做完再进入后续能带计算能省下很多返工时间。对称性设置上掺杂超胞的对称性几乎肯定比原胞要低。更麻烦的是VASP自动对称性检测有时候会忽略掺杂造成的对称性破缺把体系误判为高对称导致能带变少、权重出错。我不太愿意在这种细节上赌运气建议直接设ISYM0关掉对称性。代价是计算量变大但换来的是结果稳定可信。还有一个小窍门如果体系是大超胞LREAL直接用Auto。对几十个原子的超胞Automatic的实空间投影精度足够而且速度比精确的倒空间投影快得多。等算完能带再看一遍投影值发现有问题再回去调整LREAL。2.4 目录组织与文件清单掺杂计算最大的敌人是文件混乱。一个双替位掺杂体系可能要跑构型筛选、磁性计算、自洽、能带、unfold后处理五个阶段如果全堆在一个目录里迟早会出乌龙。我的惯例是每个任务一个独立目录目录命名带上构型标签和磁性态标签比如config01_FM_static、config01_FM_bands。每个目录下面都必须有完整的独立输入文件不依赖于上级目录里的软链接。目录里至少要包含以下几类文件原胞的POSCAR或者CIF用于unfold时参考超胞的POSCAR构建好的掺杂结构与POSCAR元素顺序完全一致的POTCARINCAR每一步任务对应的版本KPOINTS网格或路径提交脚本和任务日志每个文件生成之后用一条命令检查POSCAR和POTCAR的元素数量对应关系。这个检查花不了几秒钟但是能避免后面所有步骤白跑。3. VASP计算参数与自洽/非自洽流程3.1 INCAR参数的关键逻辑unfold计算对INCAR有特殊要求不能直接套用普通能带计算的参数。下面是我常用的INCAR模板以双替位掺杂超胞为例SYSTEM double-doped supercell unfold ENCUT 520 PREC Accurate EDIFF 1E-6 EDIFFG -0.02 ISMEAR 0 SIGMA 0.05 LORBIT 11 NBANDS 400 ISYM 0 LREAL Auto ALGO Normal NELM 120 NCORE 4逐项解释几个关键参数。ENCUT统一取POTCAR里所有元素ENMAX最大值的1.3倍这里520 eV只是示例。对某些元素比如3d过渡金属的PAW赝势ENMAX可能到400 eV以上取1.3倍之后就很高但别舍不得这个计算量收敛性是第一位的。ISMEAR选0也就是Gaussian smearing。半导体和绝缘体体系用它最合适如果是金属ISMEAR0也能用但要注意SIGMA不能太大否则占据态展宽会遮盖带隙结构。SIGMA取0.05 eV是一个平衡值既能让自洽收敛稳定又不会让能带模糊太多。LORBIT11是unfold能不能成功的核心参数之一。这个参数控制VASP在PROCAR里输出每个能带的投影分量unfold工具要读的就是这个分量。忘了写LORBIT的话PROCAR里没有投影数据后面所有操作都做不了。NBANDS一定要给足够多。unfold需要占据态还要留下比较宽的空带范围。如果NBANDS太少PROCAR里没有高能段的能带信息unfold图的高能区域就会出现权重空缺。判断方法是看OUTCAR里的NELECT算一下占据态数量再在这个基础上加20%左右作为空带余量。我给的400只是示例具体数值按体系大小调整。ISYM0上面已经讲过原因不再重复。3.2 KPOINTS网格、路径与反折叠的关系unfold流程里会有两种完全不同的KPOINTS必须分清用途。自洽步骤用的是均匀网格。超胞的尺寸变大之后倒空间变小K点网格不需要很密就能达到收敛一般2×2×2或3×3×3就够具体要跑一下收敛测试。这个均匀网格不参与unfold只负责生成准确的电荷密度和波函数。非自洽步骤用的是高对称路径KPOINTS但这个路径不是直接把原胞的高对称路径抄过来用。因为超胞的BZ和原胞的BZ不是一回事原胞路径上的k点在超胞BZ里对应的位置需要重新映射。这个映射工作由VASPKIT或者Foldsym的预处理功能完成会生成一个专门给超胞用的KPOINTS路径文件。一个非常容易踩的坑直接把原胞的高对称K路径KPOINTS文件拿到超胞计算里跑画图时横坐标对不上原胞高对称点unfold就全废了。所以路径KPOINTS一定要用工具生成不要手工从原胞那套拷贝。路径上每个高对称段取点数量建议在40到60个。取少了曲线不平滑取多了计算变慢因为能带数量多。40到60在大多数体系里都能画出足够光滑的unfold带。3.3 POTCAR与POSCAR的组装细节VASP对POTCAR的要求是元素顺序和POSCAR完全一致这个顺序包括元素块排列而不只是元素种类对。很多人在这里翻车ASE替换原子后导出的POSCAR把元素顺序重新排了但POTCAR还是旧的顺序VASP启动就报错。我的做法是每建好一个新超胞POSCAR先启动一条命令人工核对元素数量然后按照POSCAR里的元素顺序用cat命令重新组装POTCAR。组装完再用grep确认POTCAR里每行元素对应的赝势文件名确保没有混进旧版本。另外建议全体系使用同一套赝势交换关联泛函比如都用PBE不要混用PAW_PBE和PAW_LDA。混用会造成不同原子间描述不一致带入难以估计的系统误差。POSCAR中的坐标精度也需要注意。VESTA导出时默认的坐标精度在6位小数左右大多数够用但为了保险我用ASE做替换和扩胞导出的坐标通常到8位以上。高精度坐标对后续对称性分析和结构弛豫都有好处。3.4 两步式计算自洽电荷密度与非自洽能带unfold计算采用最经典的两步法先自洽后非自洽。第一步自洽KPOINTS是均匀网格INCAR里不需要设ICHARG默认0代表从初始电荷密度开始算。这一步骤的任务是得到收敛的电荷密度CHGCAR和波函数WAVECAR体系的总能量和力作为检查标准。力收敛之后才能进入下一步否则结果不可信。第二步非自洽KPOINTS换成工具生成的高对称路径INCAR里设ICHARG11意思是读取已有的CHGCAR只做单点能带计算不重新自洽。这步计算结束之后VASP会输出PROCAR、EIGENVAL等文件unfold工具需要的PROCAR就在这里。需要注意ICHARG11对输入文件的一致性要求很严格。如果你在非自洽这一步改了MAGMOM、ISMEAR、SIGMA这些跟电子结构相关的参数VASP会报错提示CHGCAR不一致。所以第二步的INCAR要尽量和第一步保持一致只改KPOINTS和ICHARG。偶尔会遇到自洽计算本身不收敛的情况可以把NELM调大或者减小电子步的混合步伐比如设置AMIX0.1、BMIX0.0001。但如果是电荷密度振荡那种经典问题优先检查是不是SIGMA太小了。4. 能带反折叠unfold实操4.1 unfold工具选择VASPKIT与Foldsymunfold工具有好几个老牌的有BandUP后来VASPKIT也加入了unfold功能用起来方便很多。另外一个选择是Foldsym协同对称性分析做得比较细。我的推荐排序是首选VASPKIT因为它能直接读取PROCAR交互式菜单操作对新手友好如果你喜欢命令行和可脚本化流程可以试试FoldsymBandUP虽然经典但输入文件准备麻烦中间步骤也多不太适合作为日常工具。VASPKIT不同版本的菜单编号会变所以这里不写具体菜单序号只说思路找到“Unfold Band Structure”或类似功能按提示输入原胞和超胞的POSCAR以及原胞高对称路径。它会生成用于第二步非自洽计算的KPOINTS路径文件随后在后处理时读取PROCAR并输出权重数据。4.2 反折叠计算的具体操作流程整个unfold实操流程可以拆成四个环节。准备原胞文件。把优化好的原胞POSCAR单独保存成PRIMCELL.vasp文件。这个文件代表你希望把超胞能带展开回的那个原胞。注意原胞的选择要符合晶体学最小胞或你习惯的conventional cell约定因为高对称路径的标签是建立在这个原胞上的。通过VASPKIT或Foldsym生成KPOINTS路径文件保存到超胞计算目录。这个环节可以把“原胞k路径”映射成“超胞k路径”生成的结果是一个可被VASP直接读入的KPOINTS文件。运行第二步非自洽计算。INCAR保持自洽那套但把KPOINTS换成刚生成的路径文件加入ICHARG11从01_static目录里把CHGCAR拷贝过来或者直接软链接跑一遍。VASP跑完之后会生成新的PROCAR、EIGENVAL、KPOINTS等文件。运行后处理工具。再启动VASPKIT进入unfold后处理功能读取超胞的POSCAR、PROCAR和原胞文件输出一个包含“k点坐标、能量、权重”三列数据的文本文件。这个文件就是你画图的数据源。Foldsym的流程类似先用原胞和超胞的CIF或POSCAR做预处理生成超胞路径KPOINTS然后同样跑VASP非自洽最后用它的后处理脚本输出权重数据。虽然命令不同但逻辑完全一致。4.3 权重解读与画图拿到权重数据之后画图建议直接用Python的matplotlib画散点图点的大小或颜色映射权重。下面是一个基础脚本import numpy as np import matplotlib.pyplot as plt data np.loadtxt(unfold_band.dat) k data[:, 0] energy data[:, 1] weight data[:, 2] fig, ax plt.subplots(figsize(7, 5)) sc ax.scatter(k, energy, sweight * 30, cweight, cmapviridis, alpha0.7, edgecolorsnone) plt.colorbar(sc, labelweight) ax.set_xlabel(K path) ax.set_ylabel(r$E - E_F$ (eV)) ax.set_xlim(k.min(), k.max()) plt.tight_layout() plt.savefig(unfold_band.png, dpi300)横坐标的刻度需要注意k点数据在高对称点附近会有明显的间距变化。为了让横坐标线性分布一般按k点距离累计来归一化横轴然后把X点、Γ点、M点这些高对称点位置标注在图上。VASPKIT的输出文件自带这些位置的参考信息方便处理。看图的时候权重高的点如果能连成平滑的原胞能带形状说明这个超胞的体相电子结构被完整还原了。出现在带隙中、权重很低的平带大多是杂质态或折叠伪影。想进一步确认某条平带是不是杂质带最直接的办法是把这个频率范围内的PDOS投影到杂质原子轨道上两个数据叠在一起对比一目了然。权重阈值的选取不用太纠结一般大于0.1到0.3的点可以当成真实能带部分低于0.05的散点当作噪声忽略。具体阈值取决于你的体系复杂度可以多试几组阈值看看图的稳定性。5. 常见问题与排查技巧5.1 问题速查表unfold计算过程中的常见问题整理成一张速查表按图索骥排查。问题现象可能原因解决办法非自洽报错CHGCAR不存在ICHARG11但没拷贝CHGCAR从自洽目录复制CHGCAR到当前目录CHGCAR不一致报错第二步改了MAGMOM或ISMEAR等参数保持第二步与第一步电子参数一致只改KPOINTSunfold后高权重带缺失NBANDS太少空带不足查看OUTCAR里的NBANDS增加20%-30%unfold权重图横坐标乱直接把原胞路径KPOINTS用在超胞用VASPKIT/Foldsym生成超胞映射路径PROCAR为空或短LORBIT没设或设为0INCAR里设置LORBIT11自洽不收敛SIGMA太小或混合参数不合适调大SIGMA到0.1或降低AMIX/BMIX杂质带和折叠带分不清没有结合PDOS分析跑杂质原子PDOS与unfold图叠加对比能带大量平带且权重分散ISYM0未设置对称性误判关掉对称性设ISYM0重跑自洽5.2 两个独家踩坑经验第一个经验是关于文件残留的。我吃过一次亏在同一个目录里反复跑自洽和能带旧的CHGCAR和WAVECAR没删干净第二次非自洽计算读的是旧CHGCAR跑了几个小时才发现结果不对。从那以后我每个新任务都在开始前手动删一遍CHGCAR、WAVECAR和OUTCAR确保输入干净。别小看这一步它能帮你排除掉一半以上的“莫名其妙错误”。第二个经验是关于k点路径的。最初做unfold的时候我抱着侥幸心理把原胞的高对称路径直接填进超胞KPOINTS文件以为VASPKIT会在后处理时自动修正。结果画出来一堆乱七八糟的点权重高的带对不上任何路径。后来才弄明白路径映射必须在计算之前就完成KPOINTS文件必须是VASPKIT生成的“超胞版路径”。检查方法很简单看KPOINTS文件里每个k点的坐标如果所有k点都落在超胞BZ内部而不是原胞高对称点坐标那就说明路径生成对了。6. 最后说一下我对这套流程的个人体会做了这么多双替位掺杂体系的能带计算我最大的体会是unfold只是最后一步展示工具前面建模和自洽的质量决定了最后能带图的90%。把构型筛选和磁序判断这两步做扎实比纠结unfold参数重要得多。还有一个小建议第一次跑unfold不要直接拿双掺杂超胞开刀。先拿一个简单体系试水比如原胞或者单掺杂超胞跑通全流程确保画出来的能带能对应上已知结果。这个过程虽然多花几个小时但能帮你尽早发现工具使用和参数设置的错误比在复杂体系里排错快得多。等跑通了再上双掺杂你会发现自己对每一步都更有底气。
返回列表