Moltemplate 模板展开与 MOLC 参数导出
演示通用模板、参数通配符、数值绑定与三种边界的 MOLC 参数整理,并说明旧式接口限制。
阅读本篇目录
Moltemplate 的文件生成并不只限于坐标。通用模板可以为多个对象分配编号;参数工具可以把类型通配符展开成显式命令;molc.sh 可以整理 Gay–Berne 与偏心电荷参数。本例给出可以直接查看和重做的小文件。
1. 获取示例#
下载模板与参数示例,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd moltemplate-filter-export-tools
bash show-reference.sh
cat reference-results/native/coeff-rendered.stdout

环境沿用 Moltemplate 2.22.5 / Python 3.11。整套示例中的 LAMMPS 回读使用 oneAPI 2024.2、Intel MPI/MKL 编译的 30Sep2026 CPU 版本。整套运行可以提交:
sbatch job.slurm
只操作模板时计算量很小。下面展示的是单项命令,整套脚本还包括生成文件清理与 LAMMPS 回读。
2. 通用 ttree:实例编号与类型编号#
inputs/generic.tt 中定义一个 Unit,然后创建两个实例:
Unit {
write("table.txt") {
$item:a @kind:A 1.25
$item:b @kind:B -2.5
}
}
u = new Unit[2]
source ./env.sh
mkdir -p manual-generic
cp inputs/generic.tt manual-generic/
(cd manual-generic && ttree.py generic.tt)
cat manual-generic/table.txt
输出为:
1 1 1.25
2 2 -2.5
3 1 1.25
4 2 -2.5
$item 随实例分配四个独立编号,@kind 对同一种类型复用编号。ttree_assignments.txt 记录变量与数值的对应关系。ttree.py 是通用文本模板入口;要让 .move() 和 .rot() 真正改变 LAMMPS 坐标,应使用 moltemplate.sh / lttree.py。
3. 通配符参数展开,再绑定数字#
独立调用后处理工具时,使用解析后的完整路径 @/atom:、@/bond:。本例为两个 A 类型、两个 B 类型指定交叉配对参数,为两个键类型指定谐键参数:
pair_coeff @/atom:A* @/atom:B* lj/cut 0.35 2.7
bond_coeff @/bond:soft* harmonic 100 1.3
source ./env.sh
mkdir -p manual-coeff
postprocess_coeffs.py inputs/bindings.txt < inputs/coeff.template > manual-coeff/expanded.template
ttree_render.py inputs/bindings.txt < manual-coeff/expanded.template > manual-coeff/coeff.in
cat manual-coeff/coeff.in
sort manual-coeff/coeff.in > manual-coeff/sorted.in
sort reference-results/native/coeff-rendered.stdout > manual-coeff/reference-sorted.in
diff -u manual-coeff/reference-sorted.in manual-coeff/sorted.in
得到四条 pair_coeff 和两条 bond_coeff。工具展开的行序可能不同,所以比较时排序;每条命令的类型和数值保持相同。这里的 LJ 参数和下节 MOLC 参数是两个独立文本例子,不应拼在同一物理模型中。
4. MOLC:按照边界整理参数#
molc.sh 实际需要两个输入:设置片段和包含 boundary 的初始化片段。不要只传设置片段。
source ./env.sh
mkdir -p manual-molc
for mode in periodic slab finite; do
molc.sh inputs/molc.settings "inputs/molc-$mode.init" > "manual-molc/$mode.in" 2> "manual-molc/$mode.stderr"
grep -E '^(pair_style|kspace|pair_coeff 1 2)' "manual-molc/$mode.in"
done
| 边界 | 偏心电荷样式 | 长程设置 |
|---|---|---|
p p p |
coul/long/offcentre |
pppm/offcentre |
p p f |
coul/long/offcentre |
PPPM,增加 kspace_modify slab 3.0 |
f f f |
coul/cut/offcentre |
无 K-space |
教学参数为两种类型的 ε=4、9,σ=2、4,交叉参数 ε₁₂=√(4×9)=6,σ₁₂=(2+4)/2=3。两个偏心电荷的位置、数值和质量均出现在输出中。本例是原版工具的参数导出,不是材料参数拟合。
当前 2.22.5 的额外 group/neighbor 行筛选会给出 grep: Trailing backslash,这部分附加行不会输出。需要这些命令时,在导出的文件后单独补充,并核对原设置。核心质量、偏心电荷、交叉参数与长程设置可按本例查看。
所选常规 LAMMPS 没有 coul/*/offcentre 和 pppm/offcentre 专用实现,因此本节不提供完整 MOLC 动力学结果。 不要将导出片段直接当作当前 CPU 模块可运行的完整输入;正式 MOLC 计算还需要匹配的扩展实现及物理参数。
其他边界组合也不能仅凭退出码判断成功:此版本会在 stderr 报 MOLC SYNTAX ERROR,但可能返回 0,应检查错误文本和实际生成的 pair_style。
5. 旧式 ESPResSo TCL 的类型提取#
下载包的 legacy-particles.tcl 是显式编写的两个教学记录,不是 ESPResSo 引擎计算输出:
source ./env.sh
cat inputs/legacy-particles.tcl
extract_espresso_atom_types.py < inputs/legacy-particles.tcl
输出 0 0 和 1 0,分别为粒子 ID 与类型 ID。这个工具只提取字段,不会完成引擎转换。
emoltemplate.sh / ettree.py 属于旧式 ESPResSo TCL 接口。安装版本的该入口还存在 SimpleCounter 导入错误,不建议用于新任务。当前 ESPResSo 的 Python 接口不能直接运行这类 TCL 脚本;本例不把旧构建入口或旧引擎记作成功运行。官方对旧 TCL 接口范围的说明见 Emoltemplate 官方页面;模板和各工具源码见 Moltemplate 官方仓库。