Moltemplate专题

Moltemplate:从分子模板生成LAMMPS输入

从LT原子、键角定义开始,实际生成两分子水,并让LAMMPS读入计算,讲清文件用途和模型边界。

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

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°、总电荷为零。该小模型能量不代表体相水的物性。

原生生成的两分子水与后续Packmol八水盒

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/。

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

查看配图

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

100%查看原图 ↗