Moltemplate专题

Moltemplate AMBER参数转换与improper实例

从自定义FRCMOD生成LT与四原子模型,说明半径转换、自动拓扑、improper顺序和LAMMPS能量检查。

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

使用集群 Moltemplate 2.22.5 / Python 3.11,LAMMPS 30Sep2026 的CPU版本,编译环境为oneAPI 2024.2、Intel MPI/MKL。本例使用自己定义的教学参数和坐标,帮助理解文件与单位转换,不是完整GAFF参数,也不是已经验证的真实分子模型。

下载输入、实际结果和绘图脚本,保存为 example.zip:

python3 -m zipfile -e example.zip .
cd moltemplate-amber-improper-examples
bash results.sh
bash plot.sh

reference-results 保存实际生成的DATA、输入片段、能量和力;reference-figures 是图片。先看这些结果不需要重新计算。

1. 准备一个小参数文件#

资料包的 inputs/toy.frcmod 内容如下。这里只用了c3、h1两个标签;这些标签并不表示已经为真实分子完成GAFF分型或电荷拟合。

Own teaching parameters; not production GAFF
MASS
c3 12.011 0.0
h1 1.008 0.0

BOND
c3-h1 300.0 1.09

ANGLE
h1-c3-h1 40.0 120.0

DIHE
X -c3-c3-X  1 0.3 180.0 2.0

IMPROPER
h1-h1-c3-h1 1.0 180.0 2.0

NONBON
c3 1.9 0.1
h1 1.2 0.02


MASS给质量;BOND给键力常数和平衡键长;ANGLE给角力常数和平衡角;DIHE、IMPROPER给相应周期参数;NONBON给半径与ε。实际使用时应从适用、合法且完整的参数来源取得数据,不能用本例参数直接做材料结论。

2. 将FRCMOD转换为LT#

Moltemplate安装包包含实验性的 amber2lt 模块。本集群2.22.5中的模块标注版本为0.2.1。以下短操作只转换文本:

source ./env.sh
mkdir -p manual
cp inputs/* manual/
cd manual
python -m moltemplate.amber2lt --in toy.frcmod --out toy-forcefield.lt --name ToyFF
grep -E '(pair_coeff|bond_coeff|angle_coeff|dihedral_coeff|improper_coeff)' toy-forcefield.lt

转换得到c3的ε=0.1 kcal/mol、σ=3.385415128933289 Å,h1的ε=0.02 kcal/mol、σ=2.138156923536814 Å。

这里的AMBER半径是Rmin/2,LAMMPS LJ参数是零点距离σ。相同类型的一对粒子满足 σ=2×(Rmin/2)×2^(−1/6),不能把1.2直接填成σ。LJ公式与σ含义见 LAMMPS LJ官方说明。

转换后的默认非键设置包含长程静电。下面为了单独看键合项,会明确关闭它;原始转换文件保留不改。真实带电体系仍需完整设置非键、混合规则、1–4缩放和长程求解。

3. 写坐标和三条键,让程序生成角与improper#

system.lt为:

import "toy-forcefield.lt"
Branch inherits ToyFF {
 write("Data Atoms") {
  $atom:c $mol:. @atom:c3 0.0 0.0 0.0 0.0
  $atom:h1 $mol:. @atom:h1 0.0 1.1 0.0 0.0
  $atom:h2 $mol:. @atom:h1 0.0 -0.55 0.95 0.0
  $atom:h3 $mol:. @atom:h1 0.0 -0.55 -0.9 0.25
 }
 write("Data Bond List") {
  $bond:b1 $atom:c $atom:h1
  $bond:b2 $atom:c $atom:h2
  $bond:b3 $atom:c $atom:h3
 }
}
b = new Branch
write_once("Data Boundary") {
 -10 10 xlo xhi
 -10 10 ylo yhi
 -10 10 zlo zhi
}

中心原子1与原子2、3、4相连。只显式写三条键,类型规则会生成三条角和一条improper。不需要手工再把同一组相互作用写第二遍。

moltemplate.sh system.lt
cat system.data
cat system.in.settings
cd ..

实际输出为 4原子、3键、3角、0普通二面角、1条improper。参数文件虽然含普通二面角系数,这个支化图中没有相应四原子链,因此本例并未计算该普通二面角的能量。

四原子实际结构与键合能量分解

生成的improper原子顺序为 2 3 1 4。这是本转换规则 gaff_imp.py 使用的中心原子第三位约定,不能把这一顺序当成所有improper势的通用约定。本例 cvff 的角φ按IJK与JKL两个平面定义,能量为 K[1+d cos(nφ)];本组K=1、d=−1、n=2。自动反应等其他操作的对称性约定还需另查 cvff官方说明。

4. 在已分配资源中计算一次能量与力#

整套重做可以在CPU队列可用时提交 sbatch job.slurm,或在自己已经获得的兼容CPU资源中执行 bash run.sh。所选模块需要AVX512兼容CPU;不要在P100节点的CPU上使用这个8173M构建版本。

sbatch job.slurm

下载包里的脚本申请CPU整节点,但本小例子只运行一个LAMMPS进程。work必须不存在,以避免覆盖上一次结果。脚本会依次转换参数、生成DATA、运行键合单点、运行LJ二聚体单点。

键合单点的关键输入是:

include system.in.init
read_data system.data
include system.in.settings
kspace_style none
pair_style zero 10.0
pair_coeff * *
thermo 1
thermo_style custom step pe ebond eangle edihed eimp evdwl ecoul elong
thermo_modify format float %.16g
run 0

run 0只计算当前坐标的能量和力,不推进MD,也没有做结构优化。pair_style zero是为了隔离键合参数转换;若删掉这一覆盖,模型的含义就不同了。

本次实际结果(kcal/mol):

项 能量
键 0.05879550692838813
角 0.06934077321626245
improper 0.1356225977636367
总势能 0.2637588779082873

角能量公式使用弧度;输入的平衡角仍按度填写。全部12个力分量与独立能量差分对照,最大绝对差约 1.06×10⁻⁹ kcal/(mol·Å)。

5. 再看半径转换是否落到正确的LJ能量#

第二个例子只有两个无键粒子,距离2.7 Å,使用转换后的h1参数:

units real
atom_style atomic
read_data dimer.data
pair_style lj/cut 10.0
pair_coeff 1 1 0.02 2.138156923536814
run 0

实际势能 −0.01486449787705693 kcal/mol,原子1的x方向力为 +0.02221819640713555 kcal/(mol·Å),原子2相反。这是一个单独的无键LJ模型,不是前面支化模型的非键能量。

LJ半径含义、一个实际单点和能量力差异

图中连续曲线由明确的LJ公式计算,圆点是实际LAMMPS单点;没有声称整条曲线都逐点运行了LAMMPS。

6. 应用到自己的分子前检查什么#

先确认原子类型、电荷和参数完整,再核对单位、键角与improper顺序,随后做单点、优化和小步长平衡。本例说明转换链路和数值含义,没有完成真实分子的分型、电荷拟合、构象验证或动力学稳定性研究。

cat reference-data/Moltemplate-energy-components.csv
cat reference-results/source/system.in.settings

继续阅读自动生成拓扑、电荷分配与生成文件和完整工具导航。

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

查看配图

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

100%查看原图 ↗