BoltzTraP2 三维费米面
运行原生VTK三维入口,查看Si在带隙、价带与导带中的等能面,附真实网格、高清图和短命令。
阅读本篇目录
本页补上原生 fermisurface 三维入口。使用前面Si教程的真实DFT与m3/m8插值文件,不需要再启动一次VASP。需要区分:二维入口是平面上的能量区域图,三维入口生成空间中的三角网格等能面。
下载三维费米面实操包。包内有8个真实原生CLI条件、Si插值输入、VTP网格、2400×1600 PNG和独立提取脚本;VTK依赖单独安装到解压目录,不改共享环境,也不把二进制依赖塞进资料包。
1. 准备环境#
从新解压目录执行:
module purge
module load boltztrap2/26.3.1
bash setup-vtk.sh
脚本把固定版本VTK9.5.2安装到当前目录 .vtk,并按下载文件SHA校验;首次下载约112MB。原有BoltzTraP2、NumPy2.3.5和其他客户的环境不变。
本例使用CPU上的原生VTK与EGL无显示渲染。VTK能导入不等于所有服务器都自带图形运行库;已有EGL环境可以直接截图,交互窗口还需要可用显示环境。GPU不是这个后处理的必需资源。
2. 先理解mu单位#
原生三维命令的mu是 Ha,相对DFT费米能;二维入口默认是eV。两个入口不能直接复制同一个数字。
| 三维mu输入 | 相对DFT费米能的eV | 本例位置 |
|---|---|---|
| −0.02 Ha | −0.54423 eV | 价带内等能面 |
| 0 Ha | 0 eV | 位于本例带隙,无等能面 |
| 0.03 Ha | +0.81634 eV | 导带内等能面 |
| 0.05 Ha | +1.36057 eV | 更高的导带等能面 |
严格说,只有mu取实际化学势时才称为对应状态的费米面;为了比较能带形状,这里也展示指定能量的等能面。不把画出一张导带等能图说成已经计算出某个掺杂浓度。
3. 跑一张三维图#
仍在上述已准备VTK的解压目录:
bash run.sh si-m8-conduction
ls work/si-m8-conduction
结果里 native-fermisurface.png是原生三维视图,band-*.vtp是各保留能带的真实三角网格;CAPTURE.json记录mu、网格和渲染信息。

本例mu=0.03Ha,边框是第一布里渊区。不同颜色来自不同保留能带,边界分割出的多个片段不能简单数成相互独立的谷。
如果在可用图形显示的环境里交互查看:
export PYTHONPATH="$PWD/.vtk${PYTHONPATH:+:$PYTHONPATH}"
btp2 -n 1 fermisurface inputs/si-m8.bt2 0.03
鼠标旋转/缩放,w切换线框,r复位,e退出。它是原安装的 btp2;配套 render_cli.py也调用这个原生入口,只把阻塞窗口改为截图/保存网格,并调整视角和标注,没有替换能带、等能面算法或裁剪结果。
4. 价带、带隙与更高能量#
在同一份目录里,各条件名称独立,可以继续:
bash run.sh si-m8-valence
bash run.sh si-m8-gap
bash run.sh si-m8-higher

mu=−0.02Ha,在价带中有真实非空三角网格。

mu=0时,本例没有能带穿过这个能量,只有布里渊区框,网格为空是正确物理结果,不应为了让图“好看”额外画一个面。

mu=0.05Ha时形状和面积发生变化。表面显示的精度还受原DFT网格、傅里叶拟合、三维采样和线性三角化影响。
5. 比较插值与读取数据#
另一份新解压目录完整运行8条件:
bash run-all.sh
head -n 12 analysis/mesh-summary.csv
完整脚本包含局部VTK安装,因此不要先在这份目录重复执行setup。原生条件串行、每次1核,保存所有原始网格和图,随后独立提取面积与误差。
| 插值倍率 | mu/Ha | mu/eV | 非空保留能带数 | 网格总面积/Bohr⁻² |
|---|---|---|---|---|
| 3 | -0.02 | -0.54423 | 3 | 0.750201 |
| 3 | +0.00 | +0.00000 | 0 | 0.000000 |
| 3 | +0.03 | +0.81634 | 2 | 1.054196 |
| 3 | +0.05 | +1.36057 | 2 | 3.247021 |
| 8 | -0.02 | -0.54423 | 3 | 0.743104 |
| 8 | +0.00 | +0.00000 | 0 | 0.000000 |
| 8 | +0.03 | +0.81634 | 2 | 1.073376 |
| 8 | +0.05 | +1.36057 | 2 | 3.319805 |

m3三维采样为27³,m8为37³。mu=0.03Ha时,总网格面积分别约1.054196与1.073376 Bohr⁻²;它只是这个离散三角网格的面积,不是费米体积或载流子浓度。
这组条件抽样点相对解析傅里叶等能面的最大能量残差约为0.0724与0.0372 eV,说明有限三角面与解析面确实存在差别;不要把图的光滑程度当作收敛性证明。原生多平面联合裁剪在交界处还可能生成向布里渊区内部收缩的新顶点。配套脚本分别检查原始网格边顶点和裁剪顶点,保留实际误差,不伪改原网格。
6. 只分析已有参考#
在另一份新解压目录中:
bash setup-vtk.sh
bash analyze.sh
head -n 12 analysis-reference/mesh-summary.csv
它不重新跑VASP,也不再生成一套三维面,而是读取已有原始网格,核对能量与倒格几何、重新提取CSV。参考图位于 reference/work/各条件/native-fermisurface.png。
retained_band_index是插值能量窗保留下来的索引,不是原始VASP的能带序号;不能只看band-003文件名就说它是VASP第4条带。裁剪片段可能不是闭合流形,不能直接拿普通封闭多面体体积算法计算载流子数。
继续阅读:插值与能带、掺杂浓度扫描、二维等能图、全部命令与结果。官方来源:BoltzTraP2、VTK Python运行方式。