什么是RDF?

其实什么是径向分布函数(Radial distribution function)并不需要我去赘述,毕竟百度一搜一大堆。这里给出一个我第一接触RDF时看到的定义,图和公式给的也比较清楚,比较好理解:RDF定义再说明一点,代码所依靠的公式都是来自于剑桥大学的《THE ART OF MOLECULAR DYNAMICS SIMULATION》

思路

首先,因为我需要读lammps的输出的dump文件,所以readxyzufile()所实现的是读入dump文件的功能。然后进入正题,说白了,计算RDF就是计算粒子与粒子之间的距离,并按照距离的远近进行统计。在这里说明一下,为了能够使代码可以计算包含两种粒子的体系,在一些细节方面会有些小的变动。wrap(dr)实现的周期边界条件规范(wraparound);calRDF()实现的是计算粒子与粒子之间的距离,统计每一层的包含的粒子数。
变量名称说明:
numatom:体系内的粒子总数。
nbins:计算RDF时,球层的总数。
nframe:计算的帧数。
rangemax:计算RDF的范围时0-rangemax。
type_A:粒子A在dump文件中的名称。A粒子为中心粒子。
region:盒子的边长。

代码实现

#calculate RDF
import numpy as np
from numpy import sqrt
def readxyzufile():line1 = f.readline()line2 = f.readline()line3 = f.readline()line4 = f.readline()natoms = int(line4)if natoms != numatom:raise ValueError('numatoms is wrong')line5 = f.readline()line6 = f.readline()line7 = f.readline()line8 = f.readline()line9 = f.readline()for d in range(natoms):line = f.readline()xyz = line.split()atomid = int(xyz[0])type[atomid-1] = int(xyz[1])xu[atomid-1] = float(xyz[2])yu[atomid-1] = float(xyz[3])zu[atomid-1] = float(xyz[4])#print(atomid,xu[atomid-1])
def wrap(dr):if dr > 0.5*region:dr -= regionelif dr < -0.5*region:dr += region
def calRDF():global num_of_A,num_of_Bfor i in range(numatom-1):if type[i] == type_A:num_of_A += 1ix = xu[i]iy = yu[i]iz = zu[i]#print(i)for j in range(i+1,numatom):if type[j] == type_B:num_of_B +=1jx = xu[j]jy = yu[j]jz = zu[j]#print(j)dx = jx-ixdy = jy-iydz = jz-izdx = wrap(dx)dy = wrap(dy)dz = wrap(dz)dij = sqrt(dx*dx+dy*dy+dz*dz)print(i,j,dx,dy,dz,dij)if dij < rangemax:layer = int(dij/dr)#print(layer)count[layer] +=1density = 1
numatom = 64800
nbins = 50
nframe = 1
rangemax = 20.0
type_A = 1#RDF of atoms A with atom B
type_B = 2
region = 40.16
vol = pow(region,3)
filename = 'unwrap_90_ij400_xyz_2000wan.lammpstrj'
f = open(filename)
dr = rangemax/nbins
num_of_A = 0
num_of_B = 0
type = []
xu = []
yu = []
zu = []
count = []
g = []
for i in range(nbins):count.append(0)g.append(0)
for i in range(numatom):type.append(0)xu.append(0)yu.append(0)zu.append(0)for i in range(nframe):readxyzufile()calRDF()
num_of_A = num_of_A/nframe
#density_A = num_of_A/vol
num_of_B = num_of_B/(nframe*num_of_A)
density_B = num_of_B/vol
f.close()
f = open('./rdf_result', 'w')
for i in range(nbins):#volume = 4*np.pi*(3*i*i*dr*dr*dr+3*i*dr*dr*dr+dr*dr*dr)/3normFac = vol/(4*np.pi*num_of_A*num_of_B*pow((i-0.5)*dr,2)*dr*nframe)#normFac = vol/(2*np.pi*numatom*numatom*pow((i-0.5)*dr,2)*dr*nframe)#print(density_B)print(count[i])print(normFac)g[i] = count[i]*normFacprint >>f, '%g %g' % (i*dr,g[i])
f.close()

最后

第一次自己去实现物理量的计算,代码可能还有些问题和不规范的地方,可以指出来大家一起交流讨论。

用Python实现径向分布函数(RDF)的计算相关推荐

  1. 【LAMMPS系列】径向分布函数RDF与结构因子SF

    大家好,我是粥粥. 这几天,用PYTHON写了一个计算SiO2的O-Si间的偏径向分布函数(partial RDF)和针对不同Si近邻(neighbor1,neighbor2-neighbor6)的偏 ...

  2. 用matlab写的径向分布函数RDF

    RDF是径向分布函数Radical distribution function的缩写,指的是给定一个空间,在此空间以一个对象为中心,去寻找周围对象的的概率.对于分子模拟的径向分布函数实则也是求解粒子在 ...

  3. lammps教程:径向分布函数g(r)的计算与输出方法

    大家好,我是小马老师. 本文介绍如何使用lammps计算径向分布函数g®. 径向分布函数(Radial distribution function)是指给定某个粒子的坐标,其他粒子在空间的分布几率. ...

  4. lammps输出RDF(径向分布函数)详解及示例教程

    原创 一直陪着你的 LAMMPS交流站 2021-10-18 11:40 收录于话题#lammps案例16个内容 大家好,小编最近的课题需要输出RDF(径向分布函数),小编就去lammps官网及网络查 ...

  5. 【转帖】径向分布函数程序与简单说明 (小木虫)

    径向分布函数g(r)代表了球壳内的平均数密度 为离中心分子距离为r,体积为 的球壳内的瞬时分子数. 具体参见李如生,<平衡和非平衡统计力学>科学出版社:1995 CODE: SUBROUT ...

  6. 如何用计算机画出分子轨道图,径向分布函数、角度分布函数电子云图形的绘制...

    径向分布函数.角度分布函数电子云图形的绘制 1.目的要求 (1) 绘制波函数及其各种分布以及电子云的图像,观察各种函数的分布情况. (2) 了解计算机绘图方法. 2.基本原理 (1) 程序原理:本程序 ...

  7. Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战

    Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战 目录 Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆 ...

  8. python获取excel某一列所有值-Python读取Excel一列并计算所有对象出现次数的方法...

    第一种方法 import pandas as pd from collections import Counter data = '参赛信息.xlsx' data = pd.read_excel('参 ...

  9. python多线程为啥是假的?(GIL 全局解释器锁)(python多线程不适合并行化的计算密集型代码)

    1. 问: 答: 2. from threading import Thread ​ def loop(): ​while True: ​print("亲爱的,我错了,我能吃饭了吗?&quo ...

最新文章

  1. 掌握ASP.NET技术之捷径
  2. 大数据笔记10:大数据之Hadoop的MapReduce的原理
  3. Oracle10g安装步骤(一)
  4. NeurIPS 2021 | PCAN:高效时序建模,提升多目标追踪与分割性能
  5. intellij2018使用2019的主题
  6. android官方文档中文版_Now in Android:01 - 如何掌握最新的 Android 技术?
  7. Windows 键盘操作快捷方式积累
  8. 通过ResNet-50进行面部表情识别(易懂)
  9. 自制 Chrome Custom.css 设置网页字体为微软雅黑扩展
  10. php对接易宝支付实现真实交易
  11. SqlServer2008创建用户及授予权限
  12. GitHub每月优秀热门项目推荐:2021年12月
  13. u-boot2020.04移植(3、lowlevel_init.S)
  14. 使用unity制作的一款生存类游戏demo(一)
  15. java画板中画直线_画图板(画直线)
  16. 位置式Pid和增量式Pid的定义及应用
  17. 你见过的最全面的Python重点知识总结
  18. pstack命令使用说明
  19. 速达3000 自动导入工具
  20. Arduino ESP8266读取土壤湿度传感器 ADC

热门文章

  1. theta matlab,威尔逊theta法MATLAB程序及算例说明.docx
  2. 送给女朋友的心形照片墙
  3. win10壁纸不能幻灯片放映_教大家Windows10幻灯片壁纸与无序播放怎么设置的方法...
  4. gurobi求解日志log篇
  5. 用友U8物料最后一次出入库日期及计算实际库龄
  6. 请善待老公,其实男人不容易
  7. 如何隐藏CSDN博客文章
  8. Redis按照数字、汉字、拼音快速搜索通讯录接口
  9. 倒计时1天 | 三位 Apache PMC or Committer,两位名企负责人,纵论畅游数据湖体系之密...
  10. 使用COUNT(*)统计指定表行数时报错:将 expression 转换为数据类型 int 时出现算术溢出错误