最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

分子動力學(xué)模擬 心得 適合新手?。?!

2021-07-21 16:23 作者:Studying9  | 我要投稿

本文來源:“分子動力學(xué)”公眾號


看完《分子模擬從算法到應(yīng)用》那本書的第四章,不用全看完,但是至少要對分子動力學(xué)模擬過程有一個了解。試著按照書的過程做個Ar的NVE,其實(shí)Ar和離子晶體以及其它的任何材料的差別僅僅是勢函數(shù)的問題,雖然由勢函數(shù)帶來了一些問題,但是這些都不是本質(zhì)問題。從初始化的原子數(shù),原子位置,初始速度,時(shí)間步長,初始溫度等等這些初始化結(jié)束了以后,選擇一個簡單的積分算法,如6階的Gear預(yù)測校正,不要控溫控壓,就是一個簡單的NVE,不要考慮任何的提高效率的鄰位算法,因?yàn)檫@個時(shí)候我們可以選擇5×5×5的超原胞,總共的原子數(shù)也就500個,不需要考慮鄰位算法。開始循環(huán)計(jì)算:預(yù)測----計(jì)算原子的力和能量—校正—輸出能量。


這樣最簡單的NVE就編成了,總共也就1000多行,是個很小的程序。自己先試著感受一下。其實(shí)當(dāng)這樣的小程序完成以后,你會覺得分子動力學(xué)編程也很簡單,那么接下來的復(fù)雜的分子動力學(xué)也不會是什么問題。


做完了這一些,你需要知道的是那些是和材料無關(guān)的東西,那么就盡量的分離,開始使用一個個的函數(shù)。例如,原子的位置是和具體的材料相關(guān),但是初始速度卻和材料一點(diǎn)關(guān)系都沒有,同樣的數(shù)值積分中的預(yù)測和校正也是和材料無關(guān)的,以后的控溫和控壓算法也是和材料無關(guān)的。當(dāng)規(guī)模大了以后,鄰位算法也是和材料無關(guān)的,像這些和材料無關(guān)的部分最好自己做成小函數(shù),選擇調(diào)用。以后換材料的時(shí)候程序也不會有太大的改動。


編程小技巧


1.選擇用intel編譯器,個人喜歡用10.1或者9.1的版本,打開優(yōu)化選擇,類似的/QaxS /QxS /Qipo /Qprec-div-等等,以后可以使用Openmp的并行計(jì)算(具體的可以參考intel編譯器的幫助手冊)


2.盡量的簡化計(jì)算,例如2×a就要寫成a+a,在計(jì)算機(jī)中,加減是一個數(shù)量的計(jì)算,乘是一個,除是一個。計(jì)算量逐漸增加,所以選擇a+a來替代2×a 會減少一些計(jì)算量


3.選擇數(shù)據(jù)來替代結(jié)構(gòu)體,結(jié)構(gòu)體看的比較方便,但是計(jì)算效率要低,尤其是在編譯過程中的矢量化的時(shí)候,而數(shù)組則可以很好的矢量化,也更適合并行。結(jié)構(gòu)體的計(jì)算是先找到結(jié)構(gòu)體指針,然后再找里面的參數(shù),當(dāng)并行的時(shí)候,多線程同時(shí)找結(jié)構(gòu)體指針,會很大的減低速度。


4.除法盡量用乘法來替代,有了程序以后,自己可以仔細(xì)的分析里面的計(jì)算消耗,這樣可以更好的優(yōu)化計(jì)算,當(dāng)然最主要的消耗是在力和能量的計(jì)算中,可以選擇離散-插值的方法,使得不同的勢函數(shù)有相同的計(jì)算效率,也可以選擇鄰位算法來分塊計(jì)算。


NVT程序


當(dāng)簡單的NVE做完以后,可以直接做NVT,這僅僅是增加一個簡單的控溫,是很簡單的,早期編程的時(shí)候,建議選擇Nose-Hoover控溫,你會發(fā)現(xiàn) NVT也是如此的簡單。接下來,你可以考慮做做NPH,但是由于引入了壓強(qiáng)算法,原來的原子的位置和速度等等和笛卡爾系有關(guān)的一切內(nèi)容都要發(fā)生改變,這將讓你重新寫程序,可以說是一個完全不同的程序。不過,幸好我們已經(jīng)有了前面的一些經(jīng)驗(yàn),NPH雖然復(fù)雜,但是并不是不可能完成的,注意的是和笛卡爾系相關(guān)的量要變化。早期的計(jì)算,可以選擇Anderson控壓算法。在完成了這些,可以說你已經(jīng)把最主要的分子動力學(xué)程序都完成了。


分子動力學(xué)算法


那么,接下來就是復(fù)雜的分子動力學(xué)算法了,試著選擇PR算法來代替Anderson壓強(qiáng)算法,然后選擇Metric-tensor來代替PR算法;選擇 Nose-Poincare來代替Nose-Hoover算法,選擇Generalized-Leap-Frog算法來替代預(yù)測校正算法,用Wolf來替代Ewalds算法,這些一步步的改進(jìn)都會讓你有很多新的發(fā)現(xiàn)。你會覺得你的程序達(dá)到了現(xiàn)在大部分軟件包沒有的功能。隨著規(guī)模的增大,你可以選擇 Verlet列表,原胞列表、結(jié)合法以及快速排序來實(shí)現(xiàn)鄰位算法,如果再有了openmp并行計(jì)算的加入,你會發(fā)現(xiàn)你的程序已經(jīng)有了一個質(zhì)的突破。


END


當(dāng)這些都完成了以后,接下來就可以改變勢函數(shù)來模擬不同的材料了,而且你對分子動力學(xué)的理解也會上升到一個新的高度,此外,其余相關(guān)的結(jié)果也不會是問題了,例如,彈性模量的計(jì)算,MSD,徑向分布函數(shù)等等。你可以直接的加入代碼來實(shí)現(xiàn)你想要的過程。

新化县| 东平县| 潮州市| 富顺县| 城市| 华容县| 沽源县| 罗江县| 泽库县| 武宁县| 济源市| 城口县| 江西省| 来凤县| 威海市| 广河县| 察隅县| 云龙县| 筠连县| 鹤峰县| 会泽县| 宜宾县| 东港市| 达尔| 德保县| 西和县| 文安县| 宣城市| 西平县| 驻马店市| 炎陵县| 探索| 额敏县| 县级市| 定远县| 凤庆县| 阿拉善右旗| 油尖旺区| 汾阳市| 当阳市| 分宜县|