干货分子动力学 干货详情

适用于分子动力学模拟数据处理的集成package--SMolSAT介绍和例子

天玑智研615
分子动力学分子模拟轨迹分析均方位移 MSD径向分布函数 RDFLAMMPS软物质模拟计算化学水分子体系离子溶液氢气分子储氢纳米材料

对于一个做分子动力学的科研搬砖工而言,三大难关横在面前:建模,运行,处理数据。而其中,“工欲善其事,必先利其器”,这句话在处理数据中尤为重要。一个完备、简洁、编辑性强的处理包可以极大的减轻我们的科研负担。


所以今天我想给大家分享讲解一个我们自己开发的处理数据的toolkit--SMolSAT (Soft-Matter Molecular Simulation Analysis Toolkit)。


我们以水+三种离子+加氢气这个体系为例,计算一下各种不同的MSD 和RDF。


1. 下载SMolSAT


Linux系统下,打开任意terminal:

git clone https://github.com/Chenghao-Wu/SMolSAT.git


2. 安装


进入到下载后的文件,然后


cd source

mkdir build

cd build

cmake ../.

make

make install


软件安装和运行需要的是:


cmake 3.12


g++ 7.0


python 3.x+


以及numpy; matplotlib; mpltex


需要注意的是,如果是在超算中,请记得提前load cmake 和 gcc, 比如 module load cmake,如果没有这些包,可以联系管理员安装,或者自己下载手动安装。


另外需要注意的是一定要确保安装时调用的Python和运行时的python版本一致,尤其是在超算中已安装Anaconda的朋友。


3. 使用


下面是一个示意script讲解(完整版见文章最后面)


3.1 首先我们要调用我们的包,注意安装路径的准确性

import sys

sys.path.append('安装路径/SMolSAT.py/source')

import SMolSAT

# %%



3.2 然后我们要规定我们的系统,示例体系里有不同分子中的9种不同的原子、离子。

ss=SMolSAT.System(ensemble='nv')

ss.set_linear_timetype(n_frames=200, time_unit=1) %处理的数据有多少个frame

ss.atomtype_list=["1","2","3","4","5","6","7","8","9"] %九种

ss.add_species(name="h20",number=4000,atoms=[2,1,0,0,0,0,0,0,0]) %水分子里有两个氢原子,一个氧原子

ss.add_species(name="h2",number=40,atoms=[0,0,2,0,0,0,0,0,0]) %氢气分子里有两个氢原子

ss.add_species(name="k",number=12,atoms=[0,0,0,1,1,0,0,0,0]) %KCl里有一个K一个Cl

ss.add_species(name="ca",number=12,atoms=[0,0,0,0,0,1,2,0,0]) %CaCl2里有一个Ca两个Cl

ss.add_species(name="na",number=12,atoms=[0,0,0,0,0,0,0,1,1]) %NaCl里有一个Na一个Cl


name='要处理数据的路径/all.lammpstrj' %注意lammps dump的时候要使用sort id.

ss.read_trajectory(type='custom',file=name) %读取

# %% 定义读取的体系

list_=SMolSAT.Trajectories(system=ss)

list_.create_list(name="h2o",    args="type_system 1 type_system 2") % 这里的1 2 是跟着前面的ss.atomtype_list=["1","2","3","4","5","6","7","8","9"]里的定义走的

list_.create_list(name="h2",     args="type_system 3")

list_.create_list(name="k",    args="type_system 4")

list_.create_list(name="ca",     args="type_system 6")

list_.create_list(name="na",    args="type_system 8")

list_.create_list(name="k",    args="type_system 4")

#list_.create_list(name="all",   args="all")

# %%计算氢气的MSD

msd=SMolSAT.msd(system=ss,trajs=list_,listname="h2",out="msdh.dat")

msd.plot("msdh.png")

# %%计算原子找原子的rdf

rdf1=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="h2",out="./rdfhh.dat")

rdf1.plot("rdfh2.png")

rdf2=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="k",out="./rdfhk.dat")

rdf2.plot("rdfhk.png")

rdf3=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="ca",out="./rdfhca.dat")

rdf3.plot("rdfhca.png")

rdf4=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="na",out="./rdfhna.dat")

rdf4.plot("rdfhna.png")

rdf5=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="h2o",out="./rdfhh2o.dat")

rdf5.plot("rdfh2-h2o.png")

# %%计算分子找别的分子或者分子上原子的rdf

list_.create_multibodies(name="h2_multibody",  trj_list_name="h2_multibody_trj",center_type="com", args="species_molecule h2")

rdf1=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname="h2_multibody",out="./rdfmhh.dat")

rdf1.plot("rdfmhh.png")

rdf5=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2_multibody",listname2="h2o",out="./rdfmhh2o.dat")

rdf5.plot("rdfmhh2o.png")

4. 结果示意


运行成功后,我们会得到这些RDF的图,用时非常短。

后言


详细信息和其他示例可以在我们的github上找到


https://github.com/Chenghao-Wu/SMolSAT


开发者信息:

undefined

吴正浩

开发者

undefined

周天航

测试者


完整代码如下所示


# To add a new cell, type '# %%'

# To add a new markdown cell, type '# %% [markdown]'

# %%

import sys

sys.path.append('/home/sbhimineni/SMolSAT/source')

import SMolSAT

# %%

ss=SMolSAT.System(ensemble='nv')

ss.set_linear_timetype(n_frames=200, time_unit=1)

ss.atomtype_list=["1","2","3","4","5","6","7","8","9"]

ss.add_species(name="h20",number=4000,atoms=[2,1,0,0,0,0,0,0,0])

ss.add_species(name="h2",number=40,atoms=[0,0,2,0,0,0,0,0,0])

ss.add_species(name="k",number=12,atoms=[0,0,0,1,1,0,0,0,0])

ss.add_species(name="ca",number=12,atoms=[0,0,0,0,0,1,2,0,0])

ss.add_species(name="na",number=12,atoms=[0,0,0,0,0,0,0,1,1])


name='/scratch-biby/sbhimineni/runfiles/allions/298.15/1/0.5/2526/2526/all.lammpstrj'

ss.read_trajectory(type='custom',file=name)

# %%

list_=SMolSAT.Trajectories(system=ss)

list_.create_list(name="h2o",    args="type_system 1 type_system 2")

list_.create_list(name="h2",     args="type_system 3")

list_.create_list(name="k",    args="type_system 4")

list_.create_list(name="ca",     args="type_system 6")

list_.create_list(name="na",    args="type_system 8")

list_.create_list(name="k",    args="type_system 4")

#list_.create_list(name="all",   args="all")

# %%

msd=SMolSAT.msd(system=ss,trajs=list_,listname="h2",out="msdh.dat")

msd.plot("msdh.png")

rdf1=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="h2",out="./rdfhh.dat")

rdf1.plot("rdfh2.png")

rdf2=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="k",out="./rdfhk.dat")

rdf2.plot("rdfhk.png")

rdf3=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="ca",out="./rdfhca.dat")

rdf3.plot("rdfhca.png")

rdf4=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="na",out="./rdfhna.dat")

rdf4.plot("rdfhna.png")

rdf5=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2",listname2="h2o",out="./rdfhh2o.dat")

rdf1.plot("rdfh2-h2o.png")


list_.create_multibodies(name="h2_multibody",  trj_list_name="h2_multibody_trj",center_type="com", args="species_molecule h2")

rdf1=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname="h2_multibody",out="./rdfmhh.dat")

rdf1.plot("rdfmhh.png")

rdf5=SMolSAT.rdf(system=ss,nbins=200,max_length_scale=0,timescheme=0,trajs=list_,listname1="h2_multibody",listname2="h2o",out="./rdfmhh2o.dat")

rdf5.plot("rdfmhh2o.png")


附录:作者简介


周老师,德国达姆施塔特工业大学(TU Darmstadt) 理论物理化学方向博士生。主要研究领域: 纳米材料性质,储氢,和高分子智能设计等相关模拟。


在Journal of Chemical Theory and Computation, Journal of Physical Chemistry C, Nano Energy, Nano Research等期刊上发表了多篇论文。

评论

0/1000发布评论
全部评论

天玑智研

关注
TA的主页

干货推荐