ABACUS 专题

ABACUS:波函数到非绝热耦合

用真实水分子短轨迹演示Γ点LCAO波函数、跨时刻重叠、相位连续化与NATXT。

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

想用ABACUS轨迹研究电子在不同能带间的转移,需要先输出波函数及重叠矩阵,再计算非绝热耦合NAC。本例在鸢算科技集群实际计算了14Å周期晶胞中的3原子水分子,得到16个核轨迹快照和相邻时刻的基组重叠,再调用原生abacus-namd读取、相位处理和NAC程序。

这是未热化的3.75fs短轨迹,用于学习文件和命令流程,不用于报告水的平衡性质或载流子寿命。

下载完整输入、实际波函数和矩阵、处理脚本及图片数据。

unzip abacus-namd-wave699-*.zip
cd abacus-namd
bash results.sh
bash plot.sh

实际分子构型与八条电子能级

1. 准备哪些软件#

DFT使用固定ABACUS beta10源码40e7ce8c的LCAO个人环境,icx/icpx2024.2、Intel MPI2021.13、顺序MKL2024.2、ELPA,1进程1线程。按照个人RI/LCAO环境准备一次即可。

NAC使用abacus-namd固定fc6e27ac源码,Python3.11、NumPy2.3.5、SciPy1.16.3、OpenMPI5.0.10和mpi4py4.1.1。配套脚本仅在个人目录准备该接口及依赖。

bash prepare.sh

该命令下载固定源码并检查哈希,在toolchain/python安装mpi4py,不开始DFT或MD。Gamma实波函数是本路线的前提,不能直接套到多k点、复数波函数或SOC任务。

2. ABACUS输入如何设置#

完整INPUT:

INPUT_PARAMETERS
suffix nac
calculation md
basis_type lcao
ntype 2
ecutwfc 60
scf_thr 1e-6
scf_nmax 120
dft_functional pbe
gamma_only 1
ks_solver genelpa
nbands 8
smearing_method fixed
mixing_type broyden
mixing_beta 0.3
cal_force 1
cal_stress 0
out_chg 0
out_wfc_lcao 1
out_mat_hs 1 12
cal_syns 1 12
md_type nve
md_dt 0.25
md_nstep 16
md_tfirst 300
md_seed 69917
md_dumpfreq 1
md_restartfreq 4

gamma_only 1输出实数Γ点波函数。out_wfc_lcao 1输出wf_nao.txt,out_mat_hs 1 12输出12位精度H/S,cal_syns 1 12输出相邻时刻基组重叠。这里md_type nve是这个beta10版本的字符串写法;旧版整数编号不能直接照搬。

md_dt 0.25单位fs,16帧时间为0、0.25、…、3.75fs。md_tfirst 300只是初始速度对应的温度,不代表这段单分子轨迹已达到300K热平衡。md_seed固定初始随机速度。

完整STRU:

ATOMIC_SPECIES
O 15.999 O_ONCV_PBE-1.0.upf
H 1.008 H_ONCV_PBE-1.0.upf

NUMERICAL_ORBITAL
O_gga_6au_60Ry_2s2p1d.orb
H_gga_6au_60Ry_2s1p.orb

LATTICE_CONSTANT
1.8897268777743552

LATTICE_VECTORS
14 0 0
0 14 0
0 0 14

ATOMIC_POSITIONS
Direct
O
0
1
0.500000000000000 0.500000000000000 0.500000000000000 1 1 1
H
0
2
0.568571428571429 0.500000000000000 0.500000000000000 1 1 1
0.482831085436267 0.566387266768784 0.500000000000000 1 1 1

O有13个数值轨道,每个H有5个,共23个NAO。8个价电子占据4条带,计算保留8条带。这里是有限周期晶胞中的分子模型,不把它称为已收敛的孤立分子极限。

KPT:

K_POINTS
0
Gamma
1 1 1 0 0 0

3. 自己重算DFT轨迹#

先关联个人ABACUS环境:

bash use-abacus.sh ../abacus-ri-env/toolchain
sbatch md.slurm
squeue -u "$USER"

模板使用CPU分区;CPU资源可用后提交。随包已有实际参考轨迹,先学后处理不必重新计算。新轨迹输出在work-md/OUT.nac。

ls work-md/OUT.nac
grep -c '#SCF IS CONVERGED#' work-md/OUT.nac/running_md.log

这套参考16帧均电子收敛。关键文件为wf_nao.txt、sk_nao.txt、syns_nao.csr和MD_dump。不能只保存原子坐标就假定已有波函数或NAC。

4. 波函数转换、相位处理和NAC#

准备好个人接口后,提交短后处理:

sbatch postprocess.slurm

模板先执行nac.sh,再执行下一篇的dynamics.sh。在自己已分配的计算资源中分步操作,可以使用:

bash nac.sh
cat native-NAC-output/bandrange.dat
ls native-NAC-output

优先读取自己的work-md/OUT.nac;没有新DFT目录时读取包内reference-data/dft-outputs。不要把不同结构的波函数、同一时刻S和跨时刻S混在一起。

新版跨时刻CSR带注释、数组换行,旧读取器要求固定行数;配套脚本只转换这些表头和换行,数值、列索引和行指针不改。SciPy旧名cumtrapz对应当前cumulative_trapezoid,由局部兼容入口处理。

16帧有15组跨时刻重叠。这个旧读取器会读取一个额外前瞻项,所以本例使用前15帧生成14段耦合,真实末尾数据作前瞻;没有复制最后一帧或补造一个重叠矩阵。

本例选择全局第5–8带,即四条导带。原生参数为LHOLE=False、LPHASE=True,第8带作为初始电子态。相位处理解决相邻波函数任意正负号带来的跳变,并不自动处理所有近简并态的子空间旋转。

5. 看数值与图片#

cat analysis/H2O-NAC.csv
cat analysis/H2O-levels.csv
bash plot.sh

实际NAC矩阵与随时间的变化

本例最大耦合约0.0463fs⁻¹。所有快照的CᵀSC与单位矩阵最大差约5.2×10⁻⁹;原生相位/NAC与独立矩阵乘法最大差约4.4×10⁻¹⁶。

NATXT保存相邻波函数重叠差,并不是已经换算好的fs⁻¹耦合。 本接口采用NATXT/(2×dt)得到1/fs;Hefei-NAMD传播程序已经做此换算,不要先把文件除一次、进入程序后再除一次。能级由固定旧接口的Ry换算常数转成eV,不把不同常数末位差解释成物理能级变化。

换体系时,需重新设置元素/NAO数、总能带、价带/导带窗口、电子或空穴、时间步和相位处理;延长并平衡核轨迹后再讨论统计动力学。下一步见电子布居传播。

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

查看配图

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

100%查看原图 ↗