無論任何模擬,我們都是想從模擬中得到我們想要的數據【data】,然后分析這些數據,從而提取出相關的信息【MAYBE新的發現】,那么數據的輸出是
必然的一道程序,下面談談LAMMPS軟件是如何輸出data。
LAMMPS中處理的輸出數據主要分一下三個大的部分:
1.斷點數據,這個主要是為了防止模擬過程中出現意外,比如實驗室或機房突然斷電,程序部分階段有錯誤等等。
2.系統熱力學量的輸出,這些量一般是體系中各個原子的集體行為量,比如溫度,壓強等
3.單原子詳細信息的輸出,如我們想得到的軌跡文件
對應於上面的三大部分,LAMMPS設置了不同的命令,有些命令結合在一起實現相關的功能。
1.對於斷點數據,原始數據,LAMMPS主要有一下命令進行數據的輸入輸出。read_data,read_restart【讀入】,
restart,write_restart【輸出】,如果能靈活運用這幾個命令,會讓你的模擬在突發事件下得到經濟上的收獲。其中命令里有兩類通配
符,* 表示時間步,% 表示CPU編號。
2.全局熱力學數據,也就是所謂的thermodynamic output,這些量是面向於系統的,而不是面向於某一類,某一組,原子的。一般是系統
宏觀信息的數據。處理這些數據的命令主要有如下幾個 thermo, thermo_modify, thermo_style[這個命令對於初學者要
認真研究和調試],還有相關的把單原子信息轉換為【global quantities】的輔助命令:fix ave/time,fix ave/
spatial, compute reduce 這些命令可以自己設定輸出的頻率,文件名等等。thermo_style 和 compute/
fix/variable命令結合進行數據的處理和輸出是個大學問,這個需要不斷的調試才能熟練掌握。其實研究variable compute和少數
關於數據處理的fix可以節約你大量后期數據處理的時間。
3.單原子數據。相關命令主要有dump, dump_modify,undump.時刻牢記這些命令用於處理atom的數據對於你出現的錯誤就有敏感
性了,呵呵。
4。echo,print,fix print結合variable可以用於調試你的腳本,糾錯。
5.秀個例子,用於輸出setforce, group原子於其他相互作用力
#------------------------------------------------------------------------------------
fix 3 tetras setforce 0.0 0.0 0.0
variable fx equal f_3[1]
variable fy equal f_3[2]
variable fz equal f_3[3]
fix 4 tetras print 1 "-- ${fx} ${fy} ${fz} --"
#------------------------------------------------------------------------------------
thermo 2
thermo_style custom step f_3[1] f_3[1] f_3[1]
#------------------------------------------------------------------------------------
以上由redream/一下是fc所寫
關於output,手冊4.15,曾粗略翻譯過
除了restart文件,LAMMPS還有兩種基本的輸出。第一種是熱力學輸出,每隔一定的時間步就打印到屏幕和log文件的一列數。第二種是dump
文件,包括按照一定的頻率寫入文件的原子位置快照和各種per-atom數值。每個模擬打印一組熱力學輸出;可能生成任意數目的dump文件。如下所討
論的,LAMMPS為你提供多種方式來決定當熱力學信息和dump文件輸出的時候,哪些量是需要計算和打印的。有3個fix命令可以按照用戶選擇的量執
行它們自己的輸出:fix ave/time用來做時間平均,fix ave/spatial用來做空間平均,以及fix print。下面會詳述。貫
穿這個討論,用戶要注意他們可以添加自己的compute命令和fix命令,通過這些命令定義自己的輸出。
Thermodynamic output 熱力學輸出的頻率和格式是由thermo、thermo_style、thermo_modify命令設置
的。thermo_style命令也指定了哪些數值需要被計算輸出。可以指定預先定義的變量(例如press、etotal等等)。還可以指定三類
keyword(c_ID、f_ID、 v_name),分別由compute、fix、variable命令提供相應的數據。以下依次講述。
在LAMMPS中,有兩種類型的compute命令:一種計算global value(例如溫度,壓強張量)另一種計算per-atom
values。只有前者可以作為熱力學輸出。用戶指定的compute命令的ID加上一個可選的下標作為thermo_style命令的一部分。例如
c_myTemp 輸出由該compute得到的標量值;c_myTemp[2]輸出第2個矢量分量。注意compute reduce可以對per-
atom的量加和得到global標量和矢量。
fix命令可以生成由熱力學輸出的global scalar或vector,例如壓頭(indenter)與原子之間的相互作用能。這些數值可以通過
與前述compute命令同樣的格式,如f_ID、 f_ID[N]。至於哪個fix計算可通過熱力學信息輸出的global values請參閱見各
個fix的手冊。
fix ave/time生成的時間平均的全局量可由熱力學輸出,例如按時間平均的壓強。
可以在in文件中定義變量,除了atom style的變量之外,其它所有的變量都可以通過熱力學信息輸出,因為atom style的變量生成對應每
個原子的值。thermo_style通過v_abc的形式調用名為abc的變量。
跟equal style變量有關的公式,可以包含數學操作符、函數(例如x+y,x*y,(),sqrt,exp)、原子屬性(例如x[N],fx
[N])、 group函數(例如mass(),vcm())、熱力學量(如temp,press,vol)、compute命令得到的全局量、fix
命令得到的全局量、以及其它variable命令的相關變量。因此equal-style變量是定義由熱力學信息計算和輸出的變量的最普遍的方式。
Dump file output
dump文件輸出由dump命令和dump_modify命令指定。有很多預先定義的格式,如dump atom、dump xtc等等。同樣,有一種
用戶指定輸出各個原子的哪些屬性的dump custom格式。可以指定預定義的keyword(如tag、x、fx)也可以指定另外三種
keyword(即c_ID、f_ID、v_name,分別由compute、fix、variable命令提供相應數值)。以下依次講述。
compute命令生成一個或多個可被dump custom共享的per-atom values。這些compute命令的style中含有
atom字樣,例如ke/atom、stress/atom等等。對於標量的per-atom value來說,可以使用c_myKE調用;對於矢量的
per-atom value的某個分量,可以使用c_myStress[2]調用。
fix命令生成可輸出到dump文件的per-atom values。例如,fix ave/atom命令計算每個原子屬性值的時間平均,就像那些
per-atom compute命令以及atom-style variable。這些per-atom fix value可以被dump
custom命令通過跟上述處理compute命令同樣的方式共享,例如f_myKE或者f_myStress[2]。
variable命令可以在in文件中使用。只有atom-style變量可用於dump custom輸出,因為只有它們生成per-atom
value。dump custom命令通過v_abc的形式引用名為abc的變量。
就像equal style變量類似,跟atom-style變量有關的公式,也可以包含數學操作符、函數(例如x+y、x*y、()、sqrt、
exp)、原子屬性值(例如x[N]、fx[N])、group函數(例如mass()、vcm())、熱力學量(如temp、press、vol)、
compute命令得到的全局量、fix命令得到的全局量、以及其它生成全局量的非 atom-style變量。另外,atom-style變量可以引
用原子屬性值向量(如x[]、fx[]等)、生成per-atom值的compute、生成per-atom值的fix,以及其它atom-style
變量。因此atom-style變量是定義由dump文件計算和輸出的變量的最普遍的方式。
Fix output 三個用於輸出的fix命令需要額外注意:fix ave/time、fix ave/spatial、fix print。
fix ave/time命令能夠對任何全局量進行時間平均,例如那些輸出的熱力學信息。由用戶指定一個或多個需要進行時間平均的物理量,可以是
compute命令得到的全局量、fix命令得到的全局量,或者非atom-style變量。因為變量可以涉及thermo_style custom
命令使用的keyword(例如temp或press),那么任何熱力學量都可以按這種方法進行時間平均。
fix ave/time命令提供了控制如何進行時間積分的幾個選項。它生成的結果可以按照如下兩種方法使用。第一,可將結果直接寫入一個文件,每個時
間步的值占一行。注意可以調節平均參數使得根本不做平均,而只是作為把期望的物理量直接輸出到指定的文件的便捷方式。
就像其它生成全局量的fix一樣,該fix的結果也可以作為其它任何可以共享全局量的命令的輸入,例如thermo_style custom命令,或
者variable命令。
fix ave/spatial命令可以對per-atom量進行空間平均,類似dump文件輸出,只不過后者相當於僅把simulation box
分為一層。per-atom量可以是密度(質量密度或數密度)或者原子的屬性例如位置、速度、力,也可以使compute、fix、atom-
style variable計算的per-atom值。
fix ave/spatial命令提供了控制如何進行空間平均的幾個選項。它得到的per-layer值可以按照如下兩種方式使用。第一,直接將其寫
入文件。注意可以調節平均參數使得根本不做空間平均,而只是作為把期望的物理量(1d layer內所有原子的相應值的求和)直接輸出得到指定文件的便
捷方式。就像其它生成全局量的fix一樣,該fix的結果也可以作為其它任何可以共享全局量的命令的輸入,例如thermo_style custom
命令,或者variable命令。至於如何引用這些值,請參閱fix ave/spatial命令的手冊說明。
fix print命令在模擬的過程中,定時性的生成寫入屏幕和log文件或指定文件的一行輸出。該行輸出可以包括一個或多個變量值(非atom-
style變量),如前面已經解釋過的,變量本身可以包括引用thermo_style命令的keyword、compute、fix或其它
variable命令生成的全局量。因此fix print命令是區別於正常的熱力學信息輸出或者dump文件輸出,而輸出任何期望得到計算的物理量的
方法。
以下這個表格概況了各種輸出方法相關的命令,詳述了它們的輸入輸出分別是什么,同樣列出了調用它們完成輸出的頻率。一般來說,只要兩個命令的輸入輸出相
匹配,那么這兩個命令就可以承接使用。匹配是指輸入輸出頻率以及global還是per-atom屬性完全一致。
表格樓主已給出,不再重復
秀個例子,用於輸出setforce, group原子於其他相互作用力
#------------------------------------------------------------------------------------
fix 3 tetras setforce 0.0 0.0 0.0
variable fx equal f_3[1]
variable fy equal f_3[2]
variable fz equal f_3[3]
fix 4 tetras print 1 "-- ${fx} ${fy} ${fz} --"
#------------------------------------------------------------------------------------
thermo 2
thermo_style custom step f_3[1] f_3[1] f_3[1]
#------------------------------------------------------------------------------------