LAMMPS data文件创建工具--moltemplate

一 介绍长久以来,lammps的数据文件构建就是一个大问题(对我来说)。一方面,LAMMPS的数据格式比较特殊,很多软件不能直接导出; 另一方面小分子到大分子的变换,大分子在系统中的排布和大分子中的拓扑结构都需要牵扯很多的精力。经过长时间的试错,我算是终于找到一个比较合理且简约的技术栈,可以直接生成lammps所需的in文件和data文件。

如图所示,整个技术栈分为:基本绘图:绘制基本的单元,如高分子结构单元,单个水分子或者甲烷分子等; 数据文件:导出成常见格式的数据文件,如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_style      lj/cut 10.5
    bond_style      hybrid      fene    harmonic
    angle_style     harmonic
}


write_once("Data Boundary") {
    0 100.0 xlo xhi
    0 100.0 ylo yhi
    0 100.0 zlo zhi
}

write_once("Data Masses"){
    @atom:M     1
    @atom:G     1
    @atom:R     1
}

write_once("In Settings"){
    pair_coeff      @atom:M     @atom:M     1   1   2.5
    pair_coeff      @atom:M     @atom:G     1   1   2.5 
    pair_coeff      @atom:M     @atom:R     1   1   2.5         
    pair_coeff      @atom:G     @atom:G     1   1   2.5
    pair_coeff      @atom:G     @atom:R     1   1   2.5
    pair_coeff      @atom:R     @atom:R     1   1   2.5

}

write_once("In Settings"){
    bond_coeff      @bond:MM    fene    30      1.5     
    bond_coeff      @bond:GR    fene    30      1.5
    bond_coeff      @bond:RR    harmonic    1000    0.66

}

write_once("In Settings"){
    angle_coeff     @angle:RRR      200     180
}

# write_once("Data Dihedrals By Type"){
#     @dihedral:      @atom:
# }


# write_once("Data Angles By Type"){
#     @angle:     @atom:
# }

}

第二部分是基本单元数据 这里面存储这一个片段的信息# – file matrix.lt –

import “forcefield.lt”

Matrix inherits ForceField{

write("Data Atoms"){
    $atom:1     $mol:.   @atom:M    0     1   1   1
    $atom:2     $mol:.   @atom:M    0     2   1   1
    $atom:3     $mol:.   @atom:M    0     3   1   1
    $atom:4     $mol:.   @atom:M    0     4   1   1
    $atom:5     $mol:.   @atom:M    0     5   1   1

}

write("Data Bonds"){
    $bond:1     @bond:MM  $atom:1   $atom:2   
    $bond:2     @bond:MM  $atom:2   $atom:3   
    $bond:3     @bond:MM  $atom:3   $atom:4   
    $bond:4     @bond:MM  $atom:4   $atom:5   

}
第三部分是操作部分 在这个文件中我们可以对基本单元进行操作,同时也是程序执行的入口# – file system.lt – #

import “forcefield.lt”
import “matrix.lt”

m1 = new Matrix [3].move(0,0,3)

在最简单的情况下,我们仅需要这三个文件就可以描述一个系统的初始化状态,然后执行命令行使用moltemplate生成实际文件:

moltemplate.sh system.lt
得到:

system.data
system.in
system.in.init
system

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值