Moltemplate:从分子模板生成LAMMPS输入
从LT原子、键角定义开始,实际生成两分子水,并让LAMMPS读入计算,讲清文件用途和模型边界。
阅读本篇目录
Moltemplate把可复用的LT模板转换为LAMMPS数据和参数片段,适合重复分子、链和复杂拓扑。本文先建立两个水分子,再逐步扩展到聚合物链、力场继承和Packmol外部坐标。
环境为Moltemplate 2.22.5独立Python3.11源码安装,本体无需编译器、MPI或CUDA;辅助Packmol 21.2.3使用GFortran13.3。LAMMPS采用已有30Sep2026 CPU模块及oneAPI 2024.2工具链,具体环境可加载对应模块查看。
1. 准备模板#
先下载文末资料包,解压到新目录:
module load moltemplate/2.22.5
python prepare.py
cd cases/water-pair
cat water.lt
本例完整water.lt:
Water {
write("Data Atoms") {
$atom:O $mol:water @atom:O -0.8476 0 0 0
$atom:H1 $mol:water @atom:H 0.4238 0.816496580927726 0 0.577350269189626
$atom:H2 $mol:water @atom:H 0.4238 -0.816496580927726 0 0.577350269189626
}
write("Data Bonds") {
$bond:b1 @bond:OH $atom:O $atom:H1
$bond:b2 @bond:OH $atom:O $atom:H2
}
write("Data Angles") {
$angle:a @angle:HOH $atom:H1 $atom:O $atom:H2
}
write_once("Data Masses") {
@atom:O 15.9994
@atom:H 1.008
}
write_once("In Init") {
units real
atom_style full
bond_style harmonic
angle_style harmonic
pair_style lj/cut/coul/long 8.0
kspace_style pppm 1.0e-6
special_bonds lj/coul 0.0 0.0 0.0
}
write_once("In Settings") {
pair_coeff @atom:O @atom:O 0.1553 3.166
pair_coeff @atom:H @atom:H 0.0 1.0
pair_modify mix arithmetic
bond_coeff @bond:OH 600.0 1.0
angle_coeff @angle:HOH 75.0 109.4712206344907
}
}
$atom、$bond、$angle是实例编号,@atom等是类型编号;同一个模板复制后会生成新的原子和分子编号。write为每个实例写数据,write_once让同一类的质量、样式和参数只定义一次。
这里采用SPC/E式电荷与氧LJ参数,但键角是谐势,尚未添加刚性约束,不能把下面的初始化文件直接称为刚性SPC/E生产模拟。
2. 复制两份并生成文件#
完整system.lt:
import "water.lt"
w1=new Water.move(2,2,2)
w2=new Water.rot(45,0,0,1).move(8,8,8)
write_once("Data Boundary") {
-10 30 xlo xhi
-10 30 ylo yhi
-10 30 zlo zhi
}
moltemplate.sh system.lt
ls system.data system.in.init system.in.settings
head -20 system.data
实际为6原子、4键、2角、2个分子;第二份分子先旋转再平移。Moltemplate生成的主文件名不一定是system.in,本例应明确包含所需初始化和参数片段。
3. 用LAMMPS读入并计算一次#
run0.in实际内容:
include system.in.init
read_data system.data
include system.in.settings
neighbor 2.0 bin
neigh_modify delay 0 every 1 check yes
thermo 1
thermo_style custom step atoms pe ebond eangle evdwl ecoul elong
thermo_modify norm no format float %.16g
run 0
write_dump all custom forces.dump id mol type q x y z fx fy fz modify sort id format float %.16g
module load lammps/30Sep2026-8173m
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 I_MPI_FABRICS=shm
lmp -in run0.in -log lammps.log
tail -10 lammps.log
这个输入只执行run 0,检查数据、参数、能量与力,不做平衡或生产轨迹。本例总势能约−0.00048922946 kcal/mol;原子键长1 Å、角度109.4712206°、总电荷为零。该小模型能量不代表体相水的物性。

4. 分析与继续使用#
cd ../..
/public/toolkit/miniconda3/envs/ase-3.29.0/bin/python analyze.py
cat analysis/models.csv
分析脚本需要整包的其他条件也已完成,完整运行使用文末bash run.sh。实际生产还需确定可靠水模型、约束方法、时间步、温压控制与长程静电精度。不要把不同单位或相互作用样式的参数片段直接拼接。
下载完整可复跑资料包。解压到新目录执行 bash run.sh,脚本最多使用一个CPU线程。这里只做小型建模与六次run 0,没有MD采样;实际生产模拟按作业指南申请资源。每个条件有自己的LT输入、system.data、system.in.init、system.in.settings、run0.in和日志,输出表与图在analysis/、figures/。