ABACUS 专题

ABACUS 平面波波函数提取与实空间重建

Si2倒空间系数、FFT网格、42个原生波函数输出及归一化检查。

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

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

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. 这一流程得到什么#

同一个Si双原子原胞,40 Ry、2×2×2 Γ中心网格,自洽后有3个不可约k点,每个14条带。out_wfc_pw 1导出WAVEFUNC1.txt等文本;out_wfc_r 1生成wfc_realspace目录。本例同时保留原生文件和用NumPy FFT独立重建的结果,共核对42个态。

倒空间系数重建与原生实空间输出逐点对照

图是Γ点第1条带、分数坐标f3=0.25的切片。两个水平轴沿原胞矢量,不是正交笛卡尔x/y。色块来自实际网格。

2. 完整输入#

展开完整 INPUT、STRU、KPT

INPUT#

INPUT_PARAMETERS
suffix tutorial
calculation scf
basis_type pw
ecutwfc 40
scf_thr 1e-8
scf_nmax 150
ks_solver cg
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_wfc_r 1
nbands 14
bands_to_print 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

out_wfc_pw 1选择文本,便于本教程读取;2是二进制,不能直接交给文本解析脚本。nbands 14明确计算14条带。本例的bands_to_print 1 13*0是一个0/1掩码,表示第一条带;它选择带分解电荷,不限制wfc_realspace的所有态输出。这次实际得到3×14个实空间文件,不能根据这一掩码假定只有一张图。

当前构建的PW GPU实空间导出有CUDA兼容问题,本流程使用device cpu。需要GPU自洽后处理波函数时,先采用适配模块和CPU导出路径,不把GPU自洽成功等同于实空间输出已可用。

3. 计算后查看文件#

完整流程结束后,在附件根目录执行:

head -n 2 work/cases/pw-scf/OUT.tutorial/WAVEFUNC1.txt
ls work/cases/pw-scf/OUT.tutorial/wfc_realspace | head

本例Γ点头部给出1139个平面波、14条带;FFT网格为30×30×30。倒空间文本文件的k点/带编号从1开始,而实空间文件wfc_realspace_0_0使用从0开始的下标,指第一个k点、第一条带。

每个系数由实部和虚部两数构成。G向量按FFT网格折回存储,例如索引29对应长度30网格上的负频率。附件脚本按文件中的G索引放回三维数组,再做逆FFT,乘回NumPy默认的1/N归一化因子。

4. 归一化与实际数值#

检查项 本例结果
42态中最大的倒空间正交误差 1.261e-07
重建与原生实空间文件最大逐点差 5.138e-05
第一条带的全k加权电荷积分 2.000000000

原生wfc_realspace在这一版本保存的是FFT场的模平方,采用类CHGCAR排布、单胞平均值约为1;它不是带相位的复数振幅,也不是已经乘了占据数的总电子密度。需要概率密度(Å⁻³)时,用该场除以单胞体积(ų);其积分约为1。Γ点第1带的原生带分解电荷cube则合并了k点权重和占据,积分约为2,两类文件不能混算。

文本系数和实空间数值输出有限有效位数,逐点对照不要求机器精度。复现汇总:

python - <<'PY'
import csv
with open('reference/analysis/pw-normalization.csv') as f:
    for r in csv.DictReader(f):
        if r['kpoint']=='1' and r['band']=='1':
            print(r)
PY

单个波函数的整体相位可任意改变;简并子空间中的单条带还可相互旋转。不要仅凭图上正负颜色或某一条简并带的形状认定成键变化。总电荷、投影和实空间概率需各用对应文件。

输出与实现参考:官方波函数指南、3.10.1实空间输出源码。继续阅读局域轨道系数与S矩阵、选带部分电荷。

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

查看配图

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

100%查看原图 ↗