如何讀懂和改寫目前幾款主流的第一性原理軟體(比如VASP,abinit,PWSCF)的源代碼?

最近需要讀懂PWSCF的源代碼,然後再改寫部分代碼。但是發現程序很長,而且有很多模塊,感覺無從下手。讀源代碼有沒有什麼技巧和經驗?有沒有專門介紹第一性原理軟體演算法和編程過程的書籍和資料?


謝邀。

幾點經驗:

  1. 了解計算程序必備的基礎知識:makefile,mpi,稀疏矩陣,blas,lapack,scalapck。
  2. 要首先理解DFT的基本原理。對於Hamiltonian的各項有個基本認識。大體了解一種基矢(PWSCF當然是PW)框架下的Hamiltonian各項(動能,Hartree,XC等)的計算方式。
  3. 一個軟體包Developers』 Manual 是難得的輔助材料(當然良心程度因其開發課題組的重視程度而異),從中需要學到這個軟體的並行架構等具體細節。
  4. 從主函數入手,理清主體流程。
  5. 盡量通過函數名和注釋了解一個函數的基本功能,而不是細究每一行代碼。
  6. 帶有目標的尋找需要重點關注的代碼塊。
  7. 利用可以跳轉的GUI看代碼,個人常用CB:Fortran。
  8. 多用軟體,多看manual。
  9. 多與開發組成員溝通。

大概就這麼幾條。然而真正搞懂一個軟體包,無論方法多麼得當,都是需要經年的苦功。有些具體經驗又根據程序作者的個人偏好而不同,需要自行探索。


謝邀。

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系列用的熟……


推薦閱讀:

下雪冷還是融雪冷?
如何描述二維物理體系的邊緣態?

TAG:理論物理 | 源代碼 | 凝聚態物理 |