VASPBERRY:PAW算符生成、分块导出与合并
从真实Bi₂固定密度计算开始,在个人VASP5.4.4环境生成PAW自旋与速度矩阵。
阅读本篇目录
普通WAVECAR能做部分Berry后处理,但不能凭空补出完整PAW自旋、非局域速度和简并块。本篇演示在独立VASP源码副本中加入VASPBERRY输出接口,实际计算Bi₂,再把四个k点分成两块导出和合并。
本例使用PBE、SOC、300eV截断、24条带和2×2教学网格。它展示文件流转,材料响应研究还需要加密网格、增加空带并检查收敛。
下载输入、实际数值矩阵、数据和绘图脚本。包内不含VASP源码、程序、赝势、CHGCAR或WAVECAR。
unzip vaspberry-producer-wave703-*.zip
cd vaspberry-producer
bash results.sh
bash plot.sh

1. 先选择适用环境#
后处理使用VASPBERRY1.6.3,固定提交1d5d752d,Python3.11、NumPy2.3.5。生成器采用VASP5.4.4串行复数ncl个人构建,ifort2021.10、MKL2023.2 sequential,GNU gcc/g++负责C和解析器,-O2 -xCORE-AVX512。
这个个人程序只用于支持AVX512的CPU,不用于P100计算节点的CPU,更不是GPU或MPI版。普通集群VASP模块继续用于常规计算。
上游接口说明限定串行5.4.4、半局域泛函、Cartesian SAXIS=0 0 1、无Hubbard U、无自旋螺旋。Hybrid、meta-GGA、其他源码修订以及MPI/GPU不能直接照搬。
本例授权源码中的linear_optics.F哈希为79c189ea…,与上游插桩器原来绑定的源码修订不同;随包准备程序仅针对这个精确修订建立个人适配,并保持上游插入公式和数值检查。适配并不表示任意5.4.4源码都能通用。源码不匹配时,应先核对修订,不能删除哈希检查。
有VASP源码授权后,在自己的CPU计算资源内准备:
bash build.sh /自己的授权源码/vasp.5.4.4
脚本复制到toolchain/vasp544后编译,不修改传入源码。旧版Fortran模块依赖需要make -j1;首次准备一次即可,之后复用个人生成器。
2. 先完成同体系SCF#
结构inputs/POSCAR:
Bi buckled honeycomb layer
1.00000000000000
4.3888421599896201 0.0000000000000000 0.0000000000000000
2.1944210799948101 3.8008488037511787 0.0000000000000000
0.0000000000000000 0.0000000000000000 15.0000000000000000
Bi
2
Selective dynamics
Direct
0.1666666666666643 0.1666666666666643 0.0579618666614847 F F T
0.8333333333333357 0.8333333333333357 0.9420381333385153 F F T
0.00000000E+00 0.00000000E+00 0.00000000E+00
0.00000000E+00 0.00000000E+00 0.00000000E+00
SCF的INCAR:
SYSTEM = Own Bi2 SOC density for PAW export
ENCUT = 300
PREC = Accurate
EDIFF = 1E-6
NELM = 120
ALGO = Normal
ISPIN = 1
LSORBIT = .TRUE.
LNONCOLLINEAR = .TRUE.
SAXIS = 0 0 1
MAGMOM = 6*0
ISYM = -1
LREAL = .FALSE.
ISMEAR = 0
SIGMA = 0.02
IBRION = -1
NSW = 0
NBANDS = 24
LASPH = .TRUE.
ADDGRID = .TRUE.
LWAVE = .TRUE.
LCHARG = .TRUE.
SCF使用Γ中心2 2 1网格:
Bi2 SCF
0
Gamma
2 2 1
0 0 0
在有授权的常规VASP环境中完成SCF并保存CHGCAR。把同一次计算所用文件放到资料包:
cp /自己的SCF目录/POTCAR inputs/
cp /自己的SCF目录/CHGCAR inputs/
grep 'EDIFF is reached' /自己的SCF目录/OUTCAR
本例含10个价电子,SCF电子收敛到1E-6。新体系必须整体更换结构、赝势、SCF密度和相关参数,不能混用本例Bi的矩阵与其他材料。
3. 固定密度,分成两个k点块#
块0的INCAR:
SYSTEM = OwnBi2 fixedcharge full PAW matrix producer
ENCUT = 300
PREC = Accurate
EDIFF = 1E-6
NELM = 120
ALGO = Normal
ISPIN = 1
LSORBIT = .TRUE.
LNONCOLLINEAR = .TRUE.
SAXIS = 0 0 1
MAGMOM = 6*0
ISYM = -1
LREAL = .FALSE.
ISMEAR = 0
SIGMA = 0.02
IBRION = -1
NSW = 0
NBANDS = 24
LASPH = .TRUE.
ADDGRID = .TRUE.
LWAVE = .TRUE.
LCHARG = .FALSE.
ICHARG = 11
ISTART = 0
LOPTICS = .TRUE.
LPEAD = .FALSE.
LNABLA = .FALSE.
LBERRY_EXPORT = .TRUE.
LSPIN_EXPORT = .TRUE.
NEDOS = 100
ICHARG=11读取固定密度;LOPTICS启用光学路径,LBERRY_EXPORT和LSPIN_EXPORT输出原生接口。LREAL、LPEAD、LNABLA在这条路径均为False。NBANDS、ENCUT、结构、密度与赝势保持一致。
两块的完整KPOINTS:
OwnBi2disjointfixedchargechunk
2
Reciprocal
0.125 0.125 0 1
0.625 0.125 0 1
OwnBi2disjointfixedchargechunk
2
Reciprocal
0.125 0.625 0 1
0.625 0.625 0 1
它们合起来是平移后的完整2×2网格,每点最终权重1/4。不能把一条高对称路径或缺点网格交给spin-merge冒充全布里渊区积分。
4. 提交、导出与合并#
sbatch calculate.slurm
squeue -u "$USER"
模板申请1个CPU进程,顺序计算两块、导出、合并,再计算响应。CPU分区可用时提交。前置SCF不在这个脚本中自动执行。
在自己已获分配的CPU资源中,可分步执行:
bash produce.sh
ls work/chunk0/exported
ls merged
produce.sh先调用run_vasp_spin_producer.py运行个人程序并记录输入与输出,再执行spin-export,最后执行:
vaspberry-kubo spin-merge \
--run-dirs work/chunk0 work/chunk1 \
--mesh 2 2 --occupied 10 --output-dir merged
每块保留SPIN_VELOCITY.bin、BERRY_CONNECTION.bin、同次WAVECAR/OUTCAR和run.json,不能只复制一个矩阵文件。导出器检查文件配套、PAW重叠、Hermitian性质和光学关系;不能先把矩阵归一化、对称化或把简并块清零再导出。
合并得到physical-matrices.npz、physical-matrices.json和assembly-audit.json。合并的WAVECAR属于自己的计算数据,不需要公开上传。
5. 如何理解速度矩阵#
velocity_eVA[k,a,n,m]是Cartesian方向的ℏv,单位eV·Å;spin_pauli是无量纲Pauli矩阵,真实自旋还要乘ℏ/2。它们都保留原能带与本征态规范。

本例对第一个k点分别移动分数坐标kx、ky的±0.0002,以同一固定密度计算能级,再转换成Cartesian导数。占据的五组Kramers带对平均速度,矩阵与有限差分最大差约0.000170 eV·Å。近简并时比较带对迹,不能随意把两个本征矢逐个对应。
有限差分必须读取足够精度的能量;四舍五入后的XML或文本能级除以很小步长会放大误差。本例从同次WAVECAR的完整精度能量记录读取,不重新求SCF密度。
接着阅读矩阵到自旋Hall响应。