lammps均方根位移MSD计算---Python实现

import numpy as np
import matplotlib.pyplot as plt

dump_step=input("请输入的dump步数")      
time_step=input("请输入模拟运算步数")
LIMIT=input("请输入体系原子总数")
dump_step = float(dump_step)
time_step = float(time_step)
LIMIT=float(LIMIT)

def constrct_array(input,ii,c): #input - input array , ii - ii_th timestep , c - number of atoms
    temp=input[int(ii)*int(c):(int(ii)+1)*int(c)] #input 输出的值为字符串格式
    return temp   

def distant(l1,l2): #l1,l2 point position
    a=np.sqrt((float(l1[2])-float(l2[2]))**2+(float(l1[3])-float(l2[3]))**2+(float(l1[4])-float(l2[4]))**2)
    return a  

def MSD(list,num):
    msd3=[]
    msd2=0
    for i in range(len(list)): #number of time-point
        a=0
        for j in range(len(list[i])-1):
            #print(list[i][j])
            msd1=(abs(distant(list[i+1][j],base1_point)-distant(list[i][j],base1_point)))**2
            #print(msd1)
            a= a + msd1
        msd2=a/int(len(list[i]))
        print(msd2)
        msd3.append(msd2)
    return msd3

            
init_data=np.loadtxt("dump2.txt")
file1=[]
#print(init_data)
#with open('dump.txt') as file_project:
 #   lines =file_project.readlines()
  #  row = []
   # for line in lines:
    #    row = line.split(' ')
     #   file1.append(row)
#print(file1)
len_time = int(time_step/dump_step)
#print(len_time)
base1_point=(0,0,0,0,0,0,0)
O=[]
Al=[]
H=[]
for i in range(len_time):
    o=[]
    al=[]
    h=[]
    #print(i)
    tt=constrct_array(init_data,int(i),LIMIT) #将文件按照时间步截取
    print(tt)
    b=tt.tolist()   # tolist函数:将目标转化为列表
    #del b[0:9]
    #print(b)
    for each in b:
        #print(each)
        if distant(each,base1_point)<=31 and int(each[1])==1:
            o.append(each)
        elif distant(each,base1_point)<=31 and int(each[1])==2:
            al.append(each)
        elif distant(each,base1_point)<=31 and int(each[1])==3:
            h.append(each)
    O.append(o)
    Al.append(al)
    H.append(h)
print(O)
#print(Al)
#print(H)
y_O=MSD(O,LIMIT)
y_Al=MSD(Al,LIMIT)
y_H=MSD(H,LIMIT)

#print(y_O)
#print(y_Al)
#print(y_H)
'''
a=int(time_step/dump_step)
x=np.linspace(0,a-1,1)
plt.plot(x,y_O,c='red',label='O')
plt.plot(x,y_Al,c='black',label='Al')
plt.plot(x,y_H,c='green',label='H')

plt.show()    
    
'''

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值