使用python编写data文件

news/2024/12/15 7:30:33/

文章目录

      • 1.LAMMPS介绍
      • 2.使用python编写data文件
        • 1.使用python编写简单data文件
        • 2.使用python编写晶体data文件
        • 3.使用python编写晶体(旋转)data文件

1.LAMMPS介绍

  • LAMMPS(Large-scale Atomic/Molecular Massively Parallel Simulator),主要用于分子动力学模拟,但也可用于能量最小化和蒙特卡洛模拟,可模拟几个粒子到几十亿粒子的体系。
  • 代码开源免费,使用C++编写,目前由美国桑迪亚国家实验室(Sandia National Laboratory,SNL)进行维护。
  • 可在笔记本/台式机上运行,可安装在MacOS、Linux和Windows上。
  • 常见的输入文件
    1.structure.dat(data文件,包含体系大小、原子数、原子类型、各类型质量、各原子位置,也可包含原子速度)
    2.filename.in(input文件,包含运行程序的参数,也可包含势函数或经验势)
    3.pot.mod(potential文件,包含有关势参数)
  • 常见的输出文件
    1.final-structure.dat(data文件:与输入data文件相同,但包含最终体系的信息。可以作为另一个模拟的初始输入data文件)
    2.md.lammpstrj(轨迹文件:每N步的原子位置,用于进一步可视化分析)
    3.log.lammps(日志文件:存储所有LAMMPS执行的操作。当出现错误时,可以查看)
    4.out.filename(输出文件:包含所执行的操作的摘要,错误信息,以及热力学数据)

2.使用python编写data文件

1.使用python编写简单data文件

#使用python创建data文件
import numpy as npn_atoms = 1000                          #创建原子数
system_size = 20.0                      #设置体系长度,埃米,假设cubic体系positions = []                          #生成原子坐标
for i in range(n_atoms):                #随机生成,非晶态positions.append(np.random.rand(3)*system_size)with open("random.data","w") as fdata:                 #编写lammps的data文件fdata.write("random atoms - written\n\n")                #首行为注释行#头部fdata.write("{} atoms\n".format(n_atoms))                #指定原子数fdata.write("{} atom types\n".format(1))                   #指定原子类型数fdata.write("{} {} xlo xhi\n".format(0.0,system_size))              #指定盒子尺寸fdata.write("{} {} ylo yhi\n".format(0.0,system_size))fdata.write("{} {} zlo zhi\n".format(0.0,system_size))fdata.write("\n")#原子部分fdata.write("Atoms\n\n")for i,pos in enumerate(positions):                        #写入坐标fdata.write("{} 1 {} {} {}\n".format(i+1,*pos))

2.使用python编写晶体data文件

#使用python创建data文件
import numpy as nplattice_parameter = 4.046                 #晶格常数,埃米
basis = np.array([[1.0,0.0,0.0],            #基础FCC立方[0.0,1.0,0.0],[0.0,0.0,1.0]])*lattice_parameter
base_atoms = np.array([[0.0,0.0,0.0],[0.5,0.5,0.0],[0.5,0.0,0.5],[0.0,0.5,0.5]])*lattice_parameter
system_size = 10                    #设置体系长度,晶格单位,假设cubic体系positions = []                      #生成原子坐标
for i in range(system_size):for j in range(system_size):for k in range(system_size):base_position = np.array([i,j,k])cart_position = np.inner(basis.T,base_position)        # np.inner()计算内积for atom in base_atoms:positions.append(cart_position + atom)with open("crystalline.data","w") as fdata:            #编写lammps的data文件fdata.write("crystalline Al atoms - written\n\n")              #首行为注释行#头部fdata.write("{} atoms\n".format(len(positions)))            #指定原子数fdata.write("{} atom types\n".format(1))              #指定原子类型数fdata.write("{} {} xlo xhi\n".format(0.0,system_size*lattice_parameter))              #指定盒子尺寸fdata.write("{} {} ylo yhi\n".format(0.0,system_size*lattice_parameter))fdata.write("{} {} zlo zhi\n".format(0.0,system_size*lattice_parameter))fdata.write("\n")#原子部分fdata.write("Atoms\n\n")for i,pos in enumerate(positions):                    #写入坐标fdata.write("{} 1 {} {} {}\n".format(i+1,*pos))

3.使用python编写晶体(旋转)data文件

#使用python创建data文件
import numpy as np
import itertools as its
import math#新代码,根据轴和角度旋转矩阵
def rotation_matrix(axis,angle):a = math.cos(angle/2.0)s = math.sin(angle/2.0)b = axis[0]*sc = axis[1]*sd = axis[2]*sreturn np.array([[a*a+b*b-c*c-d*d,2*(b*c-a*d),2*(b*d+a*c)],[2*(b*c+a*d),a*a+c*c-b*b-d*d,2*(c*d-a*b)],[2*(b*d-a*c),2*(c*d+a*b),a*a+d*d-b*b-c*c]])lattice_parameter = 4.046                  #晶格常数,埃米
basis = np.array([[1.0,0.0,0.0],           #基础FCC立方[0.0,1.0,0.0],[0.0,0.0,1.0]])*lattice_parameter
base_atoms = np.array([[0.0,0.0,0.0],[0.5,0.5,0.0],[0.5,0.0,0.5],[0.0,0.5,0.5]])*lattice_parameter
#旋转后的基础FCC立方
axis = [1,1,0]             #轴
angle = np.pi/6            #角度
rot = rotation_matrix(axis,angle)
basis = np.matmul(rot.T,basis)                    # np.matmul()矩阵相乘
base_atoms = np.array([np.matmul(rot,atom) for atom in base_atoms])system_size = 20                  #设置体系长度,晶格埃米,假设cubic体系
system_basis = np.array([[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]])*system_size
inv_basis = np.linalg.inv(basis)                          # np.linalg.inv()计算逆协方差矩阵
inv_system = np.linalg.inv(system_basis)
corners = np.array(list(its.product([0.0,system_size],repeat = 3)))          # its.product() 迭代循环 3次
extents = np.array([np.matmul(inv_basis.T,corner) for corner in corners])
mins = [int(np.min([m,0])) for m in np.floor(np.min(extents,axis = 0))]             # np.floor() 向下取整
maxs = [int(np.max([m,0]))+1 for m in np.ceil(np.max(extents,axis = 0))]             # np.ceil() 向上取整positions = []                    #生成原子坐标
for i in range(mins[0],maxs[0]):for j in range(mins[1],maxs[1]):for k in range(mins[2],maxs[2]):base_position = np.array([i,j,k])cart_position = np.inner(basis.T,base_position)          # np.inner()计算内积for atom in base_atoms:atom_pos = cart_position + atomsystem_pos = np.matmul(inv_system.T,atom_pos)if all(system_pos >= 0.0) and all(system_pos < 1.0):        #如果该原子在盒子中positions.append(atom_pos)with open("rotate_crystalline.data","w") as fdata:        #编写lammps的data文件fdata.write("rotate crystalline Al atoms - written\n\n")              #首行为注释行#头部fdata.write("{} atoms\n".format(len(positions)))            #指定原子数fdata.write("{} atom types\n".format(1))                   #指定原子类型数fdata.write("{} {} xlo xhi\n".format(0.0,system_size))              #指定盒子尺寸fdata.write("{} {} ylo yhi\n".format(0.0,system_size))fdata.write("{} {} zlo zhi\n".format(0.0,system_size))fdata.write("\n")#原子部分fdata.write("Atoms\n\n")for i,pos in enumerate(positions):                    #写入坐标fdata.write("{} 1 {} {} {}\n".format(i+1,*pos))

http://www.ppmy.cn/news/696356.html

相关文章

MySQL数据库第一课 ---------安装

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com 目录 虚拟环境虚拟环境 安装虚拟机 自主安装 简易安装 ———————————————————————————————————————— 虚拟环境虚拟环境 我们现在运行代码的环境是在 PyCharm…

仿ios桌面vivo_vivo精仿ios11主题包专属版下载-vivo精仿ios11主题包自定义版v2.9.9安卓版-007游戏网...

vivo精仿ios11主题包自定义版&#xff0c;这是一款非常热门的安卓仿ios的主题应用软件&#xff0c;这款软件提供最新最全的ios11所有的主题应用和壁纸&#xff0c;还有各种图标免费使用&#xff0c;让你体验安卓和苹果并存的感觉&#xff0c;喜欢的话就来下载吧&#xff01; vi…

vivo手机能升鸿蒙系统,苹果、vivo、OPPO、三星、小米手机能升级到华为鸿蒙系统吗?...

使用苹果、vivo、OPPO、三星、小米等非华为手机的用户如何才能升级到华为鸿蒙系统&#xff1f;有没有这方面的操作方法&#xff1f; 正确的答案是“不能”&#xff0c;也就是说使用以上手机的用户目前来说是不能升级到华为鸿蒙系统的。同时&#xff0c;截止至发稿前&#xff0c…

联想笔记本windows10设备管理器找不到蓝牙

如图&#xff1a; 上联想官网下载蓝牙驱动 输入设备SN&#xff0c;查询对应的驱动并下载 链接: 联想官网

vivo手机便签怎么复制到苹果或别的手机中?

现在的手机一般可分为两大操作系统&#xff0c;一是开源的安卓系统&#xff0c;国内的手机厂商例如华为、小米、vivo、OPPO等都使用的是安卓系统&#xff1b;另外一个是ios系统&#xff0c;仅支持苹果手机使用。有不少网友之前使用的是国产安卓手机&#xff0c;不过在换手机的时…

pikache靶场通关——CSRF攻击

文章目录 前言使用工具第一关&#xff08;host&#xff1a;192.168.1.107&#xff09;、CSRF(get) loginStep.1、以受害者身份登录账号Step.2、以受害者身份点击修改个人信息的按钮Step.3、以黑客身份使用burp进行抓包&#xff08;查看对面修改格式&#xff09;Step4、以黑客身…

在html中引入的echarts调用接口并渲染数据

如果后台给接口&#xff0c;你可以使用JavaScript中的Ajax或者Fetch等方法来调用接口获取数据。然后&#xff0c;你可以使用echarts提供的setOption方法将获取到的数据渲染到图表中。 首先&#xff0c;你需要在页面中引入echarts.min.js文件。然后&#xff0c;你可以在JavaScr…

camera link

camera link是在channel link协议基础上扩展而来&#xff0c;主要是应用于机器视觉领域工业相机和图像采集卡之间的数据传输。 camera link标准包含5种配置&#xff0c;每种配置支持不同的数据位&#xff0c;以下是五种配置。这里主要介绍base模式。 lite - 支持最多10bit&am…