如何讀懂和改寫目前幾款主流的第一性原理軟體(比如VASP,abinit,PWSCF)的源代碼?
最近需要讀懂PWSCF的源代碼,然後再改寫部分代碼。但是發現程序很長,而且有很多模塊,感覺無從下手。讀源代碼有沒有什麼技巧和經驗?有沒有專門介紹第一性原理軟體演算法和編程過程的書籍和資料?
謝邀。
幾點經驗:
- 了解計算程序必備的基礎知識:makefile,mpi,稀疏矩陣,blas,lapack,scalapck。
- 要首先理解DFT的基本原理。對於Hamiltonian的各項有個基本認識。大體了解一種基矢(PWSCF當然是PW)框架下的Hamiltonian各項(動能,Hartree,XC等)的計算方式。
- 一個軟體包Developers』 Manual 是難得的輔助材料(當然良心程度因其開發課題組的重視程度而異),從中需要學到這個軟體的並行架構等具體細節。
- 從主函數入手,理清主體流程。
- 盡量通過函數名和注釋了解一個函數的基本功能,而不是細究每一行代碼。
- 帶有目標的尋找需要重點關注的代碼塊。
- 利用可以跳轉的GUI看代碼,個人常用CB:Fortran。
- 多用軟體,多看manual。
- 多與開發組成員溝通。
大概就這麼幾條。然而真正搞懂一個軟體包,無論方法多麼得當,都是需要經年的苦功。有些具體經驗又根據程序作者的個人偏好而不同,需要自行探索。
謝邀。
charleslian已經寫得挺好的了。 原來我看VASP程序的時候是把所有程序都列印出來,一點一點研讀。 從main程序開始,模塊化拆解,最後再對細節進行研究。
查看Fortran代碼,可以使用understand軟體,這個軟體會幫助你找到程序的調用和被調用。如果使用vim的話,可以結合ctags一起分析。
說實在的,完全從頭到尾去看VASP等程序的源碼,確實不是一件理智的事情。因為看完了也很容易全部忘了。 看代碼一定要帶著問題去看,或者說有自己想實現的演算法或者功能再去看,這樣收穫是最大的。
如果導師說讓你去看整個程序,你一定要和他頂嘴: 老子真的不是很閑,這世界上還有很多窮苦的人民等著我就解救。
最後說點tips:
1. 先看贗勢理論,從模守恆贗勢開始,到超軟贗勢,最後到PAW。這部分研究透徹了,可以說VASP等軟體你就看懂一半了。
2. 看解KS方程的演算法,這個建議看Kresse的文章,就是寫RMM-DIIS的。這是整個軟體的核心,所有數據都是為它服務的。
3. 其它的慢慢做筆記,然後給大家分享,這樣大家可以一起探討。
我讀過vasp源代碼。為了實現自己想要的功能改動過,編譯過。
vasp的注釋寫的還不錯。有的地方甚至已經考慮到有人想要實現新的功能,把介面都做好了,也有注釋
強烈建議有的放矢,為了實現自己想要的功能去讀。盲目的讀會迷失的
首先學會使用vasp!可以從main.F入手,了解框架,之後選擇你關心的地方,再讀,再改謝邀,不會代碼軟體,只會ae pr ps
-Scitools Understand ?
謝邀。但我是個文科生啊……電腦的問題就office系列用的熟……
推薦閱讀: