示例 16:半经验方法(GFN-xTB、DFTB)与 QM/MM¶
配套教程:第16章 QM/MM 与半经验方法(xTB/DFTB)
目的¶
用几个小体系演示 CP2K 中三类“比 DFT 便宜”的计算方式:
| 输入 | 体系 | 方法 | 演示内容 |
|---|---|---|---|
ethanol_gfn1_native.inp |
孤立乙醇分子 | CP2K 原生 GFN1-xTB | METHOD XTB、SCF_GUESS MOPAC、OT,GEO_OPT |
ice_gfn2_tblite_kpoints.inp |
六方冰(4 个 H2O/胞,质子有序模型) | tblite 的 GFN2-xTB + k 点 | GFN_TYPE TBLITE、&TBLITE METHOD GFN2、4×4×2 MP 网格 |
dftb_md.inp |
125 个水分子,15.54 Å 立方盒子 | SCC-DFTB(CP2K 自带 DFTB/scc 参数) |
NVT(CSVR)MD,周期性 Ewald |
water_qmmm_tip3p.inp |
1 个 QM 水 + 124 个 MM 水 | PBE/DZVP(GPW)+ 输入内定义的 TIP3P 类力场 | METHOD QMMM、E_COUPL GAUSS、周期性 QM/MM、短程 NVT MD |
water_qmmm_amber.inp |
同上 | PBE/DZVP + AMBER prmtop | PARMTYPE AMBER、CONN_FILE_FORMAT AMBER、MM_KIND OW/HW |
文件说明¶
| 文件 | 说明 |
|---|---|
ethanol.xyz |
乙醇初始结构(取自 ASE 的 g2 分子数据集) |
ethanol_gfn1_native.inp |
原生 GFN1-xTB 几何优化;适用于 2023.x–2026.2 |
ice_gfn2_tblite_kpoints.inp |
tblite GFN2-xTB + k 点;需要编译时启用 tblite。默认按 2026.2 语法(GFN_TYPE TBLITE + ACCURACY),2025.2/2026.1 用 -E NEWTB=0;结构优化建议 ≥ 2026.1 |
dftb_md.inp |
SCC-DFTB 水盒子 MD(2000 步 × 0.5 fs) |
water125.xyz |
125 个水分子的理想化初始结构(5×5×5 格点 + 随机取向,密度约 0.997 g/cm³),由本仓库作者用脚本生成 |
water125.pdb |
同一结构的 PDB 版本(残基名 WAT,原子名 O/H1/H2),供 tleap 使用 |
water_qmmm_tip3p.inp |
自包含的 QM/MM MD 输入(MM 参数直接写在输入里,无需外部文件) |
tleap_water.in |
tleap 脚本:由 water125.pdb 生成 water125.prmtop 与 water125.inpcrd |
water_qmmm_amber.inp |
读取 AMBER 拓扑的 QM/MM 单点能 + 力 |
job_slurm.sh |
Slurm 作业脚本:依次运行各输入;没有 tblite 时自动跳过 GFN2 示例,没有 prmtop 时跳过 AMBER 示例 |
运行步骤¶
cd CP2K/examples/16-qmmm-xtb
export CP2K_DATA_DIR=/path/to/cp2k/data # xTB/DFTB 参数、dftd3.dat、UZH 基组都在这里
# 0) 确认可执行文件的功能
cp2k.psmp -v | grep -i cp2kflags # 看是否含 tblite
ls "$CP2K_DATA_DIR"/xTB1_parameters "$CP2K_DATA_DIR"/DFTB/scc/scc_parameter
# 1) 语法检查
for f in *.inp; do cp2k.psmp -c "$f" > /dev/null && echo "$f OK"; done
# 2) 半经验计算(几秒到几分钟)
cp2k.psmp -i ethanol_gfn1_native.inp -o ethanol_gfn1_native.out
cp2k.psmp -i ice_gfn2_tblite_kpoints.inp -o ice_sp.out # 2026.2
# cp2k.psmp -E NEWTB=0 -i ice_gfn2_tblite_kpoints.inp -o ice_sp.out # 2025.2 / 2026.1
cp2k.psmp -E RUN=GEO_OPT -i ice_gfn2_tblite_kpoints.inp -o ice_opt.out # 可选:结构优化
mpirun -np 8 cp2k.psmp -i dftb_md.inp -o dftb_md.out
# 3) QM/MM
mpirun -np 8 cp2k.psmp -i water_qmmm_tip3p.inp -o water_qmmm_tip3p.out
# 4) AMBER 拓扑版本(需要 AmberTools)
tleap -f tleap_water.in # 生成 water125.prmtop / water125.inpcrd
mpirun -np 8 cp2k.psmp -i water_qmmm_amber.inp -o water_qmmm_amber.out
# 或者一次性提交
sbatch job_slurm.sh
预期结果 / 如何检查¶
grep -c "PROGRAM ENDED AT" *.out # 每个输出应为 1
grep "xTB| Parameter file" ethanol_gfn1_native.out # 原生 xTB 读取的参数文件
grep "GEOMETRY OPTIMIZATION COMPLETED" ethanol_gfn1_native.out
grep "BRILLOUIN| List of Kpoints" ice_sp.out # k 点确实生效
grep "ENERGY| Total FORCE_EVAL" ice_sp.out dftb_md.out water_qmmm_amber.out | tail -5
tail -3 water125_dftb_nvt-1.ener # 列:步数 时间 Kin Temp Pot Cons Qty UsedTime
grep -i "QM/MM LINKS" water_qmmm_tip3p.out # 本例没有切断化学键,应显示 NO QM/MM LINKS DETECTED
tail -3 water_qmmm_tip3p-1.ener
判断标准:
- 乙醇优化在几十步内收敛(
GEOMETRY OPTIMIZATION COMPLETED),C–O、O–H 键长与初始结构相差不大; - 冰的 GFN2 单点能正常结束,
ATOMIC FORCES中 H 原子受力最大(H 位置只是按规则放置的); - DFTB 与 QM/MM 的 MD:
-1.ener中温度在 300 K 附近波动;由于初始盒子是理想化格点,开始的几百步温度和势能会有明显弛豫,应当舍弃; - QM/MM 输出开头列出 MM 点电荷(
MM POINT CHARGES GENERATING THE QM/MM ELECTROSTATIC POTENTIAL),以及QM_KIND/MM_KIND信息。
本仓库没有附带参考输出;能量、步数与耗时取决于 CP2K 版本、编译选项和并行设置。
注意事项¶
GFN_TYPE自 2025.1 起才有(2025.1–2026.1 中是整数 0/1,选原生 GFN0/GFN1);tblite 自 2025.2 起可用:2025.2/2026.1 中只写&TBLITE段即启用,2026.2 中必须写GFN_TYPE TBLITE,且&TBLITE段单独出现会报The XTB/TBLITE section requires XTB/GFN_TYPE TBLITE。2024.x 及更早只有原生 GFN1(不写GFN_TYPE);- 周期性的原生 xTB/DFTB 在 ≤ 2026.1 中必须写
DO_EWALD T;2026.2 起由&CELL PERIODIC自动决定,DO_EWALD被标为 deprecated; water125.xyz不是平衡结构。正式的 QM/MM 研究应先用纯 MM(METHOD FIST)做能量最小化与 NVT/NPT 平衡,再切换到 QM/MM;water_qmmm_tip3p.inp中 Lennard-Jones 的EPSILON用默认单位 K(0.1521 kcal/mol ≈ 76.54 K),键与角的力常数用原子单位,换算见输入文件头部注释;- QM 盒子(
&QMMM &CELL)必须能装下 QM 电子密度且小于 MM 盒子;本例 QM 只有一个水分子,10 Å 足够。QM 区变大后要同步增大,并重新检查CUTOFF; job_slurm.sh中的环境设置(module load、source cp2k_env)请按你的集群修改。