ABACUS 专题

ABACUS 线性响应TDDFT实操

H₂的LR-TDA完整输入、虚轨道/激发态、原生日志提取和独立谱线重建。

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

下载H₂的22个条件、完整输入、原生结果和绘图脚本,解压进入附件根目录,先读取已有数据:

bash analyze.sh

表和数组在reference/analysis,高清图在reference/figures。需要从头重算时,在新的附件目录提交:

sbatch submit.slurm

模板分配1张P100,先顺序运行各条件,再后处理。实时传播使用GPU,线性响应使用同主机的CPU路径;申请了GPU不代表线性响应获得GPU加速。脚本拒绝覆盖已有work,重算请新解压。这是一套含多项控制的演示,整套耗时长于单个小例子。

环境为ABACUS3.10.1模块abacus/3.10.1-p100,GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2、CUDA12.8,1个MPI进程和1线程,双精度;ASE3.29.0环境提供NumPy/SciPy和绘图依赖。不包含Intel Xeon 8173M性能对照。文中的直接计算命令应在已分配的计算资源中执行,不在登录节点运行DFT。

1 本例求解的是LR-TDA#

ABACUS3.10.1的本例线性响应通过ks-lr先做基态SCF,再求粒子–空穴激发矩阵的本征问题;该实现使用Tamm–Dancoff近似(TDA),不要写成完整含正反向耦合的Casida方程或BSE。

H₂结构与实时脉冲例相同,PBE基态、固定原子、10个NAO。主要对照选8个虚轨道、8个激发态;这是有限电子空间,不是已收敛气相实验能级。

2 准备完整输入#

h2-lr-pbe8的完整输入如下。

INPUT_PARAMETERS
suffix tutorial
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
ntype 1
basis_type lcao
nbands 10
ecutwfc 40
scf_thr 1e-7
scf_nmax 100
symmetry -1
gamma_only 0
smearing_method fixed
out_chg 0
precision double
cal_force 0
cal_stress 0
calculation scf
esolver_type ks-lr
device cpu
ks_solver genelpa
nspin 1
nocc 1
nvirt 8
lr_nstates 8
xc_kernel pbe
lr_solver lapack
lr_thr 1e-6
out_wfc_lr 1
abs_wavelen_range 50 300
abs_broadening 0.01
abs_gauge length
ATOMIC_SPECIES
H 1.008 H_ONCV_PBE-1.0.upf
NUMERICAL_ORBITAL
1_H_gga_100Ry_7au_2s1p.orb
LATTICE_CONSTANT
1.8897261258369282
LATTICE_VECTORS
8 0 0
0 8 0
0 0 8
ATOMIC_POSITIONS
Cartesian_angstrom
H
0
2
4 4 3.63 m 0 0 0
4 4 4.37 m 0 0 0
K_POINTS
0
Gamma
1 1 1 0 0 0

nocc 1是一条双占据空间轨道;nvirt 8选8条虚轨道,lr_nstates 8求8个激发态,它们与基态nbands 10含义不同。xc_kernel pbe指定响应核;lr_solver lapack直接构造并对角化这个很小的粒子–空穴矩阵。

abs_gauge length用于局域分子的跃迁偶极,abs_wavelen_range 50 300单位nm;abs_broadening 0.01是Ry,约0.13606eV,并不是0.01eV。它是复频率中的η,不能直接当作任意谱线的高斯标准差。

3 从一个更小的4虚轨道例开始#

在新附件目录、已分配的计算资源中运行:

module purge
module load abacus/3.10.1-p100
python3 -B setup.py
python3 -B run_case.py h2-lr-pbe4
head -n 4 work/cases/h2-lr-pbe4/OUT.tutorial/absorption.dat

先看running_scf.log中的基态收敛,再定位Excitation Energy (Ry, eV)跃迁表,以及后面的主要占据–虚轨道跃迁。表里包含原生激发能、x/y/z跃迁偶极和程序定义的振子强度;主要跃迁表只列出较大分量,不是完整激发矢量。

当前构建的完整激发矢量文件导出不可用,虽然有效INPUT可显示out_wfc_lr 1,也不要据此假定Excitation_Amplitude文件已经生成。本教程直接使用实际日志跃迁表和absorption.dat,不依赖缺失的文件,不把spectrum重读空文件写成可用操作。

4 用工具提取激发能并独立重建谱#

python - <<'PY'
import numpy as np
z=np.load('reference/analysis/response-trajectories.npz')
for n in ['h2-lr-pbe4','h2-lr-pbe8']:
    print(n,'原生激发能/eV',z[n+'__excitation_eV'])
    print('原生振子强度',z[n+'__native_oscillator'])
PY

本例PBE响应核的第一激发态:4虚轨道为14.1091eV,8虚轨道为14.0222eV。是整个有限模型的TDA激发,不是把Kohn–Sham HOMO–LUMO差当光学激发。

LR虚轨道、核、展宽与独立重建

analyze_lr.py从原生表读取Ω和振子强度,用该版复频率分母((ω+iη)²−Ω²)及8π/V前因子独立重建absorption.dat。原生表有有限有效数字,因此重建允许相应舍入误差,不宣称逐字节相同。日志中振子强度定义和求和警示也按该版保留,没有重新缩放到一个看起来“满足求和规则”的值。

原生吸收文件是100个波长等距点,因此能量不等距且从高能向低能排列。需要能量积分时先按能量排序,并按实际网格积分,不要用一个固定ΔE乘所有点。

参考3.10.1线性响应参数与原生谱线和振子强度实现。继续线性响应数值控制。

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

查看配图

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

100%查看原图 ↗