一 介绍
长久以来,lammps的数据文件构建就是一个大问题(对我来说)。一方面,LAMMPS的数据格式比较特殊,很多软件不能直接导出; 另一方面小分子到大分子的变换,大分子在系统中的排布和大分子中的拓扑结构都需要牵扯很多的精力。经过长时间的试错,我算是终于找到一个比较合理且简约的技术栈,可以直接生成lammps所需的in文件和data文件。
![v2-3afd90cfc7de3c062596ec3190d5bc7f_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=630c2732-e12f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-3afd90cfc7de3c062596ec3190d5bc7f_b.jpg)
如图所示,整个技术栈分为:
- 基本绘图:绘制基本的单元,如高分子结构单元,单个水分子或者甲烷分子等;
- 数据文件:导出成常见格式的数据文件,如PDB,XYZ;
- [空间排布]:packmol可以自动地根据所设置的限制向系统中填放单元。比如想向C60笼中填放原子,只需要一行命令将允许范围限制在球内即可;
- 生成工具:moltemplate可以操作已有的数据文件,在系统中复制,变换和随机,同时根据已有的拓扑结构补充生成键角二面角等信息,最后生成lammps所需的in文件和data文件。
由此,得到的所有文件都可以直接使用lammps运行。此套技术栈的好处是,可以接受各种格式的数据文件并且可以轻松地操纵它们,而且都是开源的,安装方便快捷占地小。开发moltemplate的人同样也是lammps的主程,在手册中他成这款软件是lammps的前端(front-end)
唯一的缺点是,moltemplate(包括packmol)手册有如16年以前的lammps手册,比较 ……随意洒脱。
二 文件结构
moltemplate本身具有导入(import)和继承(inherit)功能,因此我们可以尽量地把文件区分按照功能区分开。当然文件名都是可以自定义的,这里只是介绍一个思路,告诉各位应该怎样上手。
第一部分是forcefield.lt 这个文件中储存着lammps的系统和力场参数。
# -- ForceField -- #
ForceField{
write_once("In Init"){
units lj
boundary p p p
atom_style full
pair_s