适用于分子动力学模拟数据处理的集成package--SMolSAT介绍和例子
对于一个做分子动力学的科研搬砖工而言,三大难关横在面前:建模,运行,处理数据。而其中,“工欲善其事,必先利其器”,这句话在处理数据中尤为重要。一个完备、简洁、编辑性强的处理包可以极大的减轻我们的科研负担。
所以今天我想给大家分享讲解一个我们自己开发的处理数据的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
开发者信息:

吴正浩
开发者

周天航
测试者
完整代码如下所示
# 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等期刊上发表了多篇论文。
评论
天玑智研

干货推荐

提取文献数据点,你只知道GetData?
木若林溪
558 1

小胶质细胞
Mr弘🔬
63 8

神经元、星形胶质细胞、少突胶质细胞、小胶质细胞组织学区分
Mr弘🔬
90 7

CP2K计算能带结构与DOS图
齐振宏
310 2

分子动力学模拟:从原始轨迹到科学结论的推理路径解析
吃鱼不
123 3

分子轨道理论简介与计算示例
天玑智研
769 6
