CP2K 跃迁偶极与振子强度
长度和速度形式的实算对照、单位、强度公式与有限基组边界。
阅读本篇目录
电子激发的亮暗不仅看能量,还看跃迁矩阵元与振子强度。本篇沿用同一H₂O结构和单重态TDDFPT,只修改偶极算符形式,说明怎样读取输出、核对强度定义,以及怎样识别有限基组影响。
下载完整输入、实际日志、数据和绘图脚本,解压后进入run.sh所在目录。采用鸢算科技CP2K2026.2 P100双精度构建(GNU13.3、MPICH5.0.1、CUDA12.9、OpenBLAS0.3.33、ScaLAPACK2.2.3),每次一个MPI、四个OpenMP线程、一张P100;分析ASE3.29.0。
1 提交这一组#
sbatch submit.slurm levels
这是核时P100模板。套餐用户用yskit选择所属分区并生成自己的脚本,保留已分配资源中的 bash run.sh levels。不要在登录节点直接计算。同组条件依次使用这一张GPU;若分开提交,每个条件请新解压一份,避免覆盖已有work。
脚本按“读取固定结构 → 自洽基态 → 激发或传播 → 提取 → 画图”运行。inputs可修改,reference保存本文真实结果,work是你的新结果。
2 修改DIPOLE_FORM#
默认输入使用VELOCITY。长度形式条件在TDDFPT中增加:
&PROPERTIES
&TDDFPT
NSTATES 6
KERNEL FULL
CONVERGENCE 1.0E-7
&DIPOLE_MOMENTS
DIPOLE_FORM LENGTH
REFERENCE COM
&END DIPOLE_MOMENTS
&END TDDFPT
&END PROPERTIES
本例非周期分子可以使用长度形式。不要把该块不加判断地套在周期晶体;周期边界的算符选择和物理定义不同。完整文件在 inputs/water-singlet-length/input.inp,其他电子参数与垂直激发教程相同。
3 先看日志写的形式,再看数值#
grep -A 11 'Transition dipoles calculated' work/cases/water-singlet-full/output.log
grep -A 11 'Transition dipoles calculated' work/cases/water-singlet-length/output.log
cat work/analysis/water-singlet-length.csv
CSV列顺序是态编号、激发能eV、三个跃迁向量分量和无量纲振子强度。虽然原生表头统一写transition dipole,速度形式中的算符矩阵元与长度形式不能直接用同一个公式相乘。
在本例采用的原子单位中,长度形式是 f=(2/3)×ΔE×|r|²,速度形式是 f=(2/3)×|v|²/ΔE。ΔE先由eV除以27.211386245981换成Hartree,不能把eV直接代入。公开analyze.py按日志声明的形式分别计算并核对。
4 同样的能量,不同的强度#
| 单重态 | 激发能/eV | 速度形式f | 长度形式f |
|---|---|---|---|
| 1 | 10.97689 | 0.00918784 | 0.0112231 |
| 2 | 11.38214 | 4.61598e-20 | 7.68028e-20 |
| 3 | 13.45041 | 0.0485108 | 0.0719278 |
| 4 | 13.98550 | 0.0418277 | 0.0650516 |
| 5 | 16.45814 | 0.00535821 | 0.000167926 |
| 6 | 17.32091 | 0.198669 | 0.275311 |

两种算符没有改变激发本征值,但本例的振子强度存在明显差异。要提高可比性,需要改进基组、弥散空间和数值参数;不能挑选其中更像实验的数值就宣布收敛。非常暗的第二态接近数值零,不适合用相对百分比放大比较。
本包只有六个态,振子强度之和不是全谱求和规则检查。谱线展宽也只是展示参数,不能用它掩盖不同方法或不同基组的差异。
提取与重画#
module load ase/3.29.0
python analyze.py work
python plot_results.py work
ls work/analysis
ls work/figures
只看本文数据,把work换成reference。CSV保留原始单位,JSON区分电子激发和时间响应;图均由这些实际数值生成。改变体系后,先检查基组、赝势、几何、电子自旋、边界与SCF,再讨论激发态结果。
定义与适用条件见CP2K DIPOLE_MOMENTS手册。