使用lammps做模拟前,往往要先建立data文件(read_data命令)。data文件的形式又由atom_style命令确定。依据建模方法的不同,可能需要先对data文件进行前处理,使其满足atom_style命令的要求。本文以SPC/E水分子data文件的生成为例,介绍作者工作时使用matlab做数据前处理工作。该方法可能只限于作者的技术路线。但是作者希望能够在一定程度上帮助各位同行提高工作效率。
一、技术路线 作者的模拟工作要使用SPC/E水分子模型。相关介绍非本文重点。读者可以查阅相关工具书或原始文献。数据生成的技术路线是使用packmol填充分子模型+vmd topo工具生成原始数据文件。具体操作方法本文也不作介绍。读者可参考论坛介绍。部分结果如下图:
可以看到这里没有angle数据,没有电荷参数(atoms部分第四列均为0),没有初始速度。另一方面read_data对full type 的data文件的结构有明确要求,如手册中full对应的行。可以看出二者相差较大。
作者选择matlab对缺失部分信息进行填加。下面分部分介绍作者的程序的功能。
二、初始操作 本部分不作介绍。
三、原子数(分子数)读取 因为每次使用本程序时可能体系大小不同,故先读取初始数据中原子数。
四、建立电荷参数、原子类型参数、分子数等向量 由于水分子中有三个原子,数据列表中每三行的电荷参数、原子类型参数是一个循环体,而分子数以每三行加1的顺序排列。这里建立这几部分参数的列向量:
五、读取原始文件中的坐标数据 这部分使用fopen函数打开原始文件water.data,textscan函数读原始数据中坐标信息,并将上一部的所有信息一并写入atomsdata矩阵中。注意程序中有一个参数值是31,为原始数据中第一行有效数据所在行数减1,具体数值可能会因使用情况变化而有所改变。使用时读者可以先打开原始数据查看,再修改。另外,atomsdata的每行对应每个原子,每列对应full type要求的每种信息。特别地,这段程序中作者对整体原子坐标在z方向上减去20,而另两个方向没有变化。
六、文件头的书写 可以看到data文件要求在文件头写一些关于数据的基本信息。这里使用fprintf函数写入一切需要信息。读者可根据自己需要修改xlo xhi/yloyhi/zlo zhi三行的数值。此外将该原子坐标在六个方向的最值写到另外一个coord.data文件中,将在最后结果部分展示。
七、写入原子质量等信息 这部分内容可以在in文件中实现。可以不写。
八、写atoms信息 将atomsdata矩阵内容按行写入all.data文件中,并将该部分内容写入一个单独文件atom.data中。
九、写速度信息 将速度信息写入all.data,并单独写入velocities.data中。
十、写键信息 同上。
十一、写角信息 同上。
十二、结果 最后,将在硬盘中生成一系列新的文件。我们逐一查看。Coord.data文件:
Atom.data文件:
Velocities.data文件:
Bonds.data文件:
Angles.data文件:
可以看到以上各个文件都存放了一部分数据信息。将它们联起来就是最终的结果。All.data文件:
本程序实际运行速度仅几秒钟。远快于使用ultraedit/excel等表格处理方式。如果模拟体系需要其他内容,可通过LAMMPS的命令read_data中的add模块实现。这里不做介绍。
今天就先介绍到这里~欢迎各位老师同学联系作者交流合作!
本文由吉林大学刘润老师原创,有兴趣的同学和老师可以直接联系刘老师:
liurun@jlu.edu.cn
学习更多MD知识
欢迎各位扫码关注
fopen函数matlab_Lammps经验谈之基于matlab的数据前处理
最新推荐文章于 2024-01-07 10:05:48 发布