新浪博客

LAMMPS中的NVT和NVE系综

2018-10-26 14:51阅读:
转载——长空鹤唳的日志
后补:
经过长时间的测算:采用0.1FS 的步长。无可观测到的温漂。但是算到800多PS时断了。预计为缓冲文件溢出导致的。。。
后又测了0.5FS的NVE ,还是存在温度和势能上漂的现象。
又测试了0.3FS的NVE ,目前还没跑完,似乎有微弱温漂的趋势。


自己在MS 模拟MD过程时,对其温飘深恶痛觉。网上一搜,此种问题还是很多的。
弛豫时间 。在统计力学和热力学中,弛豫时间表示系统由不稳定定态趋于某稳定定态所需要的时间
http://www.mdbbs.org/viewthread.php?tid=6465&extra=&page=3
我有一个疑问,想请教一下大家
如果是NVE系综,也就是孤立系统,能量不变
如果我同时调节温度,用MD算起来,看似也没有问题,但是我有几个疑惑:
1. 温度对应动能,既然NVE系综能量不变,同时有调节温度,那温度改变带来的能量改变去哪儿了?
2. 关于动能的去向,我有两个猜测,一是这部分动能的变化有势能来补充,以保证系统总能量不变,可是这样似乎不合逻辑,凭什么要势能去补充? 二是,这不能动能改变的能量立即从系统中移除,如果是这样的话,NVE系综中能量不变的说法看上去又没什么道理了。
还有其它的解释吗?
3. 是不是NVE系综就不应该调节温度呢,任其温度自动变化? 这样看起来也不太合理。
-------------------------
通常我们模拟微正则系综时
希望其在一定的能量轨迹上
当其能量不满足我们的要求时
我们就要对微正则系综进行能量的调节
具体是通过调节温度或者说动能来调节能量
当统计能量值达到要求后即停止温度或者动能的调节
在这个调节过程中整个系统并不是封闭系统
需要增加或者取走能量
r>停止调节后的系综为微正则系综
势能和动能有涨落
势能涨则动能落
反之动能涨则势能落
但总能量不变
视为封闭系统
-----------------------------------
给你一份详细的资料(See the attached file),里面针对具体的实例有详细的程序pseudocodes,对你彻底解决这么问题应该没有问题 Good Luck
An efficient Monte Carlo procedure has been developed by Creutz and coworkers. Suppose that we add an extra degree of freedom to the original macroscopic system of interest. For historical reasons, this extra degree of freedom is called a demon. The demon travels about the system transferring energy as it attempts to change the dynamical variables of the system. If a desired change lowers the energy of the system, the excess energy is given to the demon. If the desired change raises the energy of the system, the demon gives the required energy to the system if the demon has sufficient energy. The only constraint is that the demon cannot have negative energy. The demon algorithm for a classical system of particles is summarized in the following:
1. Choose a particle at random and make a trial change in its position.
2. Compute ΔE, the change in the energy of the system due to the change.
3. If ΔE ≤ 0, the system gives the amount |ΔE| to the demon, that is, Ed = Ed ? ΔE, and the trial configuration is accepted.
4. If ΔE > 0 and the demon has sufficient energy for this change (Ed ≥ ΔE), then the demon gives the necessary energy to the system, that is, Ed = Ed?ΔE, and the trial configuration is accepted. Otherwise, the trial configuration is rejected and the configuration is not changed.
----------------------------
关于微正则系综的速度标度问题,马文淦的计算物理学里是这样讲的:
一般情况下,对于给定能量的系统不可能给出精确的初始条件。这时需要先给出一个合理的初始条件,然后在模拟过程中逐渐调节系统的能量达到给定值。其步骤为:首先将运动方程组解出若干步的结果,然后计算出动能和位能,假如总能量不等于给定的恒定值,则通过对速度的调整来实现能量守恒
......
采用对速度标度的办法,可以使速度发生很大的变化,为了消除可能带来的效应,必须有足够的时间让系统再次建立平衡,在达到平衡阶段后,必须检验粒子的速度分布是否符合Maxwell-Boltzmann分布。
而陈舜麟的计算材料科学里则提到计算机模拟中对于宏观物理学量的计算无法通过系综平均来直接实现,只能用时间平均来代替,如果在理想状态下,nve系综里总能守恒,沿着分子动力学模拟生成的任何一条相空间轨道,能量保持不变,但是实际上,势函数近似,位势截断,微分方程近似,和数值舍入误差无法忽略,这就会导致体系出现能量漂移,相空间轨道无法满足反演不变性。而且动能计算的路径并不是连续的,在时间间断点又必须采用加权平均的方法,所以为了让体系满足能量守恒这一自然规律,就必须要人为进行速度标定。
------------------------------------
不知你是怎么设定的在使用NVE系综的同时还调节温度,假设你用的是lammps,可能你同时设定了fix nve与fix nvt,这种情况下,一个时间步内粒子运动轨迹会被以不同的方式积分两次,这样将得到的一个怪异的动力学方程(具体是什么样没研究过。。);
因此你要调节温度就用nvt就行了;在nve下只能调节能量的,虽然提高能量可提高温度,但无法进行确定性的调节。
-----------------------------------
楼上,nve系综下的分子动力学中由于势的形式和参数都已经确定,而粒子的位置是粒子运动的结果,也是不可更改的,如果要调节系统能量,就只能够改变动能,而改变动能就会改变温度,所以由能均分定理,在nve系综下对体系温度进行控制也就调整了系统的动能。
---------------------------------------
NVT温度有起伏(程度视系统大小而定),最后一个snapshot可能不是正好是你要的温度。所以如果需要用最后一个snapshot来做为NVE的起始,可以先scale一下速度,再做一段平衡。
具体scale方法如下:
在NVT下,平衡后,运行足够时间,可以得到平均的“系统总势能“。这就告诉你NVE下的“系统总势能”应该是多少。同时你需要系统比如在300K下运行,那你也就知道了系统需要多少动能。从而知道系统的总能量应该是多少。
平均系统总势能+1/2*(3N-6)*Kb*T = 所期待的系统总能量
用最后一个snapshot,只要运行1步NVE,你就知道这个snapshot所拥有的当前总势能是多少。
需要scale 的温度 = (所期待的系统总能量 - snapshot 当前总势能)/(1/2*(3N-6)*Kb)
所以NVE你只要scale温度到某个值,而且只要scale一次就可以了。但是不要忘了还要做一段平衡。
------------------------------------------
lwan可是个牛人 ,可能是回帖时没有想到LAMMPS中还有teme rescale命令吧
--------------------------------------------
我看到的清华的一篇文献上就是通过能均分定理调节能量的,
所以就觉得是理所当然了,才有上面那样的回复 ...
抱歉,
嗯。
NVT系综的宏观条件就是系综里的系统和大热源接触达到平衡,
而NVE系综则是系综里的系统的delta E趋近于零(孤立系),
因此如果固定温度的话,nve确实相当于系综中的系统和一个大热源接触,
我也觉得这种情况下达到平衡后应该就是NVT系综,
但是这个和为了保持能量守恒所做的速度标度应当是不同的情况。
-------------------------------------------------
我觉得xubest的帖子里已经说了具体操作了
进行NVT的时候,是固定温度,然后调整粒子速度平方,是体系温度达到固定的温度,这个固定的温度是要输入的内容
进行NVE的时候,是固定总能,但是由于势能已经固定,所以只能调整动能,时刻注意使系统总能保持在确定值,具体做法是,先根据当前的势能和固定的总能得到应该具有的动能,然后由能均分定理确定体系应该达到的温度,同时根据此时计算出的动能计算现在的实际温度,然后利用某种标度方法利用这两个温度的关系重标度粒子的速度使之达到能均分定理所确定的体系应达到的温度。此时固定的总能是要输入的内容,而每一步应达到的温度都是NVE模拟时软件内部已经写进去的控制方法。
不过我不知道我的这种理解对不对,因为我主要是算材料的,更多的使用NPT系综,对于NVT和NVE的了解更多的是通过读文献得来,没有怎么实际做过。
-----------------------------------------------
看了一下大家的回复,想把这个问题理清一下,不妥之处还希望大家轻些拍砖;)
1、采用nve系综时,理论上讲体系应保持能量守恒,其具体能量值是由体系初始状态(即初始构型与初始速度分布)决定,同时,在达到平衡后,体系的温度也将在某个平均值上下波动,但这个平均温度的具体值取决于体系自身的热力学性质(如比热)与体系的初始状态;
2、采用MD方法作nve系综模拟时,由于算法误差,体系能量并非严格守恒,如算法不太好的话,体系可能会出现能量漂移现象,这时需对体系作一些速度标度(rescaling)处理,这点realasking与xubest已经作了详细的阐述了;当然需要强调的是,这种速度rescaling处理只是对数值算法误差进行的一些修补,其目的最终是要得到一个合理的nve系综;
3、如果需要对体系进行温度调节(如楼主所提出的),即让体系的温度保持在某个给定的值上,这即对应于一个nvt系综,此时体系的温度为状态控制参量,在控制温度的过程中必然需要能量输入与输出(与热源耦合),在MD中,这种能量的输入与输出同样可通过速度标定来实现(如lammps中的temp/rescale),同样需要强调的是,这里的速度rescaling处理则是为了得到一个nvt系综(实际上得到的是伪nvt系综,详见各MD参考书);
4、对于MD方法nvt系综的实现,速度标定只是其中的一个办法,还有其它算法,如nose-hoover算法、Andersen算法等;
就这么多吧,不知道说清楚没;)
P.S.,本人确实对lammps中的fix temp/rescale不熟,fix temp/rescale的确需要与fix nve一起使用才能实现对温度的控制,但这实际上已对应于一个nvt系综了。。。
-------------------------------------------------
在实际的分子模拟中,NVE系综的能量和温度变化是很正常的事情,原因有两个: 一个是我们选取的体系远远小于热力学极限,也就是粒子数目 [;N\rightarrow\infty;],所以波动是必然的;第二,我们采用的积分方法都是选取一定的步长,是离散的,因此与分析解有一定的误差(可以参考Frenkel一书中的Lyapunov不稳定性,P81)。当然,我们可以尽可能地设计好的数值积分算法,以保证NVE体系Hamilton守恒。
其余的问题是涉及具体的算法操作:一般我们先要对初始构象进行平衡,这时由于初始构象远远偏离平衡态(例如有些粒子很近,力很大,有些粒子较远,力很小,或者干脆彼此没有相互作用),所以起初的温度波动可能很严重,这是需要你采用Verlocity Rescaling重新标定下温度。需要注意的是,在production run中,你要已经平衡的初始构象自由演化,这才是真正的NVE模拟。

-------------------------------------------------
对nve 进行速度标度的原因来自体系初始条件同平衡后最优条件的偏差,比如原子的粗略指定的位置和速度。正如#4 第一篇引文中的”对于给定能量的系统不可能给出精确的初始条件“,而只能给定一个“合理” 的初始条件,如果不进行修正,体系在总能量不变的前提下演化到一个不是我们期望的温度上。
这个修正最常用的是速度标度方法,当然也可以有别的方法,只要平衡之后温度是我们的预期既可。这个过程称作平衡化过程。这个完成之后的模拟才是在那个温度下的体系在nve 系综里的轨迹。
-----------------------------------------------------
至于温度改变后,能量哪里去了,可以从能均分定理理解。
体系的能量(nve 的e)包含动能和势能2部分,对于一个m 个n原子分子组成的体系,有3m个平动自由度,3m个转动自由度,(3n-6)m 个振动自由度,另外,每个振动都还有一个势能项。体系达到平衡后,总能量均匀分布在这(6n-6)m 个项上,总能量值和初始的位置与速度有关,同积分误差关系不大。
当体系到达平衡后,如果温度比预期的低,进行速度标度后每个动能项相应提高,但势能项未变,体系会沿着动能降低,势能增加的方向演化,直至再次平衡。反复调节后可使体系到达指定温度下的nve 系综中的平衡。
nve 系综只是总能不变,并没有指定这个总能的数值,也无法指定。相反,对这样一个孤立体系,温度是更加关心的量。
---------------------------------------------------------





http://www.mdbbs.org/viewthread.php?tid=37531
在计算过程中出现了一个问题,我在600k以下的nve整体温度可以保持恒定,可是在大于600k一下的nve整体温度逐渐增加,不知道为什么?还请各位大侠帮我分析下!在此谢谢了!

弛豫的时间久一点,就行了!
http://www.mdbbs.org/thread-18296-1-1.html
NPT系综动力学过程温度漂移问题
本人在对NPT系综下的非晶体聚合物模型进行动力学过程模拟时,发现动力学过程的平均温度与开始设置的温度
总有一定差别,即在动力学过程中系统的温度出现了漂移现象,而其漂移程度与系统的温度有关,一般情况下,
系综的温度越高,漂移的越严重,请问对于此问题各位有什么见解和建议。
不胜感激!
终于有人回复了,可能是参数设置的问题,当我把时间积分步长改为原来的十分之一时,发现温度几乎不在漂移了,
想知道温度漂移对模型的结果是否有什么影响,如果我把MD过程的平均温度作为系统的温度,并把系统其他参数的计算结果作为
该温度下的参数,是否可以呢?
除去质心速度,在计算温度
在系统还未达到动力学平衡时,温度 能量等参数都不能当模拟结果用。。
在平衡之后,再对系统运行动力学模拟,取这段时间的平均值作为计算结果。。
http://www.mdbbs.org/viewthread.php?tid=36749
请教下大家,lammps里温度怎么设置啊,我想在300K下模拟石墨烯,用的是这条命令fix 1 all nvt temp 300 300 100,可温度不是在300附近浮动,而是一直增加呢
fix 1 all nvt temp 300.0 300.0 0.01
我的计算机最早作驰豫时候0k的情况下没有驰豫现象,所以改为300k,当时也按你的设定,但是也是出问题的,参考了lammps的解释改为0.1,后就可以了
http://www.mdbbs.org/viewthread.php?tid=36715


在模拟时候想改变整个过程的温度,是够可以选择Nose-Hoover控制方法。参看很多内容,很多恒温模拟的过程都选择N-H方法,如果温度过程是变化的,该怎么控制。
这个可以用Simulated annealing实现的。

http://www.mdbbs.org/viewthread.php?tid=35670
请教NVT体系温度上不去的问题
本人在做碳纳米管/环氧树脂体系的NVT模拟,温度希望达到300K,但是温度一直稳定在40K左右,将设定温度调高到600K,情况还是一样,以下是部分程序。自己刚接触lammps,还请各位高手帮帮忙。万分感谢!!
minimize 1.0e-3 1.0e-5 1000 1000
dump 0 all xyz 100000 init.xyz
timestep 1.0
thermo_style custom step etotal pe ke ecoul evdwl temp press
thermo 100
group move molecule 0
group fix1 subtract all move
fix 1 move nvt temp 600.0 600.0 100.0
可能是你的参数不太合理,所以达不到设定的温度,我也碰到类似的问题。
你的ni文件不全啊,不好说那些地方有问题。时间步长是不是大了。
采用逐渐升温试试。还有你是不是将fix1固定了?
[。。。]这是所有代码,我的timestep是1fs。已经不大了。还有怎么逐步升温呢?可不可以请大侠详细说下,因为我的确是初学的菜鸟~~多谢多谢~~
不知道有没有用 temp/rescale 尝试过
没有初始速度, 好像有两个系综
fix nvt fix nve
可去掉fix nvt, 用fix temp/rescale 试试


nvt的步长太大了,我以前也遇到过类似的问题,好像以前帖子有关于这个问题的讨论
fix 1 move nvt temp 600.0 600.0 0.1
试试


输出的温度有可能不是体系的总温度

Tdamp设的太大了,将
fix 1 move nvt temp 600.0 600.0 100.0
换成
fix 1 move nvt temp 600.0 600.0 0.1
http://www.mdbbs.org/viewthread.php?tid=36465
NVT系综下弛豫,动能,势能,温度,内应力,体积,压强等热力学参数的一般变化情况?
正则系综相当于将你模拟的体系放置在一个想象的热浴当中,当然热浴的温度是你指定的,你模拟的系统和热浴会保持同样的温度,当你模拟的系统由于某些原因温度升高时,能量就会流进这个热浴,当然这不会引起热浴的温度变化,因为热浴是无限大的。你的模拟中,碳原子是一个体系,另外的体系就是热浴
http://www.mdbbs.org/viewthread.php?tid=30262
再谈温度控制的问题
在论坛里看了很多温度控制的问题,学习了很多知识,还是没能解决我现有的问题,所以再次发贴来讨论。
我的工作其实很简单,就是对一小段动物蛋白序列同源模建后,再用namd作动力学模拟。
相信很多人都按照那个namd的tutorial做过,我也是这样,顺利完成tutorial之后就模仿着作自己的序列结构,先作能量最小化和能量平衡。
模拟中,conf文件就是根据tutorial上的改造而来,其中关于温度的控制和分析结果总是不理想。
控温方法采用跟tutorial上的一致langevin控温(个人觉得这种方法也比较适合我的问题),温度设定为310k。然而跑完之后再对系统温度进行分析时,发现其平均值偏离设定值十度以上,再安tutorial上对maxwell分布进行分析时,拟合出的温度更是与设定值偏离的离谱。之后又采用temperature coupling 的方法温控模拟后结果与langevin一致。
所以我想知道,既然采用了控温,温度就不应该偏离设定值太远(个人觉得10度内可以接受),怎么会出现以上的情况?
有一种可能是我的结构不合理,但是我拿三个结构进行了试验,结果均如此,困惑中...
我的问题解决了,谢谢大家的关注。
这应该是一个很常见的问题,不知道xdjm们是否遇到过。
conf中rigidbond=all时,减少了体系的自由度,所以模拟出的分子速率分布偏小,因而maxwell分布拟合出的温度偏低,设定值=310k的话拟合值可能会在190-200k之间,结论很不合理。
rigidbond=none时理论值与模拟值吻合很好。
这个问题讨论的是温度,但与温控方式没什么关系。
http://www.mdbbs.org/viewthread.php?tid=25312
lammps中利用NVT控温,加上速度后温度降低


ammps中利用NVT控温,加上速度后温度降低
利用NVT控制upper group温度为100K,并给upper group内原子施加一平动速度,利用temp/com消除平动速度对温度计算的影响
compute temp_upper upper temp/com
velocity upper set 0.1 NULL NULL units box #给upper施加速度
fix 222 upper nvt 100.0 100.0 0.02 drag 0.2 #并利用NVT控制upper温度
但是加上速度后,upper group的温度低于100K,并且速度越高,upper group的温度越低。
是不是tem/com命令用错了?
感觉 nvt是用来调温的。。不可能一开始温度就达到要求吧。。。
需要通过run来达到自己需要的温度的目的
不加速度的话 很快就能调到想要温度
加上速度后, 温度就一直低于想要的
估计是没把平动速度刨除去
你的问题似乎也没有说明白,没有做过你的东西。不过你的fix命令用没有用fix_modify命令修改温度为你要设定的计算upper的温度方法。另外你说温度降低是从哪里看来的,你也没有说明白,应该说upper在你的问题中似乎算是局部温度了吧。似乎也有印象如果减去一个方向的运动,在thermo输出的地方是不大一样的,为什么就还没有想过。你控制upper的温度,非upper的温度如何控制呢,会不会对upper影响?这些都不知道。
加上fix_modify后该问题已经解决 非常感谢
http://www.mdbbs.org/viewthread.php?tid=34128
我看到人们用NVE系宗,从一些帖子看到,如果用NVE,在MDP文件里,压强、温度耦合都为no,就可以了,但是都给出了开始温度,这个开始温度怎么设置了,请大侠指教

NVE系综温度的控制主要靠你动力学中的动能 而动能的控制则取决于初始速度的给定,你可以通过设定初始速度来控制温度,同时也要注意初始结构对势能造成的影响
http://www.mdbbs.org/viewthread.php?tid=29709
我用下面命令标定了初始速度,然后run了几万步,发现其温度压力体积等许多参数都没有变化?为什么在许多模拟中还要加入fix nvt/npt等调节温度的命令呢?
而且我加入fix nvt命令后,体系的温度压力等参数反而不稳定了(当然我调节的也是300k到300k),这两个问题总是想不明白,希望高人指点!
velocity all create 300 102486 mom yes rot yes dist gaussian
run 80000
定义了初始速度只会产生一个参考温度,你没设置模拟的目标温度,没有设置nvt之类,你的体系原子速度和位置信息没有updated,当然你的温度压力都没有变化了,加了fix nvt就是恒容恒温Nose-Hoover热浴模拟,计算的是一个统计的温度和压力,当然会有波动,只要波动不大就行了

我的更多文章

下载客户端阅读体验更佳

APP专享