VASP与Wannier90计算反常霍尔电导
从Fe的SOC波函数到Berry曲率积分,认识能带检查、积分网格与电导输出。
阅读本篇目录
反常霍尔电导描述磁性体系中与普通外磁场霍尔效应不同的横向响应。这里演示能带Berry曲率带来的内禀贡献,不包含杂质引起的侧跳、偏斜散射,也不能用它代替普通Hall系数。
示例体系与软件#
本例使用鸢算科技集群实际计算的bcc Fe:单原子原胞,固定晶格常数2.87 Å,PBE PAW Fe,ENCUT=550 eV,EDIFF=1E-6,8³Gamma网格,32条自旋子能带。开启SOC与非共线自旋,初始磁矩沿z,未添加磁矩方向约束;这是固定结构的电子响应计算,不是结构优化。
VASP为6.6.1-v100-wannier90,使用NVHPC 25.3/CUDA 12.8;Wannier90/postw90为独立4.0.3,使用Intel oneAPI 2024.2 ifx编译。VASP部分使用V100,Wannier后处理使用CPU。
每个Fe投影s、p、d轨道,计入自旋后共18个Wannier轨道。冻结窗口上限为费米能以上5 eV,外窗口为费米能以上40 eV;设置guiding_centres=true,解纠缠和局域化各最多2000次迭代。独立路径DFT与插值在费米能−8至+2 eV范围内,RMSE为0.0440 eV,最大误差0.1142 eV。这个对照用于判断电子结构插值是否适合本例的低能响应,不能替代响应积分的收敛检查。
工作流:先准备波函数,再计算响应#
下载附件,在两个DFT目录中准备合法Fe POTCAR,回到根目录提交:
sbatch run.sh
脚本依次完成:
- fe-spinor:自洽SOC计算,保存CHGCAR及Wannier接口文件。
- 建立18轨道Wannier模型,生成插值所需的检查点。
- fe-band-check:用本次CHGCAR直接计算高对称路径,对照插值能带。
- 在20³和40³积分网格分别计算反常霍尔电导和复光学电导。
- 计算结束后运行附件中的extract_response.py,获得FE-RESPONSE-DATA.json。
module load ase/3.29.0
python extract_response.py
8³网格决定原始DFT波函数的采样;20³、40³是插值之后的布里渊区积分网格。加密后者不会自动弥补原始波函数网格或Wannier子空间的问题。保留自己的原始接口文件;只有HR文件不足以复现这里的全部响应。
设置与输出怎样对应#
berry = true
berry_task = ahc
berry_kmesh = 40 40 40
fermi_energy_min = 5.1774878
fermi_energy_max = 5.5774878
fermi_energy_step = 0.01
berry_curv_adpt_kmesh = 1
本例自洽费米能为5.3774878 eV。扫描只是在同一固定能带上改变占据参照,不能直接称为完成了不同掺杂浓度的自洽计算。自适应细分设为1,即未启用额外细分。
wannier90-ahc-fermiscan.dat依次给出费米能(eV)、σyz、σzx、σxy(S/cm)。在本次自洽费米能处:
| 积分网格 | σyz / S·cm⁻¹ | σzx / S·cm⁻¹ | σxy / S·cm⁻¹ |
|---|---|---|---|
| 20³ | 109.418 | -3.142 | -1264.995 |
| 40³ | 19.883 | -6.340 | -803.164 |

扫描范围内两种网格σxy的最大差为4047.653 S/cm。因此这些数据用于展示计算和检查流程,不应引用为收敛的铁材料常数。对于严格沿z磁化的理想bcc Fe,对称性要求横向向量分量σyz、σzx为零。本例保留原始分量,且磁矩方向未强制固定;非零分量需要结合实际磁矩、插值对称性和积分误差检查,不能直接解释为新的物理效应。
换成自己的材料#
先得到稳定的磁性基态,再决定是否需要SOC及非共线自旋。重新选择投影轨道和能量窗口,比较直接DFT与插值。随后逐步增加原始DFT网格和响应积分网格,并对Berry曲率尖峰考虑自适应细分。磁化方向、坐标轴与电导张量指标必须一并记录。
得到稳定结果后,再讨论费米能依赖、不同磁化方向或化学成分的趋势。不要只选一条看起来平滑的曲线当作收敛依据。
跟着输入文件操作#
下载本页附件后,先解压到单独目录。下面的目录名与附件一致。
unzip vasp-properties-batch31-*.zip -d vasp-example-31
cd vasp-example-31
cat README.txt
以下展开的是 calculations/fe-spinor 这一步的真实示例输入。多结构扫描、位移法和多阶段响应仍按正文顺序准备全部任务;改变材料时,结构、元素顺序和方法参数要一起修改。
cd calculations/fe-spinor
ls INCAR POSCAR KPOINTS
nano INCAR
INCAR:展开查看完整示例
SYSTEM = bccFe spinor Wannier response
ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
IBRION = -1
NSW = 0
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE.
LASPH = .TRUE.
ISYM = -1
LSORBIT = .TRUE.
LNONCOLLINEAR = .TRUE.
MAGMOM = 0 0 2.5
LORBIT = 11
LORBMOM = .TRUE.
NELM = 160
ALGO = Normal
NBANDS = 32
NUM_WANN = 18
LWANNIER90 = .TRUE.
LWRITE_SPN = .TRUE.
LWAVE = .TRUE.
LCHARG = .TRUE.
POSCAR:展开查看完整示例
Fe
1.0000000000000000
-1.4350000000000001 1.4350000000000001 1.4350000000000001
1.4350000000000001 -1.4350000000000001 1.4350000000000001
1.4350000000000001 1.4350000000000001 -1.4350000000000001
Fe
1
Direct
-0.0000000000000000 0.0000000000000000 0.0000000000000000
KPOINTS:展开查看完整示例
Gamma mesh
0
Gamma
8 8 8
0 0 0
关键参数对照:
| 参数 | 本例值 | 使用时注意 |
|---|---|---|
IBRION |
-1 |
决定离子处理方式:−1为静态,0为分子动力学,2常用于优化;5/6等有限位移任务见正文。 |
LORBIT |
11 |
控制原子/轨道投影输出;投影能带和PDOS需要相应的PROCAR或DOSCAR内容。 |
LSORBIT |
.TRUE. |
设为.TRUE.时开启自旋轨道耦合,使用匹配的vasp_ncl程序并保持磁化方向和坐标定义一致。 |
NBANDS |
32 |
控制计算能带数;光谱、响应和Wannier窗口通常需要额外空带。 |
LWANNIER90 |
.TRUE. |
设为.TRUE.时输出Wannier接口;后续仍需独立运行Wannier90并检查插值。 |
LCHARG |
.TRUE. |
控制是否写出CHGCAR;后续固定密度计算需要前一步保存该文件。 |
EDIFF |
1E-6 |
电子自洽收敛阈值,单位eV;本组通常为1E−6。 |
POSCAR的元素顺序决定POTCAR拼接顺序。Direct表示分数坐标,Cartesian表示笛卡尔坐标;有Selective dynamics时,F/T还限制相应原子的移动。KPOINTS第二行为0通常使用自动网格;显式列表、Line-mode路径和均匀网格用途不同,不能互换来做同一种积分。
这个输入由附件根目录的总脚本组织。按正文为各阶段准备POTCAR后,返回附件根目录提交整个流程:
cd ../..
sbatch run.sh
squeue -u "$USER"
run.sh:整个流程的执行顺序
#!/bin/bash
#SBATCH --job-name=fe-response
#SBATCH --partition=gpu-8v100-16g-hs
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:v100-16g:1
#SBATCH --time=04:00:00
#SBATCH --output=fe-response-%j.log
set -eo pipefail
source /etc/profile
study_dir="$SLURM_SUBMIT_DIR"
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 OMPI_MCA_coll_hcoll_enable=0 NO_STOP_MESSAGE=1
ulimit -s unlimited
module purge
module load vasp/6.6.1-v100-wannier90
cd "$study_dir/calculations/fe-spinor"
mpirun --bind-to none -np 1 vasp_ncl > stdout.log 2>&1
module purge
module load ase/3.29.0
python "$study_dir/prepare_wannier.py"
module purge
module load wannier90/4.0.3-serial
wannier90.x wannier90 > wannier.stdout 2>&1
module purge
module load ase/3.29.0
python "$study_dir/prepare_bandcheck.py"
cd "$study_dir/calculations/fe-band-check"
module purge
module load vasp/6.6.1-v100
mpirun --bind-to none -np 1 vasp_ncl > stdout.log 2>&1
module purge
module load ase/3.29.0
python "$study_dir/check_bands.py"
python "$study_dir/prepare_response.py"
module purge
module load wannier90/4.0.3-serial
for name in ahc20 ahc40 kubo20 kubo40; do
cd "$study_dir/calculations/$name"
postw90.x wannier90 > post.stdout 2>&1
grep -q 'All done: postw90 exiting' wannier90.wpout
done
作业结束后,在实际VASP输出目录查看最后几步:
tail -n 12 OSZICAR
grep "EDIFF is reached" OUTCAR | tail -n 3
grep "reached required accuracy" OUTCAR
ls -lh CONTCAR
静态计算不要求出现离子优化完成提示;优化任务还要检查最终自由原子力。性质专用输出和后处理仍按正文执行。附件中的参考图与RESULTS文件不会随着你的新任务自动更新。
需要选择后处理软件时,可对照实算教程中的辅助工具表。