ABACUS:波函数到非绝热耦合
用真实水分子短轨迹演示Γ点LCAO波函数、跨时刻重叠、相位连续化与NATXT。
阅读本篇目录
想用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

本例最大耦合约0.0463fs⁻¹。所有快照的CᵀSC与单位矩阵最大差约5.2×10⁻⁹;原生相位/NAC与独立矩阵乘法最大差约4.4×10⁻¹⁶。
NATXT保存相邻波函数重叠差,并不是已经换算好的fs⁻¹耦合。 本接口采用NATXT/(2×dt)得到1/fs;Hefei-NAMD传播程序已经做此换算,不要先把文件除一次、进入程序后再除一次。能级由固定旧接口的Ry换算常数转成eV,不把不同常数末位差解释成物理能级变化。
换体系时,需重新设置元素/NAO数、总能带、价带/导带窗口、电子或空穴、时间步和相位处理;延长并平衡核轨迹后再讨论统计动力学。下一步见电子布居传播。