py4vasp专题

py4vasp磁性场:切面、单位与数据导出

读取同一次真实SOC计算的磁密度和磁性势,讲清体积归一化及矢量图操作。

更新于 2026-11-11约 3 分钟阅读按任务与环境选择适用配置
阅读本篇目录

本篇继续使用同一套Fe实算数据,不需要重新运行VASP。晶胞体积122.694 ų,Fe层位于分数坐标c=0.5。

1 选择实空间切面#

cd py4vasp-spin
module load py4vasp/0.11.3
python - <<'PYCODE'
import py4vasp
c = py4vasp.Calculation.from_path('sample')
print(c.density.is_noncollinear())
g = c.density.to_quiver(c=0.5)
g.to_plotly().write_html('spin-density.html', include_plotlyjs='cdn')
PYCODE

c=0.5表示在第三条晶格矢量的中间切一平面,剩余两条矢量构成绘图区。也可使用a或b,一次只指定一个切面。图中的方向与相对分布来自原生接口。

真实磁密度面内矢量切面

2 定量密度要先核对归一化#

本例density.to_numpy()保留VASP网格的体积归一化约定。要得到每立方Å的密度,先除晶胞体积;作晶胞积分时再乘每个网格体元体积。相关约定见VASP官方CHGCAR说明。

python - <<'PYCODE'
import py4vasp
c = py4vasp.Calculation.from_path('sample')
raw = c.density.to_numpy()
volume = c.structure.volume()
density = raw / volume
print('shape:', raw.shape)
print('valence electrons:', raw[0].mean())
print('integrated spin channels:', raw[1:].mean(axis=(1, 2, 3)))
PYCODE

本站原始电荷网格平均值约8.00000003,与本例8个价电子一致;三个自旋通道的晶胞积分约为[2.38760, 2.38781, 0.00043],按当前VASP自旋约定解释。PAW球内投影与整个晶胞积分范围不同,不应要求它们逐项相等。

原生磁密度箭头图用于看方向和相对分布;包中的CSV同时保存原生分量和除体积后的密度分量,定量分析请选对列。

3 磁性势不是以特斯拉计的磁场#

python - <<'PYCODE'
import py4vasp
c = py4vasp.Calculation.from_path('sample')
print(c.potential.selections())
g = c.potential.to_quiver(c=0.5)
g.to_plotly().write_html('magnetic-potential.html', include_plotlyjs='cdn')
PYCODE

这里读取的是非共线计算势中的磁性分量,不能直接当作外加磁感应强度。它需要计算时写出相应势场;本例使用WRT_POTENTIAL=total hartree ionic xc。

同一次实际计算的磁性势面内分量

4 统一导出HTML和完整CSV#

bash run.sh
head -n 5 results/spin-density.csv
head -n 5 results/magnetic-potential.csv

默认读取sample,使用bash run.sh fresh则读取自己的新结果。CSV前两列是原生二维数据的网格索引,后续为两分量;磁密度另给体积归一化后的两列。完整网格保留在CSV,图像缩放不会改变这些数值。

图和表都用于这个理想固定单层的操作演示。换材料时,应重新准备结构、磁态、k网格和对应输出,再用相同读取流程处理。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗