語法: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更爲正確,可是在許多狀況下,差別能夠忽略不計。
·