GROMACS 加盐与电荷中和
实际演示SOL选择、整数离子数、中和反离子、三/四点水加盐和水模型配套离子参数。
阅读本篇目录
加盐包含两个要分清的操作:按浓度加入盐对,以及用反离子补偿溶质净电荷。本篇用实际水盒和带+1电荷的Ala-Ala展示离子数量、拓扑更新和后续最小化流程。
1. 离子参数与水模型一起选#
在本包AMBER14SB目录里,离子文件按水模型区分:
| 水模型 | 离子文件 |
|---|---|
| TIP3P | amber14sb.ff/ions_tip3p.itp |
| TIP4P-Ew | amber14sb.ff/ions_tip4pew.itp |
| SPC/E | amber14sb.ff/ions_spce.itp |
| OPC | amber14sb.ff/ions_opc.itp |
含溶质时,原生 pdb2gmx 按选择的水模型写入对应include;自己写纯水拓扑也要使用相应文件。不要假定每个力场都只有一个 ions.itp,也不要仅因Na、Cl名字相同就跨力场混用参数与组合规则。
实际TIP3P加盐拓扑
#include "amber14sb.ff/forcefield.itp"
#include "amber14sb.ff/tip3p.itp"
#include "amber14sb.ff/ions_tip3p.itp"
[ system ]
Native water model and ion-count example
[ molecules ]
SOL 880
NA 2
CL 2
2. 生成给genion使用的输入#
在一个独立工作目录里,先完成溶剂化,再执行:
gmx grompp -f ions.mdp -c solv.gro -p topol.top -o ions.tpr
printf 'SOL\n' | gmx genion -s ions.tpr -o ions.gro \
-p topol.top -pname NA -nname CL -conc 0.15 \
-neutral -seed 2612304
选择的是 SOL 这一组完整溶剂分子。每加入一个Na⁺或Cl⁻,本例都会替换一个水分子;四点水也按完整的四位点水分子替换,不是随便删除一个坐标。
这里的 ions.tpr 只用于离子替换,不执行动力学:
integrator = steep
nsteps = 1
cutoff-scheme = Verlet
coulombtype = Cut-off
rcoulomb = 0.9
rvdw = 0.9
pbc = xyz
之后另用已经中和的 ions.gro 生成最小化和生产TPR,真正MD使用PME。不要拿这个仅供加离子预处理的TPR当作生产输入。
资料包里,选择对应条件即可自动完成上述步骤以及后续EM/NVT/NPT/生产:
bash run.sh salt-015-tip3p
bash run.sh salt-100-tip3p
bash run.sh salt-015-tip4pew-matched
3. 目标0.15M为什么不是精确0.15M#
本例起始盒体积为27nm³,起点还没有盐离子。目标盐对数约为 浓度×0.602214076×体积nm³:
python3 -c 'print(0.15 * 0.602214076 * 27)'
结果约2.439,离子对数只能取整数,实际加入2对。起始盒中的实际NaCl对浓度约0.1230M;NPT改变盒体积后,数量不变,浓度还会随实际体积变化。小体系不能表示任意精确的目标浓度。

| 实际条件 | 溶质电荷e | 目标NaCl M | Na⁺ | Cl⁻ | 生产盒中NaCl对的浓度M |
|---|---|---|---|---|---|
salt-015-tip3p |
0 | 0.15 | 2 | 2 | 0.1235 |
salt-100-tip3p |
0 | 1 | 16 | 16 | 1.0051 |
salt-015-tip4pew-matched |
0 | 0.15 | 2 | 2 | 0.1218 |
alaala-opls-positive |
1 | 0 | 0 | 1 | 0.0000 |
alaala-opls-positive-salt |
1 | 0.15 | 2 | 3 | 0.1226 |
表中“盐对浓度”按新增NaCl对数计算,中和用的额外反离子单独看。已有离子的体系应先核对现有数量,再决定新增多少。
4. 带+1电荷时,为什么Cl比Na多一个#
bash run.sh alaala-opls-positive
bash run.sh alaala-opls-positive-salt
本例Ala-Ala选择NH3⁺和COOH端基,总电荷为+1。只中和时加入一个Cl⁻;再要求0.15M盐时,加入2个Na⁺、3个Cl⁻,其中一枚Cl⁻用于补偿溶质电荷。-neutral的反离子与盐对数量不能混为一谈。
tail -n 7 reference/alaala-opls-positive-salt/topol.top
head -n 2 reference/alaala-opls-positive-salt/ions.gro
bash analyze.sh
程序会在MD前检查溶质电荷与指定状态、离子计数和全体系电荷;遇到不一致应先修正模型,不能靠多加离子掩盖错误的端基或拓扑。
5. 同样的Na、Cl,参数可能不同#
| TIP4P-Ew示例离子参数 | Na的σ nm | Na的ε kJ/mol | Cl的σ nm | Cl的ε kJ/mol |
|---|---|---|---|---|
| 历史通用离子参数对照 | 0.332840 | 0.011590 | 0.440104 | 0.418400 |
| AMBER14SB水模型配套参数 | 0.218448 | 0.704743 | 0.491776 | 0.048792 |
这些是本次原生展开拓扑里的实际参数。salt-015-tip4pew保留通用旧离子参数作输入差异对照;本篇四点水加盐的主要流程用 salt-015-tip4pew-matched,不把通用参数对照当作TIP4P-Ew推荐组合。

图中的10ps密度曲线仅说明实际输出,不足以判断哪套参数更准确。研究中应按所选水模型的参数化文献选择离子集和非键处理,并做足够的平衡、尺寸与采样检查。
官方命令:gmx genion。
下载、提交与结果位置#
下载全部输入、真实轨迹、拓扑、能量表和五张图的绘图脚本。解压进入资料包目录,先查看现成结果:
bash analyze.sh
图片在 reference/figures,总表在 reference/analysis/conditions.csv,各个实际条件的完整文件在 reference/条件名。
从头运行一个水盒示例:
sbatch run.slurm
squeue -u "$USER"
run.slurm 默认选择 water-tip3p。需要其他条件时,修改其中的 CASE_NAME 一行;所有条件名见 CASES.json。新结果写入 work/条件名。完整18条件对照可在新解压目录执行 bash submit.sh;只生成脚本先看、不提交,用 bash submit.sh --dry-run。已有工作目录不会被覆盖。
模板默认核时分区 gpu-8p100-hs,一张 P100、两个 CPU 核;套餐用户按自己可用的分区修改 #SBATCH --partition,例如 P100 套餐分区 gpu-8p100-tc。正文中的单条 bash run.sh ... 仅在已分配的任务资源里使用,不在登录/管理节点运行 MD。
统一环境:gromacs/2026.4-p100-threadmpi,GROMACS2026.4、GNU13.3、CUDA12.8、FFTW3.3.10、thread-MPI/OpenMP。建模、预处理和最小化使用 CPU;动力学阶段短程非键和 PME 使用 GPU,更新/约束使用 CPU。提取使用原生 GROMACS,数值与结构处理使用 NumPy、MDAnalysis2.9.0,图片由 Matplotlib 生成。
本组每个条件都从建模开始,完成最小化、5ps NVT、10ps NPT和20ps生产NVT。它们是短时操作实例;固定0.9nm截断、DispCorr=no和短平衡不用于给水模型、力场精度或性能排名。正式研究按所选参数集文献设置相容的截断/长程处理,并充分平衡与采样。