jjzjj

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

lammps 交流站 2024-05-08 原文

原创 一直陪着你的 LAMMPS交流站 2021-10-18 11:40

收录于话题#lammps案例16个内容

大家好,小编最近的课题需要输出RDF(径向分布函数),小编就去lammps官网及网络查找了如何用lammps输出RDF,小编就把自己学到的用法在这里跟大家分享,也算是小编学习过程中的一个笔记。

   本教程也是小编现学现卖,不足之处请各位指出,希望能给读者提供一定的帮助,读者可结合实际需求,同时希望专业前辈提出不足,小编会和大家共同学习。

01

RDF介绍

1.径向分布函数概念     

      在统计力学中,多粒子系统(原子、分子、胶体……中, 径向分布函数(又称对关联函数)描述粒子密度作为距参考原子的距离的函数如何变化。

如果给定粒子当做原点,体系平均粒子数密度为 ρ=N/V,则距原点为r处的局部时间平均的密度为 ρ*g(r) 。这是对均匀的各向同性系统的简化定义。

     简言之,这是对于距参考粒子距离为r处找到粒子的相对概率的测量,参考态是理想气体。一般的算法是计算在距参考原子 r 到 r+dr 这样的壳层里有多少粒子。

RDF的定义的定义式如下:

式中,V为系统的个数,N为系统中的粒子数,n(r)为纳米粒子半径dr处厚度下的原子数。

2.径向分布函数意义

     径向分布函数通常用g(r,r')来表示。对于 |r-r'| 比较小的情况,g(r,r') 主要表征的是原子的堆积状况及各个键之间的距离。对于长程的性质,由于对于给定的距离找到原子的几率基本上相同,所以g(r,r')随着|r-r'|的增大而变得平缓,最后趋向于恒值。通常定义 g(r,r')时,归一化的条件为 |r-r'| 趋向于无穷大时,g(r,r') 趋向于一。通常,对于晶体,由于其有序的结构,径向分布函数有长程的峰,而对于非晶物质(amorphous matter),则径向分布函数一般只有短程的峰。

    径向分布函数通常被用来描述原子有序性及描述电子的相关性(指的就是给定一个电子,其他电子在此电子周围出现的几率),也就是在RDF图中,峰所在位置就是电子出现概率大的位置。

02

官网用法

我们在lammps官网可以看到输出RDF的具体语法

compute ID group-ID rdf Nbin itype1 jtype1 itype2 jtype2 ... keyword/value ...fix ID group-ID ave/time Nevery Nrepeat Nfreq value1 value2 ... keyword args ...

  

举例:

compute 1 all rdf 100compute 1 all rdf 100 1 1compute 1 all rdf 100 * 3 cutoff 5.0compute 1 fluid rdf 500 1 1 1 2 2 1 2 2compute 1 fluid rdf 500 1*3 2 5 *10 cutoff 3.

     在compute rdf命令中,Nbin为统计量(样本量),数越多可能曲线会越光滑(一般200-500);itype1是径向分布函数的中心原子, jtype1是被统计的原子。

     在fix ave/time命令中,Nfreq必须是Nevery的整数倍,

Nevery

必须是非零。用compute rdf命令时,value1、value2 ... 为c_ID[1],c_ID[2],c_ID[3],输出结果按列依次为序号,c_ID[1]group到原点的距离,即x轴,c_ID[2]g( r )c_ID[3]coor( r ),即 g( r )的积分,也就是输出的数据以c_ID[1]为横轴,以c_ID[2]c_ID[3]为纵轴,就可以得到某一时刻的RDF曲线。

     例如以下命令可用于输出每1000步的rdf值,在截断半径范围内,距离被分成200段:

compute rdf all rdf 200 2 6  #rdf       fix rdf all ave/time 1000 1 1000 c_rd1[1] c_rd1[2] c_rd1[3] file data.rdf mode vector

03

代码示例

  本文将之前做的一个案例CuNi合金熔化模拟过程的1550K-2500K升温过程的RDF输出,添加的代码为:

compute rdf all rdf 200fix saverdf all ave/time 100 100 10000 c_rdf[1] c_rdf[2] file data.rdf mode vector

完整in文件如下:

#lammps交流站案例
units           metal
boundary        p p p

atom_style      atomic

read_data  melting.in.dat

lattice         fcc 3.65 
region          box block -30 30  -5 5 -5 5
#create_box      1 box
#create_atoms  

mass            1  64.55
mass            2  58.69 

pair_style      eam/alloy
pair_coeff      * * CuNi.lammps.eam Cu Ni

region          1 block INF -0.01  -6 6  -6 6
group           left region 1
region          2 block -0.01 INF  -6 6 -6 6
group           right region 2

timestep        0.002
velocity        all create 1550.0 4928459 dist gaussian
fix             1 all npt temp 1550 1550 0.1 iso 0 0 0.2

dump            melt all atom 10000 dump.dat
#dump            melt all custom 1000 dump.atom.slow tag type xu yu zu vx vy vz  sxx syy szz
restart         50000  restart.*

thermo          100
run             4000

#thermo_style    custom step temp etotal pe press vol pxx pyy pzz pyz pxz pxy

unfix   1
fix             1 right npt temp 1550 2500 0.1 x 0 0   0.2
#1.输出rdf
compute rdf all rdf 200
fix saverdf all ave/time 100 100 10000 c_rdf[1] c_rdf[2] file data.rdf mode vector
run             2000

unfix   1
fix             1 right npt temp 2500 1550 0.1 x 0 0   0.2

run             44000

unfix           1
fix 1     all nph iso 0.0 0.0 0.2  
run             500000

    最后,用记事本打开生成的data.rdf文件,用里面的数c_rdf[1] c_rdf[2]绘图,就可以得到如下的RDF曲线。

注意

1.文中所需的data文件及势文件已上传至QQ群-lammps交流站。

更多案例请关注lammps交流站

LAMMPS交流站

有关lammps输出RDF(径向分布函数)详解及示例教程的更多相关文章

  1. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  2. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  3. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  4. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  5. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

  6. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  7. ruby - 分布式事务和队列,ruby,erlang,scala - 2

    我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和

  8. ruby - 将 spawn() 的标准输出/标准错误重定向到 Ruby 中的字符串 - 2

    我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])

  9. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  10. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

随机推荐