GROMACS专题

GROMACS 加盐与电荷中和

实际演示SOL选择、整数离子数、中和反离子、三/四点水加盐和水模型配套离子参数。

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

加盐包含两个要分清的操作:按浓度加入盐对,以及用反离子补偿溶质净电荷。本篇用实际水盒和带+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推荐组合。

不同离子参数和真实短时NPT输出

图中的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和短平衡不用于给水模型、力场精度或性能排名。正式研究按所选参数集文献设置相容的截断/长程处理,并充分平衡与采样。

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

查看配图

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

100%查看原图 ↗