语法:html
fix ID group-ID style_name keyword value ...
keyword = temp or iso or aniso or tri or x or y or z or xy or yz or xz or couple
or tchain or pchain or mtk or tloop or ploop or nreset or drag or dilate
or scalexy or scaleyz or scalexz or flip or fixedpoint or update temp values = Tstart Tstop Tdamp Tstart,Tstop = external temperature at start/end of run Tdamp = temperature damping parameter (time units) iso or aniso or tri values = Pstart Pstop Pdamp Pstart,Pstop = scalar external pressure at start/end of run (pressure units) Pdamp = pressure damping parameter (time units) x or y or z or xy or yz or xz values = Pstart Pstop Pdamp Pstart,Pstop = external stress tensor component at start/end of run (pressure units) Pdamp = stress damping parameter (time units) couple = none or xyz or xy or yz or xz tchain value = N N = length of thermostat chain (1 = single thermostat) pchain values = N N length of thermostat chain on barostat (0 = no thermostat) mtk value = yes or no = add in MTK adjustment term or not tloop value = M M = number of sub-cycles to perform on thermostat ploop value = M M = number of sub-cycles to perform on barostat thermostat nreset value = reset reference cell every this many timesteps drag value = Df Df = drag factor added to barostat/thermostat (0.0 = no drag) dilate value = dilate-group-ID dilate-group-ID = only dilate atoms in this group due to barostat volume changes scalexy value = yes or no = scale xy with ly scaleyz value = yes or no = scale yz with lz scalexz value = yes or no = scale xz with lz flip value = yes or no = allow or disallow box flips when it becomes highly skewed fixedpoint values = x y z x,y,z = perform barostat dilation/contraction around this point (distance units) update value = dipole or dipole/dlm dipole = update dipole orientation (only for sphere variants) dipole/dlm = use DLM integrator to update dipole orientation (only for sphere variants)
例子:框架
fix 1 all nvt temp 300.0 300.0 100.0 fix 1 water npt temp 300.0 300.0 100.0 iso 0.0 0.0 1000.0 fix 2 jello npt temp 300.0 300.0 100.0 tri 5.0 5.0 1000.0 fix 2 ice nph x 1.0 1.0 0.5 y 2.0 2.0 0.5 z 3.0 3.0 0.5 yz 0.1 0.1 0.5 xz 0.2 0.2 0.5 xy 0.3 0.3 0.5 nreset 1000
详细说明:ide
这些命令用来对Nose-Hoover型的non-Hamiltonian运动方程进行时间积分。该运动方程用以从正则系综、等温等压系综、等焓系综采样生成原子的位置和速度,从而对所定义的群组内的原子在每个时间步进行位置和速度的更新。(添注:事实上,系综最简单的理解是经过命令的字母,譬如NVT中N表明系统的原子数、V表明系统的体积、T表明系统的温度,所以NVT就表明恒原子数恒温恒体积的系综,具体的积分迭代形式能够查阅相关的分子动力学模拟专著。)函数
控温器(thermostatting)和控压器(barostatting)经过添加一些动态变量来实现,这些动态变量与粒子速度(控温)和模拟区域的尺寸(控压)相关联。在基本单向的控温和控压以外,这些命令还能够与粒子控温器耦合建立控温器链,或者与控压变量耦合建立另外一条控温器链。控压器与盒子的整体积、或者包括xy、xz及yz的盒子夹角相互耦合。来自于控压器的外部压强能够定义为一个标量(等压系综)也能够定义为对称应力张量(固定应力系综)。若是命令被正确使用,时间平均的温度和应力张量会与经过“Tstart/Tstop”和“Pstart/Pstop”所指定的目标值相符。(添注:简单的理解来讲,控温改变粒子速度;控压改变系统盒子的尺寸。注意比较控压器定义为标量或者是对称应力张量的区别,在后者盒子会有剪切自由度,而前者状况下,盒子在控压过程当中一直保持只是长方体的block。)oop
所使用的运动方程是Shinoda等人的方程,将Martyna、Tobias和Klein的流体静力学方程与Parrinello中的Parrinello和Rahman提出的应变能结合在一块儿。 时间积分框架采用Tuckerman等人推导的时间可逆测度保持 (time-reversible measure-preserving)Verlet和rRESPA积分器。this
——————————————————————————————————————atom
fix命令下经过nvt和npt的控温参数是用temp关键词来进行设定。其它控温相关的关键词包括tchain、tloop和drag,下面对此进行讨论。scala
控温器仅仅应用在拥有平移自由度的粒子。平移自由度能够在进行控温前移除偏速度(bias velocity),参见下面进行的讨论。指望的温度在运行的每个时间步都随着Tstart到Tstop不断上升。Tdamp参数的单位是时间单位,用来决定温度的释放速度的快慢。举例来讲,Tdamp的数值若是设定为10.0,这意味着释放温度在大概10个时间步的范围内进行(譬如tau,fa及ps,这根据units命令中的设定时间单位来肯定)。只有在fix命令中所指定的group,他们的速度和位置才会经过指定系综下进行积分更新。rest
NOTE
Nose-Hoover 控温器不会在Tdamp取任意值得状况下都能很好地工做。若是Tdamp取值过小了,温度会剧烈的抖动;若是取值太大了,温度须要很长的时间才能取得平衡。对于大多数模型,一个很好地选择是Tdamp取值大约为100个时间步。值得注意的是,对于绝大部分时间设定,这不等同于100个时间单位。一个简单的办法来肯定这项,是经过直接变量定义的方法来肯定,例子以下: (添注:这很重要,注意区别时间单位和时间步的区别,这二者只有dt=1的时候才是一致的,举例来讲,若是在metal单位制下,时间单位是ps,Tdamp的单位也是ps。此时若是时间步设定为0.001,也就是1fs,这个时候,Tdamp取100个时间步,那就是0.1ps,那么Tdamp=0.1,而不是100。)
fix 1 all nvt temp 300.0 300.0 $(100.0*dt)
——————————————————————————————————————code
在该fix命令下npt和nph的控制器参数可使用一个或一个以上,分别为iso, aniso, tri, x, y, z, xy, xz, yz 和 couple 等关键词。 这些关键词能够用来特定控制外部应力张量的六个份量,或者耦合这些份量一块儿所以他们(应力份量)所表明的尺寸能够在一个恒压模拟中一块儿变化。
其它相关的关键词pchain, mtk, ploop, nreset, drag, 和dilate 会在接下来进行讨论。
正交模拟盒子(长方体)有三个能够调整的尺寸(x, y, z)。三斜(非正交)模拟盒子能够有六个能够调整的尺寸 (x, y, z, xy, xz, yz)。经过命令creat_box, read data 和 read_restart 命令能够指定模拟盒子是正交仍是非正交的,而且明白xy,xz,yz等倾角参数的内涵。(添注:相关内容能够参见个人知乎专栏 泛柏舟:lammps中怎么创建斜方晶并进行计算)
六种应力张量份量下的目标压强能够独立的经过x, y, z, xy, xz, yz 关键词来控制,分别对应于模拟盒子的六个尺寸。对于每一种份量,外部压强或张量份量在每个时间步都由Pstart向Pstop演化。若是目标压强是指定为一个份量,那么该份量对应的盒子尺寸也会在模拟中发生变化。例如,若是使用关键词y,那么盒子在y方向的长度就会发生变化。若是xy被使用,那么盒子xy夹角参数也会发生改变。在未指定应力份量的状况下,对应的盒子尺寸就不会发生改变,可是你仍然有机会能够经过另外的fix deform命令来改变尺寸。(添注:fix deform在NVT系综中一样能够改变盒子尺寸,不少人困惑的是,若是是NVT,那么体积不变尺寸不变,为何fix deform能够改变尺寸呢,能够理解为每一次deform后的体积是不变的,此时在NVT中进行驰豫。就至关于拉伸过程当中,每次拉伸后都是一个独立的NVT系综。)
值得注意的是,若是使用xy, xz, 或者yz 关键词,模拟盒子必须是非正交三斜的,尽管初始参数能够设置为0.0 。(添注:简单理解,必须容许盒子的夹角有自由度,若是你定义成正交的长方体,至关于就不容许夹角有自由度,初始参数只是结构的初始构型。)
在全部控压器关键词中,Pdamp参数操做起来和Tdamp基本是一致的,用来决定压强释放的时间尺度。例如,取值10.0就意味着在大约10个时间单位下释放(进行控制)一次压强。
NOTE
Nose-Hoover 控压器不会在Pdamp取任意值得状况下都能很好地工做。若是Pdamp取值过小了,压强和体积会剧烈抖动;若是取值太大了,压强须要很长的时间才能取得平衡。对于大多数模型,一个很好地选择是Tdamp取值大约为1000个时间步。然而,Pdamp的单位是时间单位,对于绝大部分模拟的单位设定中,这不等同于时间步。
无论在fix命令中所指定的group群组包括哪些原子(只有这些原子须要进行时间积分),压强或者应力张量的做用是全局性质的,是做用在总体全部原子上的。相似的,当模拟盒子的尺寸发生改变时,全部的原子会缩放到新的位置。除非,对于dilate-group-ID下的原子使用了关键词dilate。这种方法在某些状况下是十分必要的,例如,对于固体基质中原子进行固定而控制周边流体的压强。而使用该选项须要十分谨慎,因为它会按照不符合物理规律的方式膨胀一些原子而对另外一些原子不采起这一做用,这一会使得在一对原理膨胀起源的原子(一个已膨胀,一个未膨胀)之间引入不合理的大的瞬时位移。一样须要说明的是,对于没有在fix nvt中所定义群组的原子,能够采用其余的时间积分,包括fix nve 和fix nvt,无论他们是否受到膨胀做用。
——————————————————————————————————————
关键词couple容许将两个或三个压强张量的对角线份量耦合做用。用关键词指定的值来肯定耦合的对象。 例如,xz表示应力张量的Pxx和Pzz份量耦合。 Xyz表示全部3个对角线份量都已耦合。 耦合意味着两件事:瞬时应力将做为相应对角线份量的平均值进行计算,而且耦合盒子尺寸将以锁定步长一块儿更改,这意味着耦合尺寸将在每一个时间步上以相同的百分比进行扩张或收缩。 任何耦合尺寸的Pstart,Pstop,Pdamp参数必须相同。 耦合xyz能够用于2d仿真; z维度只是被忽略。
——————————————————————————————————————
iso,aniso和tri关键词只是等同于一块儿指定其余几个关键字的快捷方式。
关键词iso意味着三个对角线份量一块儿耦合来计算静水压强,而且膨胀/收缩做用在三个维度上同时做用,当使用“iso Pstart Pstop Pdamp”时等同于设定如下四个关键词(添注:更加简单的理解,此时压强在三个方向是各向同性的,意味着Pstart和Pstop在三个方向都是一致的。):
x Pstart Pstop Pdamp y Pstart Pstop Pdamp z Pstart Pstop Pdamp couple xyz
关键词aniso意味着x,y和z尺寸是相互独立的进行控制的,分别采用Pxx, Pyy和Pzz。当使用“aniso Pstart Pstop Pdamp”时等同于设定如下四个关键词(添注:更加简单的理解,此时压强在三个方向是各向异性的,意味着Pstart和Pstop在三个方向都是相互独立的,能够大小不同。):
x Pstart Pstop Pdamp y Pstart Pstop Pdamp z Pstart Pstop Pdamp couple none
关键词tri意味着x,y,z,xy,xz和yz尺寸是分别独立的控制的,采用“tri Pstart Pstop Pdamp”默认采用如下七个关键词进行设定(添注:值得注意的是,tri适用于三斜非正交盒子,此时容许盒子的全部自由度。):
x Pstart Pstop Pdamp y Pstart Pstop Pdamp z Pstart Pstop Pdamp xy 0.0 0.0 Pdamp yz 0.0 0.0 Pdamp xz 0.0 0.0 Pdamp couple none
——————————————————————————————————————
在某些状况下(譬如固体),当向系统施加Nose/Hoover控压和控温器的时候,系统的压强(体积)和温度会意料以外的剧烈振荡。此时,采用关键词drag能够阻缓这些振荡的发生,可是这将修改Nose/Hoover方程。当drag值设定为0.0时,意味着Nose/Hoover方程不发生改变。当采用非零值时,此时会向方程添加一个drag项;drag值设定的越大,阻尼效应越明显。短时间执行并监视压强和温度是肯定阻尼项是否起做用的最佳方法。 一般,介于0.2到2.0之间的值足以抑制几个周期后的振荡。 请注意,使用drag关键词将干扰能量守恒,而且还将更改位置和速度的分布,以使其与名义上的NVT,NPT或NPH系综不彻底相符。
控制初始振荡的另外一种方法是使用链式控温器。 关键词tchain用以肯定粒子控温器中控温器的数量。 数值1对应于原始的Nose/Hoover控温器。 关键词pchain用以指定控温器链中控温器的自由度和控温器数量。 数值0对应于控压器变量中没有进行控温。
关键词mtk控制运动方程式中是否包括由Martyna,Tuckerman和Klein提到的校订项。 若是不指定,则将复制原始的Hoover控压器,其体积几率分布函数与真实的NPT和NPH系综相差1 / V。 所以,使用yes更为正确,可是在许多状况下,差别能够忽略不计。
·