Libxc在CP2K与ORCA中的响应计算
固定水分子的完整输入、终端命令、前三个激发态与振子强度,区分Libxc导数能力和宿主响应支持。
阅读本篇目录
在自己的程序中调用Libxc导数,和在CP2K、ORCA中完成响应计算,是两层操作。本篇从一个固定H₂O构型出发,展示显式Libxc输入、激发态计算、输出提取和实算结果。参数查询另见Libxc参数查询与修改,基态选择器另见SIESTA、CP2K与ORCA调用。
1. 整体流程#
先解压,在普通账号中提交:
unzip libxc.zip
cd libxc-parameters-responses-wave267
sbatch job.slurm
运行程序先做局域参数接口对照,然后依次计算:CP2K内置/Libxc PBE、ORCA内置/Libxc PBE、ORCA内置PBE设置PBEsol常数/Libxc PBE设置同一组常数。每对使用完全相同的几何、基组和数值设置,均求三个单重激发态。最后输出:
cat analysis/host-excitations.csv
ls figures
不想重算时,直接阅读reference/analysis/host-excitations.csv与reference/figures/。完整运行请使用另一份解压目录,已有计算目录不会被自动覆盖。
2. CP2K:输入中启用Libxc,再计算响应#
实际软件为CP2K 2026.2,链接Libxc 7.0.0。使用GPW、GTH-PBE赝势、DZVP-MOLOPT-SR-GTH基组,截断400 Ry、相对截断60 Ry。以下是实际完整inputs/cp2k-pbe-libxc/input.inp:
&GLOBAL
PROJECT water
RUN_TYPE ENERGY
PRINT_LEVEL MEDIUM
&END GLOBAL
&FORCE_EVAL
METHOD Quickstep
&PROPERTIES
&TDDFPT
KERNEL FULL
NSTATES 3
MAX_ITER 100
CONVERGENCE [eV] 1.0E-7
&END TDDFPT
&END PROPERTIES
&DFT
BASIS_SET_FILE_NAME BASIS_MOLOPT
POTENTIAL_FILE_NAME GTH_POTENTIALS
&MGRID
CUTOFF 400
REL_CUTOFF 60
&END MGRID
&QS
EPS_DEFAULT 1.0E-12
&END QS
&SCF
EPS_SCF 1.0E-8
MAX_SCF 150
SCF_GUESS ATOMIC
&OT
MINIMIZER DIIS
PRECONDITIONER FULL_SINGLE_INVERSE
&END OT
&END SCF
&POISSON
PERIODIC NONE
PSOLVER MT
&END POISSON
&XC
&XC_FUNCTIONAL
&GGA_X_PBE
&END GGA_X_PBE
&GGA_C_PBE
&END GGA_C_PBE
&END XC_FUNCTIONAL
&END XC
&END DFT
&SUBSYS
&CELL
ABC 12.0 12.0 12.0
PERIODIC NONE
&END CELL
&COORD
O 6.0 6.0 6.0
H 6.9572 6.0 6.0
H 5.760013 6.927297 6.0
&END COORD
&KIND H
BASIS_SET DZVP-MOLOPT-SR-GTH
POTENTIAL GTH-PBE-q1
&END KIND
&KIND O
BASIS_SET DZVP-MOLOPT-SR-GTH
POTENTIAL GTH-PBE-q6
&END KIND
&END SUBSYS
&END FORCE_EVAL
关键有两处:&DFT / &XC下明确选择GGA_X_PBE与GGA_C_PBE;&FORCE_EVAL / &PROPERTIES / &TDDFPT启用KERNEL FULL、三个态和1E-7 eV的迭代收敛设置。本例没有给响应另设一个不同的XC节;其采用同一基态泛函定义。CP2K这里执行Tamm–Dancoff近似的线性响应计算,输入和理论说明见官方TDDFT教程。
内置PBE对照输入只把XC泛函部分换为:
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
单独运行一个目录时,可按以下命令操作。先复制到自己的新目录,再运行:
mkdir cp2k-water
cp inputs/cp2k-pbe-libxc/input.inp cp2k-water/
cd cp2k-water
module load cp2k/2026.2-8173m
ulimit -s unlimited
export OMP_STACKSIZE=256M OMP_NUM_THREADS=2
export LD_LIBRARY_PATH="/public/toolkit/oneapi/2024.2/compiler/2024.2/lib:${LD_LIBRARY_PATH:-}"
"$CP2K_ROOT/bin/cp2k.psmp" -i input.inp -o cp2k.out
实际长任务请在分配到的CPU资源内执行;整包脚本已包含所需环境与核心限制。检查自洽、响应收敛、三个态和正常结束:
grep -E 'FUNCTIONAL\||SCF run converged|TDDFPT run converged|TDDFPT\||PROGRAM ENDED' cp2k.out
不要把TDDFPT Initial Guess中的初猜能级差当成最终激发能。最终结果位于TDDFPT run converged之后,有三个态的激发能、跃迁偶极和振子强度。
3. ORCA:Libxc外部参数也要传给实际计算#
实际使用ORCA 6.1.1及其Libxc 7.0.0。PBE输入选gga_x_pbe与gga_c_pbe;下面给出增加PBEsol常数后的完整inputs/orca-pbesol-libxc/input.inp:
! PBE def2-SVP TightSCF DEFGRID3
%maxcore 1000
%method
Method DFT
Exchange gga_x_pbe
Correlation gga_c_pbe
ExtParamX "_mu" 0.12345679012345679
ExtParamC "_beta" 0.046
end
%tddft
NRoots 3
TDA true
MaxIter 100
end
* xyz 0 1
O 0.0 0.0 0.0
H 0.9572 0.0 0.0
H -0.239987 0.927297 0.0
*
ExtParamX "_mu"与ExtParamC "_beta"使用Libxc实际参数名称。TDA true、NRoots 3分别表示Tamm–Dancoff近似和三个激发态。本例以单重基态水分子为输入,计算单重激发;不含优化、溶剂、振动展宽或自旋轨道耦合。
配套内置对照保留PBE实现,显式设置相同常数:
%method
XMuePBE 0.12345679012345679
CBetaPBE 0.046
end
PBE对照使用XMuePBE=0.2195149727645171与CBetaPBE=0.06672455060314922,对齐Libxc默认值。这里比较的是同一组常数经不同实现进入计算后的结果,不能混用打印时舍入的常数。ORCA的参数输入和响应设置分别见官方DFT手册、官方TDDFT手册。
在自己的新目录中运行:
mkdir orca-water
cp inputs/orca-pbesol-libxc/input.inp orca-water/
cd orca-water
module load orca/6.1.1
/public/software/orca/6.1.1/linux-x86_64-openmpi4.1.8/orca input.inp > orca.out
提取时先看实际Libxc版本、参数表、SCF收敛及正常结束:
grep -E 'libXC version|Functional external parameters|SCF CONVERGED|FINAL SINGLE POINT ENERGY|ORCA TERMINATED NORMALLY' orca.out
grep -A 12 'ABSORPTION SPECTRUM VIA TRANSITION ELECTRIC DIPOLE MOMENTS' orca.out
本例CSV提取电偶极长度形式表中的Energy (eV)和fosc(D2)。不要误取速度形式的fosc(P2),也不要用只保留三位小数的STATE ... eV行代替更完整的光谱表精度。
4. 实际得到什么结果#
下表列出显式Libxc条件的三个最终态。每一行都有配套的同宿主内置对照,结果在主输出打印精度下相同。
| 宿主与参数 | 第1态 / eV | 第2态 / eV | 第3态 / eV | 第1态振子强度 |
|---|---|---|---|---|
| CP2K PBE | 11.12364 | 11.53995 | 13.56778 | 0.00928967 |
| ORCA PBE | 7.333144 | 9.276740 | 9.595631 | 0.017703188 |
| ORCA PBEsol参数 | 7.419821 | 9.367040 | 9.644267 | 0.018060010 |
CP2K总能内置/Libxc之差约2.08524E-6 Hartree;ORCA显式对齐常数后,本例总能差在1E-12 Hartree附近或更小。激发能和振子强度的“一致”指这些输入和输出精度,不表示所有泛函、体系和精度下严格逐位一致。

CP2K使用赝势与GPW/DZVP-MOLOPT-SR-GTH,ORCA使用全电子def2-SVP;这里没有做弥散基组、赝势、网格或激发态数量收敛研究,所以两套结果不能用于跨软件准确性排名或与实验水光谱直接等同。PBEsol水分子只作参数传递演示,不是气相光谱方法推荐。
5. 用工具重新提取、画图#
完整程序包会自动提取。已有计算完成后,再次绘图只需:
source /etc/profile
module load sisl/0.16.4
python analyze.py
python plot.py
输出analysis/host-total-energies.csv、analysis/host-excitations.csv和figures/LIBXC-host-responses.png。脚本使用Python标准库解析实际输出,NumPy与Matplotlib画图;没有用Libxc局域网格值拼出虚假的分子光谱。参考图中用离散谱线展示计算的态,未人为添加展宽峰。
6. 怎样换成自己的体系#
先改坐标、电荷与多重度,检查基组/赝势是否覆盖全部元素;再调整盒子、截断、网格和态数。需要比较内置与Libxc时,每对保持几何、基组、网格、收敛设置和参数相同,先检查能量和SCF,再检查响应是否正常收敛。修改泛函后应重新生成相应基态结果,不能随意沿用另一个泛函的波函数。
本篇证明的是CP2K与ORCA在所列PBE条件下的响应操作,以及ORCA中的PBEsol参数传递。SIESTA基态调用已在跨软件实例提供;VASP、ABACUS、QE等宿主的输入、GPU路径、杂化/非局域项和响应支持需按各自版本判断,不能仅凭Libxc库中有某个编号就推断宿主支持。