ABACUS 专题

ABACUS 选带部分电荷与网格检查

Si2第一条带在8个k点上的原生电荷cube、40/80Ry归一化对照和绘图。

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

下载完整输入、原生结果与绘图脚本。解压进入附件根目录,先运行:

bash analyze.sh

这一步读取参考结果,用一个CPU核心提取CSV并生成四张高清图,不启动DFT。完整计算包含6个步骤,提交:

sbatch submit.slurm

CPU模板预留1个MPI进程×56核,符合整节点规则;此微型流程逐个条件实际仅用1线程。参考实算使用ABACUS3.10.1的P100模块、CPU后端,GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2及OpenBLAS0.3.30;不是GPU加速或8173M节点性能数据。附件的submit-p100-cpu.slurm对应参考模块和资源环境,申请一张P100资源后使用CPU计算;按自己的资源权限选择,不能把CPU模块和GPU节点模块混用。不要在登录节点执行DFT。

1. 哪些电子态分布在哪里#

总电荷回答所有占据态的整体分布,部分电荷可单独查看某条带、某个k点。例子仍用Si2,只选择第1条带,完整8个k点分别输出;它是理解文件和流程的小体系,不是特定缺陷态或界面电荷转移研究。

真实结构、原生部分电荷与两套网格归一化对照

2. 先做同一结构的LCAO自洽#

先用局域轨道波函数教程中的完整lcao-scf输入,保留WFC_NAO_K1.txt至WFC_NAO_K8.txt。本例要求相同结构、赝势、轨道、k点、带数,前后都用symmetry -1,避免不可约k点和完整k点混用。

3. 再做get_pchg#

展开完整 INPUT、STRU、KPT

INPUT#

INPUT_PARAMETERS
suffix tutorial
calculation get_pchg
basis_type lcao
ecutwfc 80
scf_thr 1e-8
scf_nmax 150
ks_solver elpa
device cpu
precision double
cal_force 1
cal_stress 1
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
out_chg 1
out_pot 1
out_wfc_pw 1
out_dm1 1
out_mat_hs2 1
out_mat_r 1
out_wfc_lcao 1
nbands 14
symmetry -1
init_wfc file
out_wfc_r 1
if_separate_k 1
out_pchg 1 13*0

STRU#

ATOMIC_SPECIES
Si 28.0855 Si_ONCV_PBE-1.0.upf

NUMERICAL_ORBITAL
Si_gga_8au_100Ry_2s2p1d.orb

LATTICE_CONSTANT
10.26

LATTICE_VECTORS
0 0.5 0.5
0.5 0 0.5
0.5 0.5 0

ATOMIC_POSITIONS
Direct
Si
0.0
2
0 0 0 1 1 1
0.25 0.25 0.25 1 1 1

KPT#

K_POINTS
0
Gamma
2 2 2 0 0 0

关键参数为:

  • calculation get_pchg:读取已保存波函数,提取部分电荷;不重新求一套不同的SCF。
  • init_wfc file:从匹配文件初始化。
  • out_pchg 1 13*0:14条带的0/1掩码,只选择第1条。它不是“输出第1到第13条带”。
  • if_separate_k 1:每个k点独立输出。本例应恰好有8个BAND1_K*_SPIN1_CHG.cube。
  • symmetry -1:保留完整k点并避免部分电荷对称性/权重歧义。

在已分配资源并加载模块的环境中,单独运行该阶段:

cd work/cases/lcao-get-pchg
mkdir -p OUT.tutorial
cp ../lcao-scf/OUT.tutorial/WFC_NAO_K*.txt OUT.tutorial/
mpirun -np 1 abacus > partial-charge.log

这里应使用out_pchg。本例实际测试中,仅设置bands_to_print时LCAO仍按默认费米能附近范围输出;所以需要检查最终文件名和数量,不能只看输入里是否写了选带字符串。

4. 分别输出的cube如何读#

这一3.10.1路径在if_separate_k 1时使用单态归一化,不包含k点权重或自旋占据因子,每张cube的积分应接近1,不能直接把八张相加称为总电子密度。使用ASE读取cube时,原子坐标会转成Å,数据仍是原生Bohr⁻³,因此积分需要用单胞体积(ų)除以Bohr³。

module load ase/3.29.0
python - <<'PY'
from pathlib import Path
from ase.io.cube import read_cube
from ase.units import Bohr
root=Path('reference/cases/lcao-get-pchg/OUT.tutorial')
for p in sorted(root.glob('BAND1_K*_SPIN1_CHG.cube')):
    with p.open() as f:
        a=read_cube(f)
    integral=a['data'].mean()*a['atoms'].get_volume()/Bohr**3
    print(p.name, integral)
PY

5. 为什么还要检查网格#

LCAO的ecutwfc控制网格精度,数值轨道本身由轨道文件定义。相同结构分别用40和80 Ry完成自洽,并用各自对应系数提取部分电荷,实际积分如下:

k点序号 40 Ry,30³网格 80 Ry,45³网格
1 0.999999611 0.999999973
2 1.000000137 1.000000003
3 1.000000137 1.000000003
4 0.992824621 1.000000065
5 1.000000137 1.000000003
6 1.000000012 1.000000065
7 1.000000012 1.000000065
8 1.000000137 1.000000003

40 Ry的第4点约0.9928,不能仅因文件生成就当作归一化精确。80 Ry本例全部点接近1,最大偏差约6.6×10⁻⁸。这是本例的实际网格对照,不代表所有材料都只需80 Ry;换赝势、轨道或体系后仍要检查。

对照目录是lcao-grid40-scf及lcao-grid40-pchg。每套后处理读取自己的SCF系数,不把40 Ry和80 Ry结果混在一个OUT目录里。为绘图统一色标时,保持数据单位、原胞坐标和所选态相同;单条简并带的图像也不唯一,需要按研究目的合并完整子空间。

原理与实现参考:官方波函数教程、3.10.1 LCAO部分电荷实现。

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

查看配图

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

100%查看原图 ↗