語法:
fix ID group-ID style_name keyword value ...
- ID 是fix名,group-ID是fix所作用的群組名。這兩個是所有fix命令都需要的。
- style_name可以選擇NVT、NPT或者NPH
- 關鍵詞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
詳細說明:
這些命令用來對Nose-Hoover型的non-Hamiltonian運動方程進行時間積分。該運動方程用以從正則系綜、等溫等壓系綜、等焓系綜采樣生成原子的位置和速度,從而對所定義的群組內的原子在每一個時間步進行位置和速度的更新。(添注:事實上,系綜最簡單的理解是通過命令的字母,譬如NVT中N代表系統的原子數、V代表系統的體積、T代表系統的溫度,因此NVT就代表恆原子數恆溫恆體積的系綜,具體的積分迭代形式可以查閱相關的分子動力學模擬專著。)
控溫器(thermostatting)和控壓器(barostatting)通過添加一些動態變量來實現,這些動態變量與粒子速度(控溫)和模擬區域的尺寸(控壓)相關聯。在基本單向的控溫和控壓之外,這些命令還可以與粒子控溫器耦合創建控溫器鏈,或者與控壓變量耦合創建另一條控溫器鏈。控壓器與盒子的總體積、或者包括xy、xz及yz的盒子夾角相互耦合。來自於控壓器的外部壓強可以定義為一個標量(等壓系綜)也可以定義為對稱應力張量(固定應力系綜)。如果命令被正確使用,時間平均的溫度和應力張量會與通過“Tstart/Tstop”和“Pstart/Pstop”所指定的目標值相符。(添注:簡單的理解來說,控溫改變粒子速度;控壓改變系統盒子的尺寸。注意比較控壓器定義為標量或者是對稱應力張量的區別,在后者盒子會有剪切自由度,而前者情況下,盒子在控壓過程中一直保持只是長方體的block。)
所使用的運動方程是Shinoda等人的方程,將Martyna、Tobias和Klein的流體靜力學方程與Parrinello中的Parrinello和Rahman提出的應變能結合在一起。 時間積分框架采用Tuckerman等人推導的時間可逆測度保持 (time-reversible measure-preserving)Verlet和rRESPA積分器。
——————————————————————————————————————
fix命令下通過nvt和npt的控溫參數是用temp關鍵詞來進行設定。其它控溫相關的關鍵詞包括tchain、tloop和drag,下面對此進行討論。
控溫器僅僅應用在擁有平移自由度的粒子。平移自由度可以在進行控溫前移除偏速度(bias velocity),參見下面進行的討論。期望的溫度在運行的每一個時間步都隨着Tstart到Tstop不斷上升。Tdamp參數的單位是時間單位,用來決定溫度的釋放速度的快慢。舉例來說,Tdamp的數值如果設定為10.0,這意味着釋放溫度在大概10個時間步的范圍內進行(譬如tau,fa及ps,這根據units命令中的設定時間單位來確定)。只有在fix命令中所指定的group,他們的速度和位置才會通過指定系綜下進行積分更新。
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)
——————————————————————————————————————
在該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更為正確,但是在許多情況下,差異可以忽略不計。