VASPBERRY波函数与速度实操
将SOC波函数转换为实空间实虚振幅,组合两个自旋器画密度,并读取正则动量速度。
阅读本篇目录
本例沿用MoS₂输入准备中在鸢算科技集群实际计算的SOC波函数:3原子原胞、PBE、450 eV、电子收敛1E-6、48条能带,完整未平移6×6×1网格,共36个k点,占据自旋器能带1–18。结构先优化到最大力小于0.02 eV/Å。这里不重新运行VASP。
VASPBERRY 1.6.3固定官方提交1d5d752,原生串行程序采用ifx 2024.2.1、顺序MKL;Python分析环境为配套的Python 3.11、NumPy和Matplotlib。前置VASP SOC使用6.6.1 GPU/HDF5构建,NVHPC 25.3、CUDA 12.8与HDF5 1.14.6。GPU负责前置DFT,VASPBERRY后处理使用CPU。
下载命令、输入模板、数值数据和4张图,保存为 vaspberry-advanced.zip。压缩包不分发原始波函数或势文件。请将您自己同次计算的WAVECAR、OUTCAR、POSCAR、EIGENVAL放入 input/:
python3 -m zipfile -e vaspberry-advanced.zip .
cd vaspberry-advanced-wave284
bash prepare.sh ./input
bash calculate.sh
bash extract.sh
ls results
prepare.sh只链接输入;calculate.sh依次运行下面各原生任务;extract.sh读取已生成的数据和波函数做检查、输出CSV与4张图。完整6×6×1、18条占据带和48条总能带是本例设置,不是所有材料的默认值。更换材料要同步修改脚本中的带窗、网格与选态。大型后处理请在Slurm分配的CPU资源中执行。
1 选择真实的k点和能带#
本例完整网格中的第1个k点是Γ,选择第18条带。--kpoint与--wavefunction-band使用从1开始的编号;其他路径文件的Γ可能不在第1点,必须先核对。
在有匹配POSCAR、EIGENVAL的结果目录运行:
module load vaspberry/1.6.3
vaspberry --task wavefunction --wavecar WAVECAR --wavefunction-band 18 --kpoint 1 --real-grid 24,24,64 --imaginary 1
ls PARCHG-W-*
实际生成 PARCHG-W-K001-E018-SPIN1 和 PARCHG-W-K001-E018-IM-SPIN1。每个文件各含两块24×24×64网格,分别属于两个SOC自旋器分量。实部文件加虚部文件,仍然不是电荷密度。
2 正确组合实部、虚部与两个自旋器#
程序输出虽然采用CHGCAR式布局,保存的却是振幅W。对于晶胞体积V:
psi_up = (W_real_up + i W_imag_up) / V
psi_down = (W_real_down + i W_imag_down) / V
rho_pseudo = |psi_up|^2 + |psi_down|^2
只有完成这一步,才能画相应单态的伪波函数密度。不能直接把实/虚网格相加,也不能只读第一个自旋器分量。
配套程序调用已部署的官方后处理脚本,随后将结果复制到 results/:
bash extract.sh
head results/wavefunction-density.csv

左图按真实斜晶胞的Cartesian x、y坐标画沿z积分密度,右图为平面平均密度;没有把斜胞拉伸成正方形,也没有强行归一化。
| 检查量 | 本例实际结果 |
|---|---|
| 实空间伪密度积分 | 0.8263228558 |
| WAVECAR平面波系数模方和 | 0.8263228502 |
| 原生振幅与独立傅里叶重建最大差 | 2.61×10⁻⁷ Å⁻³ᐟ² |
积分不等于1不表示漏读了一个自旋器。WAVECAR保存的是伪波函数,这里没有加上完整PAW增广密度。单态在简并子空间内的形状还可能随基底改变;比较简并态空间分布时,应合并整个简并子空间的密度。
3 计算正则动量速度期望#
在另一个新结果目录中:
vaspberry --task velocity --wavecar WAVECAR --bands 18
head -24 VEL_EXPT.dat
DAT中第4、5列是x、y方向速度期望,单位m/s。后3列为分数k坐标。程序复制相邻倒格矢区域用于绘图,因此324行对应36个独立k点的9份周期图像。

右图是第18带的速度矢量,标尺为100,000 m/s。配套CSV为 results/single-transition-and-velocity.csv。我们用原始两自旋器系数独立计算 sum |c(G)|²(k+G)×ħ/m,与原生结果比较;保留原始系数范数,不另除以伪波函数范数。
这个量是伪波函数正则动量近似下的速度期望,未包含完整PAW与非局域/SOC速度算符修正。它可以用于检查该程序输出和画出采样点矢量,不应直接冒称完整材料群速度,更不能单独推出输运迁移率。
4 下一步怎么用#
下载包中的 input-template/保留原计算的完整INCAR、POSCAR和KPOINTS,方便核对SOC设置和k点编号;WAVECAR、POTCAR及完整VASP日志不随包公开。
若只查看已有结果,直接打开 figures/与 reference/。重做自己的数据时,先用 prepare.sh链接同次原始文件,再运行 calculate.sh,最后 extract.sh生成结果。重复试验用新的包目录,保留先前输出,避免固定文件名覆盖。
参阅官方实空间波函数实例与原生命令说明。