Moltemplate专题

Moltemplate 生成文件清理与回读

用四原子实算说明重复记录、键角方向与编号处理,并用 LAMMPS 回读确认模型保持一致。

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

Moltemplate 会先生成各个文本片段,再组合成 LAMMPS DATA。修改模板或合并片段时,可能出现重复原子、同一键角的正反两种写法,以及不连续的相互作用编号。本例教你处理这些片段,并检查处理后的结构是否仍然正确。

1. 下载与查看已有结果#

下载完整四原子示例,保存为 example.zip:

python3 -m zipfile -e example.zip .
cd moltemplate-filter-export-tools
bash show-reference.sh
cat reference-results/native/cleaned.data

模型为 A–B–A–B 四个粒子,质量分别为 1、2、1、2,采用约化 LJ 单位。这是帮助理解文件处理的教学模型,不是某种真实分子的拟合力场。三条谐键、两个谐角和一个 OPLS 二面角保留;pair_style zero 4.0 关闭非键相互作用,没有进行分子动力学采样。

重复记录清理、四原子拓扑和全部力分量的实算核对

2. 整套重算#

集群环境使用 Moltemplate 2.22.5 / Python 3.11,LAMMPS 30Sep2026 的 CPU 版本,采用 oneAPI 2024.2、Intel MPI/MKL 编译。可以提交下载包里的 CPU 脚本:

sbatch job.slurm

脚本调用 bash run.sh,依次准备片段、运行原版清理工具、拼回 DATA、执行一次 LAMMPS run 0,最后生成 VALIDATION.json、filter-counts.csv 和 molc-exports.csv。run 0 计算当前构型的能量与力,没有推进时间。下面的单项命令请在已获得的计算资源内执行;先看结果不需要重算。

3. 重复原子:保留最后一条记录#

输入片段 atoms-dirty.txt 有五行,其中原子 1 的较早记录把 z 写成了 9。后面那条才是所需坐标。原版工具按原子 ID 查重,保留最后出现的一条:

source ./env.sh
mkdir -p manual
remove_duplicate_atoms.py < reference-results/native/atoms-dirty.txt > manual/Atoms
cat manual/Atoms
diff -u reference-results/native/atoms-clean.stdout manual/Atoms

输出恢复为四个原子,坐标为 (0,0,0)、(1.3,0,0)、(1.3,1.3,0)、(2.6,1.3,0.4)。这个工具按 ID 判断重复,并不自动判断哪条记录的物理含义正确。因此覆盖关系要由你确认。

4. 键角先统一方向,再去重和编号#

同一角度可以写作 1–2–3 或 3–2–1。对于这里的谐角,二者等价。先统一方向,才能识别重复:

source ./env.sh
mkdir -p manual
nbody_reorder_atoms.py Angles nbody_Angles.py   < reference-results/native/Angles-dirty.txt   | remove_duplicates_nbody.py 3   | renumber_DATA_first_column.py > manual/Angles
cat manual/Angles
diff -u reference-results/native/Angles-renumber.stdout manual/Angles

这里的 3 表示每条角相互作用涉及三个原子。键用 2,二面角用 4;二面角的方向规则使用 Dihedrals nbody_Dihedrals.py。不同 improper 势可能有不同对称性,不要把二面角规则直接套给 improper。

本例的结果是:

片段 处理前行数 处理后行数
Atoms 5 4
Bonds 4 3
Angles 3 2
Dihedrals 2 1

renumber_DATA_first_column.py 根据原第一列的排序给出连续编号,保留行的原有排列。本例只对 Bonds/Angles/Dihedrals 的相互作用 ID 使用它。不要只重编号 Atoms 而不更新所有键角、速度和其他引用。

这些工具处理的是单独片段,不能把整个 DATA 文件直接送进去。增加或删去相互作用后,还必须同步 DATA 头部的数量。

5. 用 LAMMPS 回读确认#

下载包已按正确数量拼成 cleaned.data。可以在独立目录回读,避免覆盖参考文件:

source ./env.sh
mkdir -p manual-readback
cp reference-results/native/cleaned.data manual-readback/
cp reference-results/native/system.in.init manual-readback/
cp reference-results/native/system.in.settings manual-readback/
cp reference-results/native/check0.in manual-readback/
(cd manual-readback && lmp -in check0.in -log cleaned.log)
grep -A 1 'Step' manual-readback/cleaned.log

关键输入为:

include system.in.init
read_data cleaned.data
include system.in.settings
run 0

这次集群实算的势能为 0.3842092422690663,其中键能约 0.3617667728784716,角能为 0,二面角能约 0.02244246939059474。全部十二个力分量与独立能量差分对照,最大绝对误差约 7.08×10⁻¹⁰。这说明本例清理后保持了预期模型;真实体系仍需核对自己的参数、边界和相互作用。

关于逐键电荷和自动拓扑,继续看自动生成键角与二面角及电荷分配和生成文件。

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

查看配图

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

100%查看原图 ↗