最近兩個月一直處於寫論文,改論文的狀態,今天上交了第五次修改的論文後,突然發現好久沒更文章了,實在是抱歉~
我們先回顧一下LAMMPS腳本文件(俗稱in文件)的骨架結構:
1、基本模擬系統設置
2、初始模型構建(讀取模型數據)
3、定義原子間相互作用勢
4、系統系綜設定
5、原子某些信息計算設定
6、原子信息輸出
這骨架中的前兩個部分我們已經在前面的文章中介紹過了,今天就剩下的幾個部分都講了吧。當我們設置好基本的模擬系統,並構建好相應的初始模型,我們就應該開始選取合適的原子相互作用勢函數,並規定模擬系統所處的環境(定義相應的系綜)。關於原子相互作用勢,前面有一期內容有專門講解,有興趣的同學可以查找看看,這裡主要講其在LAMMPS中的用法,這裡以我常用的eam/alloy勢為例:
pair_style eam/alloy #告訴LAMMPS勢函數的類型是eam/alloy
pair_coeff * * xx/xx/xx/AlNi.eam.alloy Al Ni # * * 表示任意兩種原子的相互作用勢都是這種類型,xx/xx/xx/表示勢文件AlNi.eam.alloy的絕對路徑,勢文件AlNi.eam.alloy則是按照LAMMPS的規則將eam勢用表格的形式表示出來。常用的eam/alloy勢文件LAMMPS軟體包中就有,後面也會介紹一個網站,可是若是碰到一些不常見的,那各位只能自己寫代碼處理了,本人暫時沒寫過,這一點幫不了大家了~。不過一般你發現了適合你的eam勢函數,你可以直接與其作者聯繫,對方會很樂意提供給你使用的。我相信各位也有用LJ,meam或者是morse勢的,沒關係,稍微查看一下lammps的格式就好,當需要提供一些類似於eam勢的勢文件時,自己解決不了就直接找作者吧,不過有一點需要注意,當你嘗試運行時,若出現unknown pair style 的錯誤,例如你使用meam勢時,出現此類錯誤,只有兩種可能:1、格式不對;2、沒有安裝相應的meam包。
定義好原子間的相互作用勢之後,我們該根據我們模擬的內容來為我們的系統構建合適的環境,即為其選取合適的系綜,一般常用的系綜有NVT;NVE以及NPT,對此不熟悉的建議補充下熱力學知識。具體用法如下:
fix 1 all nve/nvt/npt 或者 fix 1 outer nve/nvt/npt # 1 表示給這個操作一個標籤;all 表示此次操作的對象為整個系統;outer表示此次操作的對象為outer這個區域;nve/nvt/npt就表示該操作賦予了對象nve,nvt或者npt的模擬環境。不過在這個操作之前我們一般要賦予每個原子速度(高斯分布),具體操作:
velocity all create 300 123 mom yes rot yes # 這個命令就表示每個原子在300K條件下的速度滿足高斯分布 其中123是個隨機數,只要這個數是正數就行了,mom yes 和rot yes一般設置為yes,具體原因這裡不做解釋,感興趣的可以查看手冊。
當我們給模擬的系統設置好相應的環境之後, 我們就應該考慮我們需要些什麼信息了,一般lammps會給你自動計算原子在不同時刻的坐標,這一點不用你額外操作,但是你想得到每個原子的勢能,這時候你就需要compute命令了具體用法如下:
compute 1 all pe/atom 或者 compute 1 outer pe/atom #與fix類似,這裡的1也是表示給此操作一個標籤;all 表示此次操作的對象為整個系統;outer表示此次操作的對象為outer這個區域;pe/atom表示要這個操作的功能是計算每個原子的勢能。
這裡提醒一點:compute 和fix 命令都是一個系列,有很多你想計算的信息都可以用compute命令來解決(例如msd),而且很多時候我們在設置好系綜後還要對我們的模擬系統進行其它操作(例如拉伸),這時候我們也用fix命令,以後我會在我的文章裡多多講解例子的,大家平時在使用lammps時一定要多多注意這兩個命令,特別是fix命令,至於compute命令,偶爾多看看就好,因為可能有很多你想知道信息都是lammps自動計算的熱力學信息,你只需要把它輸出來就好,這樣便需要我們的輸出命令了。
一般常用的輸出命令有thermo_style; dump;具體用法如下:
thermo 10 #每10步輸出一次熱力學信息
thermo_style custom step pe press etotal #thermo_style一般要與thermo 命令連用,這裡custom表示後面輸出的信息是你需要的,不需要的不用寫(例如你還可以在後面加上 time;dt之類的),具體的熱力學信息這裡就不多說了,大家稍看下手冊就清楚了,只提醒一點,需要什麼就輸出什麼,別弄多了看得眼花。
dump 1 all custom 100 outer.xyz id type x y z c_1#1同樣表示為此操作的一個標識 all表示操作對象為系統內所有原子, all也可以換為局部區域outer,100表示每100步輸出一次,outer.xyz為輸出信息所在的文件名(不需要提前創建),id type x y z 則為相應的原子信息,當然還有很多其它的原子信息(例如fx,fz,fy,vx,vy,vz),與thermo_style類似,稍看手冊便知。這裡主要提一下c_1,表示通過標識為1的compute的操作所得到的單個原子的信息(不是單個原子的不行)在這裡被輸出,同理,若你compute的命令是計算體系的信息,則c_1就加載thermo_style custom 後面。
最後我們用run命令來運行:
run 10000#運行10000步,根據自己的要求以及步長來定步數
好了,lammps的輸入腳本文件總體介紹就到這結束了,介紹的不算很詳細,畢竟lammps功能太強大了,有很多命令小編我可能永遠涉及不到,我的目的也只是想讓各位使用lammps進行計算任務的新手能更快入門,更快熟悉lammps這個軟體,今後我也會專門詳解一些例子,幫助大家更好的使用這個軟體,謝謝各位支持。
勢函數網站(不全):http://www.ctcms.nist.gov/potentials/