Bader专题

Bader净电荷、参考密度与网格收敛

以五档NaCl网格说明AECCAR合并、电子数闭合和净电荷计算。

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

下载本篇输入、完整脚本、数据与高清图。解压后在新目录运行,reference保存鸢算科技实际运行的参考结果。

1 要准备哪些文件#

Bader分析把电子密度按空间分区积分,给出各原子区域内的电子数。净电荷需要再用赝势价电子数相减,不是直接把ACF.dat的CHARGE列当成净电荷。

本例使用Bader 1.05 CPU程序;密度由VASP 6.6.1 P100版本实际计算,编译环境为NVHPC 25.3、CUDA 12.8和配套MPI。NaCl原胞含1个Cl、1个Na,ENCUT=550 eV,电子收敛1E-6,7×7×7 Γ网格。下载包包含密度、完整INCAR/POSCAR/KPOINTS、后处理脚本和参考结果,可直接在分配到的CPU资源中运行:

bash run.sh

若要重算自己的结构,在常规静态自洽INCAR中加入:

LCHARG = .TRUE.
LAECHG = .TRUE.
NGXF = 120
NGYF = 120
NGZF = 120

同一体系的网格收敛对比应保持结构、赝势、ENCUT、k点等设置相同。检查OUTCAR正常结束、电子迭代收敛,再进行分区。

2 合并全电子参考密度#

AECCAR0是芯密度,AECCAR2是自洽价电子的全电子重构密度。将它们相加用于确定分区边界,再对CHGCAR价电子密度积分。不要把AECCAR1误当成自洽结果。

from pymatgen.io.vasp.outputs import Chgcar
a = Chgcar.from_file('AECCAR0')
b = Chgcar.from_file('AECCAR2')
assert a.dim == b.dim
Chgcar(a.structure, {'total': a.data['total'] + b.data['total']}).write_file('CHGCAR_ref')

该代码在下载包的bader_grid.py中;Python环境使用pymatgen/2026.9.24。

3 运行Bader与读取净电荷#

module load bader/1.05
bader CHGCAR -ref CHGCAR_ref -vac off
cat ACF.dat

本例原子顺序为Cl、Na,赝势ZVAL分别为7、1。以160³细网格结果为例:

原子 ZVAL 区域内价电子数 净电荷 / e 区域体积 / ų
Cl 7 7.834556 −0.834556 36.510285
Na 1 0.165444 +0.834556 9.787965

定义净电荷 = ZVAL − 区域内电子数,正值表示失电子。若换用Na_pv等赝势,必须使用对应ZVAL,不能沿用1。Bader净电荷也不是形式氧化态,NaCl的形式价态±1与这里的空间分区数值含义不同。

4 检查电子数和网格收敛#

本次所有网格的CHGCAR积分均接近8个价电子,最大误差小于1.8×10⁻⁷ e;两个Bader体积之和为46.29825 ų,与晶胞一致。

细网格 Na净电荷 / e
64³ +0.831068
80³ +0.832127
96³ +0.833226
120³ +0.834655
160³ +0.834556

NaCl的Bader净电荷网格收敛与参考密度积分

120³与160³之差约0.00010 e,满足这组数据中约0.001 e的电荷比较要求,但不能据此为所有材料指定120³。图右显示芯密度在核附近变化很快,粗网格的全电子参考积分明显偏离28;不能只检查价电子总数就判断参考密度已经充分表示。

参考:VASP的LAECHG与三个AECCAR文件、Bader官方程序。

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

查看配图

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

100%查看原图 ↗