Libxc跨软件实操:SIESTA、CP2K与ORCA怎样调用
三个软件各用一对小体系单点,展示完整输入、显式Libxc选择、输出检查和实际能量对照。
阅读本篇目录
同样写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

图中只比较每个宿主自己的两条实现。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接口说明,并以当前安装版本的输出为准。