Bader选项组合、区域编号与密度检查
NaCl真实密度的17组操作,说明分析开关、区域列表与区间、原子和盆编号差异,并从导出网格核对电子积分。
阅读本篇目录
Bader命令中的atom、bader、区域列表和参考密度很容易混淆。本篇使用鸢算科技集群已公开的NaCl真实VASP密度,实际运行17组命令,用文件和积分说明区别。软件为Bader1.05(GCC13.3),分析使用sisl0.16.4模块内的Python、NumPy和Matplotlib;没有重新生成DFT标签。
1. 下载并运行#
下载真实密度、全部命令与绘图脚本。保存为bader-cli.zip:
unzip bader-cli.zip -d bader-cli
cd bader-cli
ls inputs
cat job.slurm
sbatch job.slurm
包内包含CHGCAR、AECCAR0、AECCAR2,不含POTCAR或VASP程序。CPU分区按账号可用资源选择,当前集群CPU分区需按56物理核整节点申请;模板请求56核,工具仍顺序以1线程处理这些小文件。若正在已分配的CPU作业里,也可执行:
bash run.sh
完成后查看:
cat analysis/SUMMARY.json
head analysis/options.csv
ls figures
run.py先按相同网格逐点相加AECCAR0+AECCAR2生成inputs/CHGCAR_ref,再在17个独立目录执行原生Bader;每条命令保存在cases/*/command.sh。后处理检查电子积分、总体积和区域网格相加。参考密度只用于分盆,电子数仍积分输入CHGCAR的价电子密度。
2. 分析开关怎样组合#
以下命令要放在互相独立、各含CHGCAR和CHGCAR_ref的工作目录,避免覆盖输出。自动包已经准备好这些目录。
module load bader/1.05
bader CHGCAR -ref CHGCAR_ref
bader CHGCAR -ref CHGCAR_ref -c bader -n voronoi
bader CHGCAR -ref CHGCAR_ref -c bader -c voronoi
bader CHGCAR -ref CHGCAR_ref -n bader -c voronoi
-c开启、-n关闭后面的分析。默认开启Bader、关闭Voronoi;两者同时开启会得到两种分区结果,并不会把它们变成同一个定义。
| 分区 | Cl区域电子数 | Na区域电子数 | 合计 |
|---|---|---|---|
| Bader | 7.831068 | 0.168932 | 8.000000 |
| Voronoi | 7.3891 | 0.6109 | 8.0000 |
本例PAW价电子参照为Cl7、Na1,因此Bader净电荷为Cl−0.831068e、Na+0.831068e。它是这套密度与分区定义下的结果,不是形式氧化态。Voronoi按空间几何距离划分,数值不同是定义不同。
bader CHGCAR -ref CHGCAR_ref -n bader -n voronoi
两个分析都关掉后,不会生成ACF.dat;这条只用于说明开关行为,不能称为完成电荷分析。
3. 把默认值明确写出来#
bader CHGCAR -ref CHGCAR_ref -c bader -n voronoi \
-b neargrid -r -1 -m known -vac off -i chgcar
在本NaCl体相例子中,这条与基础命令的原子电子数和体积完全相同。-vac off明确不划真空;本体相没有低密度真空区,因此不能把这个对照用于证明表面、分子真空阈值也无影响。
其他算法、细化、真空和终止条件的独立实算见原命令选项教程。实际安装版本的帮助可直接查看:
bader -h
4. 列表、区间和求和的写法#
以原子区域为例,以下两种选择都输出两个独立区域文件:
bader CHGCAR -ref CHGCAR_ref -p sel_atom 1 2
bader CHGCAR -ref CHGCAR_ref -p sel_atom 1-2
本例输出BvAt0001.dat和BvAt0002.dat,与-p all_atom中对应文件逐字节相同。要把两者相加成一个网格:
bader CHGCAR -ref CHGCAR_ref -p sum_atom 1 2
bader CHGCAR -ref CHGCAR_ref -p sum_atom 1-2
bader CHGCAR -ref CHGCAR_ref -p sum_atom 2 1
三个命令均输出BvAt_summed.dat,得到相同的求和密度。换成盆区域时:
bader CHGCAR -ref CHGCAR_ref -p sel_bader 1 2
bader CHGCAR -ref CHGCAR_ref -p sel_bader 1-2
bader CHGCAR -ref CHGCAR_ref -p sum_bader 1 2
bader CHGCAR -ref CHGCAR_ref -p sum_bader 1-2
bader CHGCAR -ref CHGCAR_ref -p sum_bader 2 1
对应输出前缀为Bvol,求和为Bvol_summed.dat。sel输出若干独立文件,sum输出它们的和,不能混用。
5. 原子编号不一定等于盆编号#
本次输入原子1是Cl、原子2是Na,但原生盆编号刚好相反:
| 文件 | 对应内容 | 从网格重新积分的电子数 |
|---|---|---|
| BvAt0001.dat | 原子1,Cl | 7.831067987 |
| BvAt0002.dat | 原子2,Na | 0.168931836 |
| Bvol0001.dat | 盆1,本例位于Na | 0.168931836 |
| Bvol0002.dat | 盆2,本例位于Cl | 7.831067987 |
原子区域可能汇总一个或多个盆。选特定区域前先核对ACF.dat和BCF.dat的坐标与关联,不要认为sel_bader 1一定等于sel_atom 1。

本例只有两个盆,不代表任意材料都满足“一原子一盆”。非核吸引子、伪势和网格都会影响盆的数量及映射。
6. 从导出网格检查有没有漏区域#
analyze.py逐点比较两个独立区域的和与原CHGCAR。本次64³网格结果:总体积46.29825ų,价电子积分约8e;两区域没有正密度重叠,相加逐点还原输入。列表、区间和反序求和均给出相同结果。

图使用相同色标,坐标是晶格分数坐标,固定第三个网格方向在0.5。该截面靠近Cl高密度区,Na图色值很低,不表示其三维积分为零。CHGCAR文件中的网格值是密度乘晶胞体积,不能直接当e/ų;此文件格式下,全部网格值的平均才对应总电子数。
7. 其他选项去哪里看#
| 已安装帮助中的命令族 | 实际操作资料 |
|---|---|
| -c/-n bader/voronoi、显式默认值 | 本篇第2–3节 |
| -b neargrid/ongrid/weight、-r、-m、-vac、-ref | 算法与参考密度及网格收敛 |
| -p all/sel/sum 的atom与bader,列表及区间 | 本篇第4–6节 |
| -p atom_index/bader_index/surfaces_atoms | 原命令选项教程及自旋与区域可视化 |
| -i chgcar/cube、自动识别、-v | CHGCAR/CUBE转换 |
| -cp | 密度临界点 |
| -h | 当前终端帮助,无科学计算输出 |
这些资料合起来覆盖安装版帮助列出的命令族与主要写法,不代表所有体系、网格和拓扑都已收敛。临界点输出的Laplacian列与Hessian迹存在已记录差异,继续保留原文限制;不要仅凭临界点计数就作定量成键结论。