Moltemplate专题

Moltemplate 模板展开与 MOLC 参数导出

演示通用模板、参数通配符、数值绑定与三种边界的 MOLC 参数整理,并说明旧式接口限制。

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

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

通用模板、MOLC混合参数和三种边界的原生导出结果

环境沿用 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 官方仓库。

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

查看配图

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

100%查看原图 ↗