Moltemplate曲线建链与指定交联
从控制点生成十三珠子曲线链,添加指定位置交联,展示完整终端流程和真实能量力数据。
阅读本篇目录
想让聚合物沿一条给定空间曲线排列,可先准备三列坐标,再用 genpoly_lt.py 把单体放到各个位置。需要在少数位置增加连接时,再用 genpoly_modify_lt.py。本篇给出13珠子曲线链和两条交联键的实际例子;它是约化单位谐键模型,不代表某种真实聚合物的参数或平衡构象。
1. 下载与流程#
下载控制点、LT模板、MOL2/PDB、真实结果及绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd moltemplate-curve-import-tools
先查看已有结果:
bash show-reference.sh
cat curve-import-checks.csv
head -n 5 curve-geometry.csv
重新计算时,在新的解压目录提交:
sbatch job.slurm
CPU模板申请56核整节点,实际短示例单进程执行;分区维护时等待可用资源。在已分配资源中可用 bash run.sh。它依次生成曲线和LT、加入指定交联键、导入两种MOL2电荷、用LAMMPS读回四个模型,再提取PDB坐标并画图。重复整套流程请换新目录,避免覆盖已有 work/。
本例使用Moltemplate2.22.5/Python3.11,以及Intel oneAPI2024.2、Intel MPI/MKL构建的LAMMPS30Sep2026 CPU版;分析绘图通过 sisl/0.16.4 的Python完成。无需修改公共环境。
2. 六个控制点与十三个建模位置#
inputs/control.raw 每行一个控制点:
0 0 0
2 1 0
4 1.5 0.3
6 0.5 1
8 -1 0.7
10 0 0
使用随包脚本把曲线重采样为13个位置:
source ./env.sh
mkdir customer-curve
python interpolate-curve-checked.py 13 1.0 0.5 < inputs/control.raw > customer-curve/curve.raw
head -n 4 customer-curve/curve.raw
三个参数依次是输出点数、缩放系数和参数化指数。控制点决定形状,生成点是单体的位置。按曲线参数等间隔,不保证相邻单体的物理距离相同,后面还需检查键长并进行适合自己体系的几何优化。
**当前版本的用法说明:**本例不直接使用未适配的 interpolate_curve.py。安装的2.22.5在这组非等距弯曲控制点上,内部三对角求解器的下标处理会使结果偏离标准自然三次样条。interpolate-curve-checked.py 继续调用同一原生模块的参数读取与曲线计算,只在本进程内修正求解器;它核对源码版本,公共安装不变。独立SciPy自然三次样条与随包脚本的全部13个结果一致。更换软件版本后脚本会拒绝运行,需先检查版本,不能删除版本保护后盲目使用。

3. 沿曲线生成单体和骨架键#
本例单体 Bead 只有一个质量为1的珠子,原子变量名为 site。骨架谐键K=100、平衡键长1.3;交联键K=5、平衡键长2.6。完整力场:
ChainFF {
write_once("In Init") {
units lj
atom_style full
pair_style zero 4.0
bond_style harmonic
}
write_once("Data Masses") {
@atom:bead 1.0
}
write_once("In Settings") {
pair_coeff * *
bond_coeff @bond:link 100.0 1.3
bond_coeff @bond:cross 5.0 2.6
}
write_once("Data Bonds By Type") {
@bond:link @atom:bead @atom:bead
}
}
下面实际调用原生建链工具:
source ./env.sh
cp inputs/chainff.lt inputs/bead.lt inputs/check0.in customer-curve/
cp inputs/curve-system.lt customer-curve/system.lt
cd customer-curve
genpoly_lt.py -polymer-name CurvedChain -inherits ChainFF -monomer-name Bead -header 'import "bead.lt"' -bond link site site < curve.raw > polymer.lt
moltemplate.sh system.lt
grep -E 'atoms$|bonds$' system.data
-bond link site site 把相邻单体的site原子用link类型连接。-inherits ChainFF 使聚合物中的类型名与力场定义对应,不可省略。本例得到13个珠子、12条骨架键。对于有多个原子的真实单体,原子的局部方向和旋转设置也会影响构象,不能只替换单体名字就认为结构合理。
4. 只在指定位置增加交联#
位置文件 inputs/locations.txt 内容为3和8。工具的单体下标从0开始,所以分别指第4和第9个单体。相对下标0和2表示把当前位置与其后第二个单体连接:
source ./env.sh
cp inputs/locations.txt customer-curve/
cd customer-curve
genpoly_modify_lt.py -polymer-name CurvedChain -length 13 -locations locations.txt -bond cross site site 0 2 >> polymer.lt
moltemplate.sh system.lt
lmp -var datafile system.data -var dumpfile customer-forces.dump -in check0.in -log customer-check0.log
本例新键为珠子4–6和9–11,总键数从12增加到14。这里明确追加到同一LT对象,再重新生成LAMMPS输入。不要重复执行追加命令,否则可能叠加修改;若要换位置,回到新的副本重新生成基础LT再修改。
5. 实际结果与后续操作#
| 模型 | 珠子数 | 键数 | 整体系势能,约化单位 |
|---|---|---|---|
| curve-base | 13 | 12 | 134.859224281 |
| curve-modified | 13 | 14 | 140.968804918 |
势能是未优化结构在 run 0 下的实际结果。全部坐标、连接、质量、电荷、谐键力和能量均按对应输入核对。加入交联会改变力和能量,但本例没有做MD或能量最小化,不能用上表判断交联体系的稳定性或真实力学性质。
实际使用顺序建议是:确认单体和力场 → 准备目标曲线 → 生成结构 → 核对键与周期边界 → 做适当优化和平衡 → 再开展生产模拟。曲线、交联位置和力场参数都应由自己的材料模型决定。
继续阅读:MOL2导入与PDB坐标整理。官方说明:genpoly_lt、genpoly_modify_lt。