Libxc专题

Libxc在CP2K与ORCA中的响应计算

固定水分子的完整输入、终端命令、前三个激发态与振子强度,区分Libxc导数能力和宿主响应支持。

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

在自己的程序中调用Libxc导数,和在CP2K、ORCA中完成响应计算,是两层操作。本篇从一个固定H₂O构型出发,展示显式Libxc输入、激发态计算、输出提取和实算结果。参数查询另见Libxc参数查询与修改,基态选择器另见SIESTA、CP2K与ORCA调用。

下载完整输入、运行程序、CSV和原图

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、ORCA三个激发态的能量与振子强度

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库中有某个编号就推断宿主支持。

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

查看配图

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

100%查看原图 ↗