Libxc专题

Libxc跨软件实操:SIESTA、CP2K与ORCA怎样调用

三个软件各用一对小体系单点,展示完整输入、显式Libxc选择、输出检查和实际能量对照。

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

同样写PBE,不同软件可能走不同实现;同一软件的内置与Libxc默认常数也可能略有区别。本例分别在SIESTA、CP2K、ORCA中明确选择Libxc,并和同一宿主的标准PBE路径对照。先跑通小体系,再换成自己的结构。

下载六个条件的输入生成器、运行和绘图程序

1. 提交六个小条件#

将程序包保存为libxc-hosts.zip:

unzip libxc-hosts.zip -d libxc-hosts
cd libxc-hosts
sinfo
sbatch job.slurm
squeue -u "$USER"

模板使用CPU分区,提交前确认分区可用;实际最多使用4个物理核心。流程先完成SIESTA两项,再做CP2K两项,最后做ORCA两项。完成后查看:

cat analysis/host-energies.csv
cat analysis/SUMMARY.json
ls figures

SIESTA5.4.2、CP2K2026.2采用Intel oneAPI2024.2、Intel MPI2021.13和MKL;ORCA6.1.1采用官方CPU预编译程序与OpenMPI4.1.8环境,本例为串行单点。三个宿主本例对应Libxc7.0.0:ORCA在输出直接报告版本,SIESTA动态依赖和CP2K编译配置给出各自的库来源。独立接口包中的6.2.2或7.1.2不能直接替换这些宿主的链接库。

2. SIESTA:用XC.mix明确选择交换与关联#

Si采用2原子原胞、DZP基组、150Ry网格与4×4×4k点。标准路径使用XC.functional GGA、XC.authors PBE;显式Libxc路径将这两行替换为:

%block XC.mix
2
GGA LIBXC-101 1.0 0.0
GGA LIBXC-130 0.0 1.0
%endblock XC.mix

101是PBE交换,130是PBE关联;两个权重分别对应交换和关联。不要把两个分量都按完整交换关联再叠加一次。

展开:SIESTA的完整Libxc输入
SystemLabel si
SystemName Own Si2 host Libxc implementation comparison
NumberOfAtoms 2
NumberOfSpecies 1
LatticeConstant 1.0 Ang
%block ChemicalSpeciesLabel
 1 14 Si
%endblock ChemicalSpeciesLabel
%block LatticeVectors
0.000000000000 2.715000000000 2.715000000000
2.715000000000 0.000000000000 2.715000000000
2.715000000000 2.715000000000 0.000000000000
%endblock LatticeVectors
AtomicCoordinatesFormat Ang
%block AtomicCoordinatesAndAtomicSpecies
0.000000000000 0.000000000000 0.000000000000 1
1.357500000000 1.357500000000 1.357500000000 1
%endblock AtomicCoordinatesAndAtomicSpecies
%block XC.mix
2
GGA LIBXC-101 1.0 0.0
GGA LIBXC-130 0.0 1.0
%endblock XC.mix
PAO.EnergyShift 100 meV
PAO.BasisSize DZP
MeshCutoff 150 Ry
ElectronicTemperature 300 K
MaxSCFIterations 300
MinSCFIterations 3
SCF.DM.Converge true
SCF.DM.Tolerance 1.e-7
SCF.FreeE.Converge true
SCF.FreeE.Tolerance 1.e-6 eV
DM.MixingWeight 0.1
DM.NumberPulay 6
DM.UseSaveDM false
SaveHS true
SaveRho true
WriteDM true
WriteCoorXmol true
%block kgrid_Monkhorst_Pack
 4 0 0 0.0
 0 4 0 0.0
 0 0 4 0.0
%endblock kgrid_Monkhorst_Pack

程序从集群现有PseudoDojo目录复制Si.psml。下面命令用于在已申请的计算资源中单独检查该条件,自动整包工作流已经执行相同操作:

module purge
module load siesta/5.4.2-8173m-mpi
cd cases/siesta-libxc
mpirun -np 2 siesta < input.fdf > siesta.out
grep 'xc_check:' siesta.out
grep 'siesta: Etot' siesta.out | tail -1
cd ../..

应看到主计算的xc_check: GGA LIBXC-00101和LIBXC-00130。仅搜索Using libxc ids不够:PSML赝势读取过程也可能打印这句话,即使主计算仍选择标准PBE。要把实际XC设置、主计算检查行和正常收敛一起看。

本例标准路径总能量−229.850662eV,显式Libxc为−229.850629eV,相差0.000033eV/晶胞。两条路径使用同一赝势、结构和数值参数,没有改变物理体系。

3. CP2K:分开写GGA_X_PBE和GGA_C_PBE#

本例为固定水分子,非周期12Å盒、MT泊松求解,使用DZVP-MOLOPT-SR-GTH、GTH-PBE赝势、400Ry截断和60Ry相对截断。内置路径是:

&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL

显式Libxc路径是:

&XC_FUNCTIONAL
 &GGA_X_PBE
 &END GGA_X_PBE
 &GGA_C_PBE
 &END GGA_C_PBE
&END XC_FUNCTIONAL
展开:CP2K水分子的完整Libxc输入
&GLOBAL
 PROJECT water
 RUN_TYPE ENERGY
 PRINT_LEVEL MEDIUM
&END GLOBAL
&FORCE_EVAL
 METHOD Quickstep
 &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

在已申请的CPU资源内单独运行:

module purge
module load cp2k/2026.2-8173m
ulimit -s unlimited
export OMP_STACKSIZE=256M OMP_NUM_THREADS=2
cd cases/cp2k-libxc
cp2k.psmp -i input.inp -o cp2k.out
grep -E 'GGA_X_PBE|GGA_C_PBE|SCF run converged|ENERGY\|' cp2k.out
cd ../..

栈设置只对当前进程及其子进程生效,整包启动器已包含这些设置。输出应列出两个Libxc分量,并有SCF收敛和程序正常结束信息。内置与Libxc的总能量分别约−17.21954692317446和−17.21954483793446Eh,相差约2.08524e-6 Eh。不要把两条实现的最后几位差异直接解释成材料物理效应。

4. ORCA:先对齐默认常数,再比较实现#

显式Libxc输入在%method中分别选择交换和关联:

! PBE def2-SVP TightSCF DEFGRID3
%maxcore 1000
%method
 Method DFT
 Exchange gga_x_pbe
 Correlation gga_c_pbe
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
*
module purge
module load orca/6.1.1
cd cases/orca-libxc
orca input.inp > orca.out
grep -E 'libXC version|Functional name|FINAL SINGLE POINT' orca.out
cd ../..

本例使用def2-SVP、DEFGRID3和TightSCF。ORCA输出直接报告Libxc7.0.0及分量的外部参数。

默认内置PBE的μ为0.21952、β为0.066725,而Libxc对应默认值为0.2195149727645171和0.06672455060314922。直接比较默认设置时,本例能量差约1.40936e-5 Eh。为比较实现而对齐常数,在内置PBE对照目录加入:

%method
 XMuePBE 0.2195149727645171
 CBetaPBE 0.06672455060314922
end

对齐后,两条路径的本例总能量均为−76.272076092623Eh,在输出精度内一致。这个操作是明确对齐本来略有不同的参数;实际研究应记录选用的完整参数,不能为了得到相同结果随意修改泛函。

5. 汇总结果与画图#

module purge
module load sisl/0.16.4
python analyze.py

自建水分子结构与各宿主内部的PBE实现对照

图中只比较每个宿主自己的两条实现。SIESTA使用赝势局域轨道,CP2K为赝势GPW,ORCA为全电子分子基组,绝对能量零点和基组不同,不能跨软件拿总能量大小排序。水分子和Si都没有在这里做结构优化或系统收敛测试。

6. 换泛函前,先查库与宿主各支持什么#

使用入口 本文实际操作 继续选择时要确认
VASP独立Libxc CPU分支 既有Si与水教程及r²SCAN输入 使用对应模块与INCAR入口,不把CPU分支当作GPU分支
SIESTA5.4.2 XC.mix的PBE交换/关联、Si2自洽单点 族名、编号、权重、赝势一致,主计算输出确认XC选择
CP2K2026.2 显式两个Libxc分量、水单点 杂化的HF与截断等仍须在宿主正确设置,不能只靠Libxc名称
ORCA6.1.1 Exchange/Correlation、水单点、PBE常数对齐 官方接口支持τ相关meta-GGA,但不支持依赖密度拉普拉斯的meta-GGA;非局域项按宿主手册选择
自编C程序 完整编号与导数能力表 按当前版本的能力标志分配数组并请求导数;局域返回值不替代宿主自洽或非局域积分

本篇演示PBE调用流程,不把它扩展为每个宿主的所有泛函、所有响应性质都完成了独立计算。继续看SIESTA输入参考、CP2K XC输入参考与ORCA的Libxc接口说明,并以当前安装版本的输出为准。

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

查看配图

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

100%查看原图 ↗