【2022.11.16】Lammps+Python+MATLAB在绘制维诺图时遇到的问题

目录

  • 写在前面
  • 绘制g6(r)执行步骤
  • 问题1:数据导入
  • 问题2:利用Python选取想要的数据
  • 问题3:如何找到每个点的最近邻
  • 问题4:绘制维诺图

写在前面

记录一下做毕设时候遇到的问题
大目标是绘制g6®的图片

相关文章:
[1] Zu M , Liu J , Hua T , et al. Density affects the nature of the hexatic-liquid transition in two-dimensional melting of core-softened systems[J]. Physical Review Letters, 2016, 117(8).
[2] V. Nosenko, S.K. Zhdanov, A.V. Ivlev, et al.2D Melting of Plasma Crystals: Equilibrium and Nonequilibrium Regimes[J]. Physical Review Letters, 2009, 103.

顺便附上第二篇论文的paper reading(第一篇直接一对一在老板这边讲的,忘记录了)

组会论文讲解实录:2D Melting of Plasma Crystals,PRL 2009

一些确定会写入源代码中的代码不会展示,因为鄙人搜了一下,发现CSDN上的代码也是会参与查重的,被查到怪麻烦的

绘制g6®执行步骤

1、 导入数据
2、 利用论文1中的方法找到最近邻
3、 利用r进行分类
4、 算出psi6®
5、 利用公式算出g6®

问题1:数据导入

用文本文档无法打开数据文件,转而在Python中进行阅读
代码略

问题2:利用Python选取想要的数据

报错:ValueError: 4 columns passed, passed data had 6 columns
通过仔细查看lamms中的模拟语句,以及在Python中进行校验,发现在数据文档中存储了多组数据
部分校验代码:

"""
猜测结果:数据排列为:
9行表头
9360个粒子在timestep1中的数据
9行表头【此时为第9+9360+1=9370行】
9360个粒子在timestep2中的数据
……
"""
for i in range(0,9):
     f.readline()#表头信息采取手动提取
     #print(i+1)
for i in range(0,9360):
    f.readline()
    if i == 9359:
        print(i+1+9)
for i in range(0,9):
     print(f.readline())#表头信息采取手动提取
     #print(i+1)
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
""9369行数据为一循环,则一共有多少循环?
答:1001
"""
print(len(data))
f.close()

处理时lammpstrj文件时的参考代码

问题3:如何找到每个点的最近邻

文章中提到,利用 Voronoi tessellation(泰森多边形分割)进行匹配
查阅资料后,决定将编程逻辑改为利用Delaunay三角网(德劳内三角网)的顶点数据进行匹配
Python中的Delaunay库参考资料1
Python中的Delaunay库参考资料2

问题4:绘制维诺图

主要问题:用Python自带的Voronoi库只能将输入的点作为顶点画维诺图,故偷个懒用下matlab
当然,从某种角度上来说,matlab对处理大量的数字类数据跟在行啦
代码参考
图应该到时候用不上,因为数据不太对,不过保险起见,只放一张
【2022.11.16】Lammps+Python+MATLAB在绘制维诺图时遇到的问题_第1张图片

你可能感兴趣的:(sth.,in,the,LAB,python,lammps,MATLAB)