VASP与Wannier90计算磁性光学电导
用Fe展示复光学电导的对称与反对称分量,区分响应张量和Kerr旋转角。
阅读本篇目录
磁性材料的光学响应不只有吸收谱。复光学电导张量可分成对称和反对称部分;后者与磁光响应有关。这篇先演示怎样得到这些分量,不直接把它们称作Kerr或Faraday旋转角。
示例体系与软件#
本例使用鸢算科技集群实际计算的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 = kubo
berry_kmesh = 40 40 40
fermi_energy = 5.3774878
kubo_freq_min = 0.0
kubo_freq_max = 2.0
kubo_freq_step = 0.05
kubo_adpt_smr = false
kubo_smr_fixed_en_width = 0.1
光子能量从0至2 eV,步长0.05 eV,固定展宽0.1 eV。这是选定近似下的独立粒子带间响应;不要把零频输出当成已包含实际载流子散射和Drude输运的直流电导。
输出文件:
| 文件示例 | 内容 |
|---|---|
| wannier90-kubo_S_xx.dat | 对称部分xx分量 |
| wannier90-kubo_A_xy.dat | 反对称部分xy分量 |
| wannier90-jdos.dat | 联合态密度 |
电导文件三列依次是光子能量(eV)、实部和虚部(S/cm)。S表示σS_ab=(σab+σba)/2,A表示σA_ab=(σab−σba)/2;A不是安培单位。若某一非对角对称项不为零,完整σab需要把对应S和A合起来,不能只读取A文件。

20³与40³网格的Re σS_xx在0–2 eV区间最大差为1445.594 S/cm。图中同时画出两种网格,不把本例当成充分收敛的实验拟合。更换展宽也会改变峰形,需要单独检查。
怎样进一步得到磁光旋转#
Kerr与Faraday角还需要光入射方向、磁化方向、介质或薄膜几何、厚度,以及一致单位下的完整复介电/电导张量。先明确采用体材料、薄膜还是多层光学模型,再计算边界条件;不能将σA_xy的实部直接标成“旋转角”。
本例没有加入激子、多体寿命、温度磁涨落或器件层结构。若关心更高能光谱,应扩大经过验证的Wannier能量范围与空带数,而不是只改kubo_freq_max。
跟着输入文件操作#
下载本页附件后,先解压到单独目录。下面的目录名与附件一致。
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文件不会随着你的新任务自动更新。
需要选择后处理软件时,可对照实算教程中的辅助工具表。