轉自:小木蟲 田淮安 的回答。
LAMMPS中的溫度是由原子的動能計算而來的,具體可參見手冊compute temp command一節的說明。
LAMMPS的模擬結果,我這里指的是dump命令得到的lammpstrj文件,主要內容都是每個時刻每個原子的信息,包括坐標、速度、動能、勢能等等(這些是由dump命令來設置的)。只要你的lammpstrj里面有動能數據,上面的圖就容易畫。
方法一:用OVITO導入lammpstrj,然后着色。
OVITO是一個專門對LAMMPS結果進行着色的軟件,google一下就能找到官網,免費的,LINUX和WINDOWS下都有相應的版本。着色原理是按每個原子的某一種屬性的值來配色,比如按原子的x值或者動能。操作很簡單。缺點是得到的圖是原子化的,基本單位是球,不是你想要的那種連續介質均勻分布的圖。比如下圖,就是石墨被C60轟擊后表面區域的溫度分布(側視圖),可以看到每個原子的溫度。
方法二:先將數據分道處理,然后畫contour圖
你貼的這種連續分布圖,就是常見的contour圖。你需要先把lammpstrj里的溫度從以原子為單位轉化到以空間為單位。假設你想畫x-y面的溫度分布,那么就把lammpstrj中的原子按位置填到x-y空間中的小格子里,求出每一個格子里的平均溫度,得到一個數據文件,應該有三列,(x,y,T),x,y是某一個小格子的中心坐標,T就是相應的溫度,然后用originpro、matlab等常用軟件畫contour圖就行了。下圖是我畫的石墨缺口處的原子密度contour圖,顏色深淺代表原子密度的高低;溫度也可以用同樣的方法得到。
抱歉,這幾天沒上小木蟲。
關於你的兩個問題:
1、怎么從LAMMPSTRJ文件中得到(x,y,T)的數據?
這個你寫點C++代碼,或者在LINUX下用腳本或VIM,對LAMMPSTRJ文件進行處理就行了,提取出你想要的那一個時刻的x,y,ke(指動能)這三列數據。這是最基本的數據處理,你如果沒做過可以找擅長C++/LINUX的人幫忙,非常簡單。
2、怎么用OVITO對原子動能進行着色?
前提是你載入的LAMMPSTRJ文件中有動能這一列,這需要你在in_file的dump命令中提前設置;如果你的LAMMPSTRJ文件中只有原子坐標,自然就只能對坐標着色。
已經含ke的話就比較簡單了:
(1)打開OVITO,載入文件;拉下右側菜單,點color coding,如下圖
(2)在下面的property中選擇你之前設置的動能數據。我的這個文件中,c_1代表動能,就選擇c_1,如下圖;
(3)可以調節動能值的范圍,如下圖;
(4)也可以在選擇顏色種類,比如我把彩虹色改為熱色,如下圖;
。
問:現在我載入的LAMMPS輸出文件中,還沒有像你這樣的C_1的動能值,請問您在in文件中如何設置,使它出現,我用的thermo_style中包含了ke、pe,但載入時還是沒有能量的選項,求賜教
答:thermo_style中的ke是所有原子的總動能,是全局變量(global),LAMMPS會自動計算;
你想得到的是每個原子的動能,是原子變量(atomic),需要你在in文件中先用compute命令計算,然后在dump一行中引用compute的編號。
比如,我計算原子動能的命令是
compute 1 all ke/atom,意思是計算每個原子的動能,計算名稱為1(這個名稱可以是數字,也可以是字符串,隨個人風格)。
而我的dump命令是
dump 1 all custom 1000 filename.lammpstrj id type x y z c_1,意思就是每隔1000步輸出每個原子的編號(id)、類型(type)、三維坐標(x,y,z)和動能(c_1)。"c_1"這種格式是LAMMPS定義的,表示名稱為1的計算的結果。類似的還有v_name,表示用戶定義的名稱為name的變量。
細節可以在手冊的compute、dump等命令中找到。建議你多讀手冊。這些東西手冊里講得很清楚。
希望對你有幫助