lammps .eam势文件 metal单位制转real单位制的python程序

1.程序

测试内容有限,不保证适用于所有文件

# 1 eV/mol = 1.6021766208×10^-19 J
# 1 J*6.02214076×10^23 = J/mol
# 1KJ/mol = 0.2389029576186153 Kcal/mol
C= 1.6021766208*6.02214076*10*0.2389029576186153

file_name_read = "Cu_u3.eam"
file_name_write = "/home/zxy/Documents/lammps/eam_test/Cu_u3_real.eam"


import re
import os
import numpy as np
import math 
import time
os.system("clear")
f_r= open(file=file_name_read,mode= "r")
f_w= open(file=file_name_write,mode= "w")
print("Start read file...")

# ------------------------- 读取原子信息 ------------------------
line= f_r.readline()
f_w.write(time.asctime( time.localtime(time.time()) )+'\n')
line= f_r.readline()
f_w.write(line)
patten= r'([0-9\.]+)' 
match= re.findall(patten, line)
atom_num= int(match[0])
atom_mass= float(match[1])
atom_lattric_c= float(match[2])

patten= r'([a-zA-Z]+)' 
match= re.findall(patten, line)
atom_lattric_t= match[0]
print("atom_number= %d; atom_mass= %f; lattric_constant= %f; lattric_type= %s"%(atom_num,atom_mass,atom_lattric_c,atom_lattric_t))


# ------------------------- 读取文件信息 ------------------------
patten= r'([0-9\.e\-\+]+)'
line= f_r.readline()
f_w.write(line)
match= re.findall(patten, line)
N_rho= int(match[0])
d_rho= float(match[1])
N_r= int(match[2])
d_r= float(match[3])
cutoff= float(match[4])
print("N_rho= %d; d_rho= %E; N_r= %d; d_r= %E; cutoff= %f"%(N_rho,d_rho,N_r,d_r,cutoff))


# ------------------------- 转换F ------------------------
line= f_r.readline()
match= re.findall(patten, line)
number_in_line= len(match)
print("There are %d number(s) every line"%number_in_line)
data= np.zeros((1,number_in_line))
print("Start convert function H.")
for j in np.arange(0,N_rho/number_in_line,1):
    for i in np.arange(0,number_in_line,1):
        data[0,i]= float(match[i])
    data=data*C
    #print("%+10E    %+10E    %+10E    %+10E    %+10E"%(data[0,0],data[0,1],data[0,2],data[0,3],data[0,4]))
    f_w.write("%+24.16E%+24.16E%+24.16E%+24.16E%+24.16E\n"%(data[0,0],data[0,1],data[0,2],data[0,3],data[0,4]))
    line= f_r.readline()
    match= re.findall(patten, line)
print("Convert finished")


# ------------------------- 转换Z ------------------------
C= math.sqrt(C)
print("Start convert function Z.")
for j in np.arange(0,N_rho/number_in_line,1):
    for i in np.arange(0,number_in_line,1):
        data[0,i]= float(match[i])
    data=data*C
    #print("%+10E    %+10E    %+10E    %+10E    %+10E"%(data[0,0],data[0,1],data[0,2],data[0,3],data[0,4]))
    f_w.write("%+24.16E%+24.16E%+24.16E%+24.16E%+24.16E\n"%(data[0,0],data[0,1],data[0,2],data[0,3],data[0,4]))
    line= f_r.readline()
    match= re.findall(patten, line)
print("Convert finished")


# ------------------------- 拷贝其他数据 ------------------------
print("copy other data...")
f_w.write(line)
while True:
    line= f_r.readline()
    if not line:
        break
    else:
        f_w.write(line)

print("copy finished")
f_r.close()
f_w.close()

2.原理说明

       单位转换

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值