原创 一直陪着你的 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 #rdffix 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交流站
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
这是一道面试题,我没有答对,但还是很好奇怎么解。你有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][
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和
我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])
如何在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中能不能做到类似的简洁?我可以只
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,